基于spring|基于spring mvc请求controller访问方式
目录
- spring mvc请求controller访问
- 1.一个Controller里含有不同的请求url
- 2.采用一个url访问
- 3.RequestMapping在Class上
- 4.在SpringMVC中常用的注解
- springmvc请求一次,访问多个controller方法
- 举例
- 结论
spring mvc请求controller访问
1.一个Controller里含有不同的请求url
@Controller//类似Struts的Actionpublic class TestController {@RequestMapping("test/login.do")// 请求url地址映射,类似Struts的action-mappingpublic String testLogin(@RequestParam(value="https://www.it610.com/article/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"; }}
2.采用一个url访问
通过url参数来区分访问不同的方法
@Controller@RequestMapping("/test2/login.do")// 指定唯一一个*.do请求关联到该Controllerpublic class TestController2 {@RequestMappingpublic 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"; }}
3.RequestMapping在Class上
可看做是父Request请求url,而RequestMapping在方法上的可看做是子Request请求url,父子请求url最终会拼起来与页面请求url进行匹配
@Controller@RequestMapping("/test3/*")// 父request请求urlpublic class TestController3 {@RequestMapping("login.do")// 子request请求url,拼接后等价于/test3/login.dopublic String testLogin(String username, String password, int age) {if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {return "loginError"; }return "loginSuccess"; }}
4.在SpringMVC中常用的注解
还有@PathVariable,@RequestParam,@PathVariable标记在方法的参数上,利用它标记的参数可以利用请求路径传值
@Controller//类似Struts的Actionpublic class TestController { @RequestMapping(value="https://www.it610.com/comment/{blogId}", method=RequestMethod.POST) public void comment(Comment comment,@PathVariable int blogId) throws IOException { }}
springmvc请求一次,访问多个controller方法 有一个需求:请求一次,访问多个controller中的方法
比如:先执行查询操作,再将查询出来的内容更新(当然也可以将方法写到bo中,在controller中直接调用bo的方法,这里只是举个例子)
举例
【基于spring|基于spring mvc请求controller访问方式】JSP页面
在一个action中执行两个方法 - 锐客网 1 哈哈 7000编辑
Controller页面
@Controller@RequestMapping("/emp")public class EmpAction { @RequestMapping(value="https://www.it610.com/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="https://www.it610.com/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;
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 基于|基于 antd 风格的 element-table + pagination 的二次封装
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 基于爱,才会有“愿望”当“要求”。2017.8.12
- 2018-07-09|2018-07-09 Spring 的DBCP,c3p0
- spring|spring boot项目启动websocket
- Spring|Spring Boot 整合 Activiti6.0.0
- Spring集成|Spring集成 Mina