spring mvc java代码详解

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

[java] view plaincopyweb

  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参数来区分访问不一样的方法,代码以下:spring

[java] view plaincopy架构

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 plaincopy
package 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";  
    }  
}
相关文章
相关标签/搜索