1 springmvc的映射器和適配器
1.1springmvc的映射器
根據客戶端請求的url,找到處理本次請求的handler(處理器),將url和controller關聯起來
1.2springmvc的適配器
對映射器查找到的controller中的方法進行調用。
第一種:Controller適配
第二種:HttpRequestHandler適配
第三種:注解適配
不同的處理器,對應不同的適配器,但是所有適配器最終都返回ModelAndView對象,springmvc通過對ModelAndView對象進行解析,獲得需要響應到客戶端的數據和試圖
1.3springmvc的默認配置
默認的映射器和默認的適配器
1 org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\ 2 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping 3 org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\ 4 org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\ 5 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
如果自己在springmvc.xml進行特殊的配置,會覆蓋掉系統的默認配置
1.4springmvc的執行過程
第一步:客戶端通過url發送請求
第二步:核心控制器DispatcherServlet接收到請求
第三步:通過系統的映射器找到對應的handler(處理器),並返回給核心控制器
第四步:通過核心控制器在找到handler(處理器)對應的適配器,
第五步:由找到的適配器,調用對應的handler(處理器),並將結果返回給適配器
第六步:適配器將ModelandView對象返回給核心控制器
第七步:由核心控制器將返回的ModelandView給視圖解析器
第八步:有核心控制將解析的結果進行響應,最終將結果響應到客戶端
2 自定義Hander的方法定義
2.1方法的參數問題
2.1.1默認參數
HttpServletRequest
HttpServletResponse
HttpSession
Model(默認作用范圍就是request)
2.1.2客戶端請求數據的綁定(重點)
使用處理本次請求的方法的形參,接收客戶端發送的數據。
第一種:定義簡單的類型的參數
String,基本類型對應的包裝類型
1 package org.guangsoft.controller; 2
3 import org.springframework.stereotype.Controller; 4 import org.springframework.ui.Model; 5 import org.springframework.web.bind.annotation.RequestMapping; 6
7 @Controller 8 public class UserController3 9 { 10 /**
11 * 返回值:stirng表示跳轉的路徑 12 * username:接受客戶端請求的username 13 * passowrd:接受客戶端請求的password 14 * model:封裝需要響應到客戶端的數據 15 * 參數名稱必須和客戶端請求的參數名稱一致 16 * @return
17 */
18 @RequestMapping("/userLogin")//客戶端請求的url
19 public String userLogin(String username, String password, Model model) 20 { 21 if(username.equals("root") && password.equals("root")) 22 { 23 model.addAttribute("username",username); 24 return "success.jsp";//完成頁面的跳轉
25 } 26 else
27 { 28 model.addAttribute("msg", "您的用戶名或密碼錯誤!"); 29 return "error.jsp"; 30 } 31 } 32 }
第二種:定義javabean為形參
直接將請求的參數封裝為javabean的對象。
l 定義javabean
1 package org.guangsoft.controller; 2
3 public class User 4 { 5 private String username; 6 private String password; 7 //定義集合屬性接受客戶端的數據
8 private Integer age; 9 public Integer getAge() 10 { 11 return age; 12 } 13 public void setAge(Integer age) 14 { 15 this.age = age; 16 } 17 public String getUsername() 18 { 19 return username; 20 } 21 public void setUsername(String username) 22 { 23 this.username = username; 24 } 25 public String getPassword() 26 { 27 return password; 28 } 29 public void setPassword(String password) 30 { 31 this.password = password; 32 } 33
34 }
定義UserController4
1 package org.guangsoft.controller; 2
3 import org.springframework.stereotype.Controller; 4 import org.springframework.ui.Model; 5 import org.springframework.web.bind.annotation.RequestMapping; 6
7 @Controller 8 public class UserController4 9 { 10 @RequestMapping("/userLogin2") 11 public String userLogin2(Model model,User user,String hobbys[]) 12 { 13 if(user.getUsername().equals("root") && user.getPassword().equals("root")) 14 { 15 model.addAttribute("username", user.getUsername()); 16 return "success.jsp"; 17 } 18 else
19 { 20 model.addAttribute("msg","用戶名或密碼錯誤!"); 21 return "error.jsp"; 22 } 23 } 24 }
建立視圖頁面
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%
3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %>
6
7 <!DOCTYPE HTML>
8 <html>
9 <head>
10 <base href="<%=basePath%>">
11 <title>My JSP 'index.jsp' starting page</title>
12 <meta http-equiv="pragma" content="no-cache">
13 <meta http-equiv="cache-control" content="no-cache">
14 </head>
15
16 <body>
17 <div align="center">
18 <form action="userLogin.action" method="post">
19 <div>username:<input name="username" /></div>
20 <div>password:<input name="password" /></div>
21 <div>age:<input name="age" /></div>
22 <input name="hobbys" type="checkbox" value="1" />1 23 <input name="hobbys" type="checkbox" value="2" />2 24 <div><input type="submit" value="提交" /></div>
25 </form>
26 </div>
27 </body>
28 </html>
第三種:定義集合形參 見上hobbies
2.2方法返回值
String 類型的返回值表示需要跳轉路徑
3 springmvc和struts2區別
Struts2的核心控制器是過濾器(filter),springmvc的核心控制器(Servlet)
Struts2的Action是多例的,springmvc的Handler(處理器)是單例的
Struts2用Action的屬性接收客戶端數據(必須多例才線程安全),springmvc使用方法的形參接收客戶端數據(線程安全的)
Struts2是針對Action類型進行mapping(和url關聯)
Springmvc是針對Handler中的處理請求的方法進行mappring(和url關聯),
Springmvc在請求處理的控制上更精確,(粒度更小)