博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring mvc java代码详解
阅读量:6081 次
发布时间:2019-06-20

本文共 4592 字,大约阅读时间需要 15 分钟。

hot3.png

 Spring MVC与Struts从原理上很相似(都是基于MVC架构),都有一个控制页面请求的Servlet,处理完后跳转页面。看如下代码(注解):

[java] 

  1. package controller;    import javax.servlet.http.HttpServletRequest;    import org.springframework.stereotype.Controller;  import org.springframework.web.bind.annotation.RequestMapping;  import org.springframework.web.bind.annotation.RequestParam;    import entity.User;    @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";      }        @RequestMapping("/test/login2.do")      public ModelAndView testLogin2(String username, String password, int age){          // request和response不必非要出现在方法中,如果用不上的话可以去掉          // 参数的名称是与页面控件的name相匹配,参数类型会自动被转换                    if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {              return new ModelAndView("loginError"); // 手动实例化ModelAndView完成跳转页面(转发),效果等同于上面的方法返回字符串          }          return new ModelAndView(new RedirectView("../index.jsp"));  // 采用重定向方式跳转页面          // 重定向还有一种简单写法          // return new ModelAndView("redirect:../index.jsp");      }        @RequestMapping("/test/login3.do")      public ModelAndView testLogin3(User user) {          // 同样支持参数为表单对象,类似于Struts的ActionForm,User不需要任何配置,直接写即可          String username = user.getUsername();          String password = user.getPassword();          int age = user.getAge();                    if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {              return new ModelAndView("loginError");          }          return new ModelAndView("loginSuccess");      }        @Resource (name = "loginService")  // 获取applicationContext.xml中bean的id为loginService的,并注入      private LoginService loginService;  //等价于spring传统注入方式写get和set方法,这样的好处是简洁工整,省去了不必要得代码        @RequestMapping("/test/login4.do")      public String testLogin4(User user) {          if (loginService.login(user) == false) {              return "loginError";          }          return "loginSuccess";      }  }

  以上4个方法示例,是一个Controller里含有不同的请求url,也可以采用一个url访问,通过url参数来区分访问不同的方法,代码如下:

[java] 

package controller;    import org.springframework.stereotype.Controller;  import org.springframework.web.bind.annotation.RequestMapping;  import org.springframework.web.bind.annotation.RequestMethod;    @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";      }  }    其实RequestMapping在Class上,可看做是父Request请求url,而RequestMapping在方法上的可看做是子Request请求url,父子请求url最终会拼起来与页面请求url进行匹配,因此RequestMapping也可以这么写:[java] view plaincopypackage controller;    import org.springframework.stereotype.Controller;  import org.springframework.web.bind.annotation.RequestMapping;    @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";      }  }

转载于:https://my.oschina.net/u/1013711/blog/208939

你可能感兴趣的文章
neo4j---删除关系和节点
查看>>
redis分布式锁redisson
查看>>
什么样的企业可以称之为初创企业?
查看>>
Python爬虫之BeautifulSoup
查看>>
《HTML 5与CSS 3权威指南(第3版·下册)》——第20章 使用选择器在页面中插入内容...
查看>>
如何判断自己适不适合做程序员?这几个特点了解一下
查看>>
newinstance()和new有什么区别
查看>>
android下载封装类
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
Nginx访问控制和虚拟主机
查看>>
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>
Linux--sed使用
查看>>
没有显示器的情况下安装和使用树莓派
查看>>
Q85 最大矩形
查看>>
【android】使用handler更新UI
查看>>
mochiweb 源码阅读(十五)
查看>>
前端面试中的常见的算法问题
查看>>
计算机语言的基本理论
查看>>
nodejs流之行读取器例子
查看>>