根據客戶端請求的url,找處處理本次請求的handler(處理器),將url和controller關聯起來html
對映射器查找到的controller中的方法進行調用。java
第一種:Controller適配web
第二種:HttpRequestHandler適配spring
第三種:註解適配安全
不一樣的處理器,對應不一樣的適配器,可是全部適配器最終都返回ModelAndView對象,springmvc經過對ModelAndView對象進行解析,得到須要響應到客戶端的數據和視圖mvc
第一步:客戶端經過url發送請求app
第二步:核心控制器DispatcherServlet接收到請求jsp
第三步:經過系統的映射器找到對應的handler(處理器),並返回給核心控制器post
第四步:經過核心控制器在找到handler(處理器)對應的適配器,ui
第五步:由找到的適配器,調用對應的handler(處理器),並將結果返回給適配器
第六步:適配器將ModelandView對象返回給核心控制器
第七步:由核心控制器將返回的ModelandView給視圖解析器
第八步:有核心控制將解析的結果進行響應,最終將結果響應到客戶端
HttpServletRequest
HttpServletResponse
HttpSession
Model(默認做用範圍就是request)
使用處理本次請求的方法的形參,接收客戶端發送的數據
String,基本類型對應的包裝類型
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
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>
String 類型的返回值表示須要跳轉路徑
Struts2的核心控制器是過濾器(filter),springmvc的核心控制器(Servlet)
Struts2的Action是多例的,springmvc的Handler(處理器)是單例的
Struts2用Action的屬性接收客戶端數據(必須多例才線程安全),springmvc使用方法的形參接收客戶端數據(線程安全的)
Struts2是針對Action類型進行mapping(和url關聯)
Springmvc是針對Handler中的處理請求的方法進行mappring(和url關聯),
Springmvc在請求處理的控制上更精確,(粒度更小)
本文源於 https://www.cnblogs.com/guanghe/p/6188553.html