SpringMVC的映射器、適配器、解析器

1.處理器和適配器

1.1springmvc的映射器

  根據客戶端請求的url,找處處理本次請求的handler(處理器),將url和controller關聯起來html

1.2springmvc的適配器

  對映射器查找到的controller中的方法進行調用。java

  第一種:Controller適配web

  第二種:HttpRequestHandler適配spring

  第三種:註解適配安全

  不一樣的處理器,對應不一樣的適配器,可是全部適配器最終都返回ModelAndView對象,springmvc經過對ModelAndView對象進行解析,得到須要響應到客戶端的數據和視圖mvc

1.3springmvc的執行過程

  第一步:客戶端經過url發送請求app

  第二步:核心控制器DispatcherServlet接收到請求jsp

  第三步:經過系統的映射器找到對應的handler(處理器),並返回給核心控制器post

  第四步:經過核心控制器在找到handler(處理器)對應的適配器,ui

  第五步:由找到的適配器,調用對應的handler(處理器),並將結果返回給適配器

  第六步:適配器將ModelandView對象返回給核心控制器

  第七步:由核心控制器將返回的ModelandView給視圖解析器

  第八步:有核心控制將解析的結果進行響應,最終將結果響應到客戶端

 

2 自定義Hander的方法定義

2.1方法的參數問題

2.1.1默認參數

  HttpServletRequest

  HttpServletResponse

  HttpSession

  Model(默認做用範圍就是request)

2.1.2客戶端請求數據的綁定(重點)

  使用處理本次請求的方法的形參,接收客戶端發送的數據

  

第一種:定義簡單的類型的參數

  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的對象。

   定義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在請求處理的控制上更精確,(粒度更小)

 

 

本文源於 https://www.cnblogs.com/guanghe/p/6188553.html

相關文章
相關標籤/搜索