• SpringMVC的映射器、适配器、解析器


    1.处理器和适配器

    1.1springmvc的映射器

      根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来

    1.2springmvc的适配器

      对映射器查找到的controller中的方法进行调用。

      第一种:Controller适配

      第二种:HttpRequestHandler适配

      第三种:注解适配

      不同的处理器,对应不同的适配器,但是所有适配器最终都返回ModelAndView对象,springmvc通过对ModelAndView对象进行解析,获得需要响应到客户端的数据和视图

    1.3springmvc的执行过程

      第一步:客户端通过url发送请求

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

      第三步:通过系统的映射器找到对应的handler(处理器),并返回给核心控制器

      第四步:通过核心控制器在找到handler(处理器)对应的适配器,

      第五步:由找到的适配器,调用对应的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

  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    Python, pandas: how to sort dataframe by index// Merge two dataframes by index
    永久修改VS include目录
    <OFFER05> 05_ReplaceSpaces替换空格
    用二叉树进行排序 x (从小到大)
  • 原文地址:https://www.cnblogs.com/guopeng-blogs/p/8245092.html
Copyright © 2020-2023  润新知