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

SpringMVC的映射器、适配器、解析器的更多相关文章

  1. SpringMvc:视图和视图解析器

    请求处理方法执行完成后,最终返回一个ModelAndView对象,对于返回String,View或ModelMap等类型的处理方法,SpringMvc也会在内部将它们装配成一个ModelAndView ...

  2. springmvc(六)——视图和视图解析器

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoIAAAGrCAIAAADb2WEhAAAgAElEQVR4nOzdaVhTd78vfF8/z772c9 ...

  3. SSM-SpringMVC-25:SpringMVC异常顶级之自定义异常解析器

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 上篇博客相信大家也看到了,自定义异常,用了SimpleMappingExceptionResolver这个解析 ...

  4. SSM-SpringMVC-12:SpringMVC中BeanNameViewResolver这种视图解析器

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 视图解析器,这个很熟悉啊,之间就用过,就是可以简写/和.jsp的InternalResourceViewRes ...

  5. SpringMVC MultiActionController 默认方法名解析器

    MultiActionController默认方法名解析器是指在请求的地址中加入指定方法名称 MultiActionController类具有一个属性methodNameResolver,方法名解析器 ...

  6. SpringMVC框架中的异常解析器-ExceptionHandler和HandlerExceptionResolver

    SpringMVC框架中,处理异常还是挺方便的,提供了一个异常解析器. 处理局部异常 @Controller public class AccessController { /** * 处理这个Con ...

  7. SpringMVC什么时候配置 视图解析器

    当Action返回的是一个真实路径的时候,视图解析器可不进行配置 当Action返回的是逻辑路径的时候,我们必须要在配置文件中注册视图解析器并为该逻辑路径添加前缀和后缀

  8. springmvc 源码分析(三) -- 自定义处理器映射器和自定义处理器适配器,以及自定义参数解析器 和错误跳转自定页面

    测试环境搭建: 本次搭建是基于springboot来实现的,代码在码云的链接:https://gitee.com/yangxioahui/thymeleaf.git DispatcherServlet ...

  9. SpringMVC系列(七)视图解析器和视图

    在springmvc.xml里面配置视图解析器 <!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 --> <bean class="org ...

  10. SpringMVC——视图和视图解析器

    请求处理方法执行完成后,最终返回一个 ModelAndView对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个Mode ...

随机推荐

  1. Jquery对话框基本配置

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" } p.p2 { margin: 0.0px ...

  2. [.Net跨平台]部署DTCMS到Jexus遇到的问题及解决思路---部署

    上一篇我们环境已经准备完成,此时可以部署了,我们就以dtcms作为例子,http://bbs.dtcms.net/forum.php?mod=viewthread&tid=2420&e ...

  3. 《CLR via C#(第4版)》【PDF】下载

    <CLR via C#(第4版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382189 via C#(第4版)>[PD ...

  4. Java I/O---概述

    对于程序设计者来说,创建一个好的输入/输出系统(I/O)系统是一项艰难的任务. 现在大量不同方案已经说明了这一点.挑战似乎来自于要涵盖所有的可能性.不仅存在各种I/O源端和想要与之通信的接收端(文件. ...

  5. Hadoop版本选择

    刚开始学习Hadoop时就曾经一直抱怨Hadoop的安装部署为什么这么麻烦,对于一个新手需要捯饬一天才能把分布式环境安装配置好.而对于一个自学Hadoop而周围又没人交流的菜鸟来说,我对Hadoop的 ...

  6. Spring任务调度之Quartz集成

    推荐一个博客:http://blog.csdn.net/column/details/14251.html 基本概念 Job:是一个接口,只有一个方法void execute(JobExecution ...

  7. INITTAB 配置文件

    Inittab 文件详解       init的进程号是1(ps -aux | less),从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序. ...

  8. Windows 刷新DNS缓存

    释放IP配置信息 ipconfig /release 刷新DNS ipconfig /flushdns 更新网卡适配器 ipconfig /renew

  9. Linux(CentOS6.5)下编译安装Nginx1.10.1

    首先在特权账号(root)下安装编译时依赖项: yum install gcc gcc-c++ perl -y   首先以非特权账号(本文以账号comex为例)登陆OS: 进入data目录下载相关安装 ...

  10. python net-snmp 的使用

    这一年一直在做一个综合管控平台的项目,用python写的,项目春节前可能就要进行实际部署了和测试,趁着这个空闲期,回顾一下项目中用到的一些技术,第一个就是SNMP协议. 项目结构主要是实现对ipran ...