Spring映射器、适配器、解析器
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在请求处理的控制上更精确,(粒度更小)
转载于:https://www.cnblogs.com/guanghe/p/6188553.html
Spring映射器、适配器、解析器相关推荐
- spring多个视图解析器_在Spring中配置多个View解析器
spring多个视图解析器 1.简介 在Spring中,提供了View Resolver来使用模型中可用的数据来解析视图,而无需与JSP,Velocity或Thymeleaf等View技术紧密绑定. ...
- Restful 风格开发 Spring MVC 的视图解析器---使用 beetl 模板引擎
一.restful 风格 restful 的目的 将用户的行为当成是对数据库中记录的操作: 增加用户:/user post(post方式) 删除用户:/user/2 delete(删除第2条记录) 修 ...
- Python3.X 爬虫实战(静态下载器与解析器)
[工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载,请尊重作者劳动成果.私信联系我] 1 背景 这两天比较忙,各种锅锅接,忙里偷闲完结这一篇吧.在我们在上一篇&l ...
- Spring Boot配置视图解析器
2019独角兽企业重金招聘Python工程师标准>>> 在SpringBoot中,视图解析器的配置可以参考 Spring Boot数据源配置 #方式一:直接在属性文件中,加入 spr ...
- Spring之配置 multipartResolver 解析器、上传文件、处理文件
随笔 multipart格式的数据 会将 一个表单拆分为 多个部分,每个部分对应一个输入域.在一般的表单输入域中,它所对应的部分中会放置文本型数据,但是如果上传文件的话,它所对应的部分可以是二进制. ...
- Python爬虫之网页下载器网页解析器
一.网页下载器 -- urllib2的三种网页下载方法 import cookielib import urllib2url = "http://www.baidu.com" pr ...
- Spring mvc ViewResolver视图解析器实现机制
概要 我们在controller里面经常这样return一个ModelAndView. return new ModelAndView("userList", "user ...
- SpringMvc及三大组件(适配器、映射器、视图解析器)
文章目录 1 SpringMvc三大组件 适配器 映射器 视图解析器 1 @RequestMapping和@Controller **1. 什么是mvc** 2. SpringMvc三大组件及其作用 ...
- Spring MVC自定义类型转换器Converter、参数解析器HandlerMethodArgumentResolver
文章目录 一.前言 二.类型转换器Converter 1.自定义类型转换器 三.参数解析器 1.自定义分页参数解析器 2.自定义注解参数解析器 一.前言 Spring MVC源码分析相关文章已出: S ...
- Spring MVC 中自定义视图 @Component 及 配置 多个视图解析器 Excel视图
首先我们建立一个自己的View实现View接口.要注意在类上面加上@Component的注解,因为看BeanNameViewResolver的源码知道,是直接从ioc容器里面拿的根据名字拿的视图,所以 ...
最新文章
- flex+android+教程,android开发flex4.5入门教程.pdf
- js创建对象的高级模式
- 优酷开放SDK之setOnTimeOutListener
- LinkedBlockingQueue的put,take方法
- 高效程序员的45个习惯 pdf_如何培养孩子高效学习?养成高效学习的7 个习惯。建议收藏...
- 快速上手sqlserver profiler
- 如何学习WPF技术?
- Codeforces Round #739 (Div. 3)(AK实况)
- Device eth0 does not seem to be present,delaying initialization的解决办法
- 冠状病毒过后世界九大未来预测
- android中wifi输入的密码保存的路径
- 【今日CV 视觉论文速览】19 Feb 2019
- Android 桌面组件【widget】初探
- 什么软件测试情侣头像,扫图查情侣头像软件
- 知识图谱之社交网络分析(SNA)之python处理
- Label free定量蛋白质组学
- 正版win8/win8.1系统激活密钥(key)备份还原操作步骤
- 联想计算机系统重装,联想笔记本电脑一键重装系统的方法
- 深入理解激活函数之softmax
- MPS模块化生产加工系统QY-JDYT34