Spring映射器、适配器、解析器
1 springmvc的映射器和适配器
1.1springmvc的映射器
根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来

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

第一种:Controller适配
第二种:HttpRequestHandler适配
第三种:注解适配
不同的处理器,对应不同的适配器,但是所有适配器最终都返回ModelAndView对象,springmvc通过对ModelAndView对象进行解析,获得需要响应到客户端的数据和试图
1.3springmvc的默认配置

默认的映射器和默认的适配器
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
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,基本类型对应的包装类型
package org.guangsoft.controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class UserController3
{
/**
* 返回值:stirng表示跳转的路径
* username:接受客户端请求的username
* passowrd:接受客户端请求的password
* model:封装需要响应到客户端的数据
* 参数名称必须和客户端请求的参数名称一致
* @return
*/
@RequestMapping("/userLogin")//客户端请求的url
public String userLogin(String username, String password, Model model)
{
if(username.equals("root") && password.equals("root"))
{
model.addAttribute("username",username);
return "success.jsp";//完成页面的跳转
}
else
{
model.addAttribute("msg", "您的用户名或密码错误!");
return "error.jsp";
}
}
}
第二种:定义javabean为形参
直接将请求的参数封装为javabean的对象。
l 定义javabean
package org.guangsoft.controller; public class User
{
private String username;
private String password;
//定义集合属性接受客户端的数据
private Integer age;
public Integer getAge()
{
return age;
}
public void setAge(Integer age)
{
this.age = age;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
} }
定义UserController4
package org.guangsoft.controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class UserController4
{
@RequestMapping("/userLogin2")
public String userLogin2(Model model,User user,String hobbys[])
{
if(user.getUsername().equals("root") && user.getPassword().equals("root"))
{
model.addAttribute("username", user.getUsername());
return "success.jsp";
}
else
{
model.addAttribute("msg","用户名或密码错误!");
return "error.jsp";
}
}
}
建立视图页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
</head> <body>
<div align="center">
<form action="userLogin.action" method="post">
<div>username:<input name="username" /></div>
<div>password:<input name="password" /></div>
<div>age:<input name="age" /></div>
<input name="hobbys" type="checkbox" value="1" />1
<input name="hobbys" type="checkbox" value="2" />2
<div><input type="submit" value="提交" /></div>
</form>
</div>
</body>
</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在请求处理的控制上更精确,(粒度更小)
Spring映射器、适配器、解析器的更多相关文章
- Spring MVC之视图解析器
Spring MVC提供的视图解析器使用ViewResolver进行视图解析,实现浏览器中渲染模型.ViewResolver能够解析JSP.Velocity模板.FreeMarker模板和XSLT等多 ...
- spring boot 1.视图解析器,2.开启静态资源访问
1.spring boot 视图解析器 #视图解析器 #前缀spring.mvc.view.prefix=/pages/ #后缀..jsp.dospring.mvc.view.suffix=.jsp ...
- spring配置多视图解析器
最近做一个小项目(移动端),自己搭了个简单的SSM框架(spring + spring MVC + Mybitis),展示层本来选用的是jsp,各方便都已经搭建好,结果发现有些页面需要用到H5的一些功 ...
- Spring MVC的视图解析器
一.视图解析器简介 在Spring MVC中,当Controller将请求处理结果放入到ModelAndView中以后,DispatcherServlet会根据ModelAndView选择合适的视图进 ...
- Spring MVC之视图解析器和URL-Pattern的配置方案
上期讲解了第一入门案例之后接下来了解一下视图解析器与URL-Pattern的配置方案 先来说视图解析器,在上次博客文章中我们完成了入门案例,接下来我们就在上一个例子中完善一下体出视图解析器 <? ...
- Spring MVC Xml视图解析器
XmlViewResolver用于在xml文件中定义的视图bean来解析视图名称.以下示例演示如何在Spring Web MVC框架使用XmlViewResolver. XmlViewResolver ...
- spring 自定参数解析器(HandlerMethodArgumentResolver)
https://blog.csdn.net/u010187242/article/details/73647670
- Spring MVC视图解析器
Spring MVC提供的视图解析器使用ViewResolver进行视图解析,实现浏览器中渲染模型.ViewResolver能够解析JSP.Velocity模板.FreeMarker模板和XSLT等多 ...
- [转载]开发 Spring 自定义视图和视图解析器
原文出处 http://www.ibm.com/developerworks/cn/java/j-lo-springview/ 概述 Spring 3.0 默认包含了多种视图和视图解析器,比如 JSP ...
- Spring MVC的多视图解析器配置及与Freemarker的集成
一.从freemarker谈起 Freemarker使用模板技术进行视图的渲染.自从看了Struts标签.Freemarker.JSTL的性能对比后,我毅然决定放弃Struts标签了!效率太差…… S ...
随机推荐
- nginx、php-fpm二三问
php-cgi为什么没了? php-fpm子进程是干啥的?php-cgi是原来php自带的fastcgi进程管理器,有一些缺点,比如不能平滑重启,进程管理差.php-fpm可以看做升级版的php-fp ...
- 你真的理解Java的按引用传递吗?
首先我们来看下面这段代码: public class Test1 { String a = "123"; public static void change(Test1 test) ...
- 转发 VS 重定向
转发:JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程.以前的request中存放的变量全部失效,并进入一个新的request作用域. 重定向:第一 ...
- Android Studio 工具插件
1.Android Studio 翻译插件,可以将英文翻译为中文. https://github.com/Skykai521/ECTranslation 2.Android Studio之Androi ...
- ubuntu/mint 安装google的拼音输入法
sudo apt-get install fcitx sudo apt-get install fcitx-googlepinyin im-config 即可完成google的输入法 重启计算机.在右 ...
- 对dom的理解
js对dom的操作可以理解为: 增.删.改.查 获取对象:查 对象操作:增,修,删 内容操作:innerHTML,innerText等 事件操作:mouse,key 样式操作:id,tag,class ...
- Ubuntu操作系统相关
1.安装 三种网络类型 修改密码 重启unbuntu系统,出现starting启动界面后,长按shift键. 出现如下引导界面: (注意:这里保持默认的选项就行,即白色横条选择在*Ubuntu上,不要 ...
- Caused by: java.sql.BatchUpdateException: Transaction error, need to rollback. errno:1205 Lock wait timeout exceeded; try restarting transaction
更新的时候报 Caused by: java.sql.BatchUpdateException: Transaction error, need to rollback. errno:1205 Loc ...
- RabbitMQ consumer的一些坑
坑 坑就像是恶梦,总是在最不设防的时候出现,打的你满地找牙.这里记录一些坑,遇到的朋友可以及时的跳出,避免带来损失. 使用事件方式去获取queue中的消息,然后再进行处理.这看起来没什么问题,但是如果 ...
- php多文件压缩下载
/*php多文件压缩并且下载*/ function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. whil ...