这篇文章给大家分享的是有关基于spring mvc请求controller访问方式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
@Controller //类似Struts的Action public class TestController { @RequestMapping("test/login.do") // 请求url地址映射,类似Struts的action-mapping public String testLogin(@RequestParam(value="username")String username, String password, HttpServletRequest request) { // @RequestParam是指请求url地址映射中必须含有的参数(除非属性required=false) // @RequestParam可简写为:@RequestParam("username") if (!"admin".equals(username) || !"admin".equals(password)) { return "loginError"; // 跳转页面路径(默认为转发),该路径不需要包含spring-servlet配置文件中配置的前缀和后缀 } return "loginSuccess"; } }
通过url参数来区分访问不同的方法
@Controller @RequestMapping("/test2/login.do") // 指定唯一一个*.do请求关联到该Controller public class TestController2 { @RequestMapping public String testLogin(String username, String password, int age) { // 如果不加任何参数,则在请求/test2/login.do时,便默认执行该方法 if (!"admin".equals(username) || !"admin".equals(password) || age < 5) { return "loginError"; } return "loginSuccess"; } @RequestMapping(params = "method=1", method=RequestMethod.POST) public String testLogin2(String username, String password) { // 依据params的参数method的值来区分不同的调用方法 // 可以指定页面请求方式的类型,默认为get请求 if (!"admin".equals(username) || !"admin".equals(password)) { return "loginError"; } return "loginSuccess"; } @RequestMapping(params = "method=2") public String testLogin3(String username, String password, int age) { if (!"admin".equals(username) || !"admin".equals(password) || age < 5) { return "loginError"; } return "loginSuccess"; } }
可看做是父Request请求url,而RequestMapping在方法上的可看做是子Request请求url,父子请求url最终会拼起来与页面请求url进行匹配
@Controller @RequestMapping("/test3/*") // 父request请求url public class TestController3 { @RequestMapping("login.do") // 子request请求url,拼接后等价于/test3/login.do public String testLogin(String username, String password, int age) { if (!"admin".equals(username) || !"admin".equals(password) || age < 5) { return "loginError"; } return "loginSuccess"; } }
还有@PathVariable,@RequestParam,@PathVariable标记在方法的参数上,利用它标记的参数可以利用请求路径传值
@Controller //类似Struts的Action public class TestController { @RequestMapping(value="/comment/{blogId}", method=RequestMethod.POST) public void comment(Comment comment,@PathVariable int blogId) throws IOException { } }
有一个需求:请求一次,访问多个controller中的方法
比如:先执行查询操作,再将查询出来的内容更新(当然也可以将方法写到bo中,在controller中直接调用bo的方法,这里只是举个例子)
JSP页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>在一个action中执行两个方法</title> </head> <body> 1 哈哈 7000 <a href="${pageContext.request.contextPath}/emp/find?id=1" rel="external nofollow" >编辑</a> </body> </html>
Controller页面
@Controller @RequestMapping("/emp") public class EmpAction { @RequestMapping(value="/find") public String findEmpById(int id) throws Exception{ System.out.println("查询"+id+"号员工信息"); //转发到EmpAction的另一个方法中去,即再次发送请求 // return "forward:/emp/update"; //重定向到EmpAction的另一个方法中去,即再次发送请求 return "redirect:/emp/update.action?id=" + id; } @RequestMapping(value="/update") public String updateEmpById(int id,Model model) throws Exception{ System.out.println("更新" + id +"号员工信息"); model.addAttribute("message","更新员工信息成功"); return "success"; } }
1. ModelAndView并不能实现两个方法之间的数据传递;
2. 可以通过Session来进行传递。
有多种方法可以实现Session传递
方法1:将HttpServletRequest作为方法形参 通过request.getSession().addAttribute
方法2:将HttpSession作为方法形参
方法3:通过@SessionAttribute+@ModelAttribute来进行传递
使用HttpSession来存取数据,不过这样又在springmvc中使用了servlet的内容,并不好
3. 使用转发。在转发情况下,共享request域对象,会将参数从第一个业务控制方法传入第二个业务控制方法
return"forward:/emp/update.action";
4. 重定向不共享参数,所以要带参数才行
return "redirect:/emp/update.action?id="+ id;
感谢各位的阅读!关于“基于spring mvc请求controller访问方式的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。