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";  
    }  
}
相關文章
相關標籤/搜索