SpringMVC 配置文件详解
HandlerMapping 处理器映射
HTTP请求被DispatcherServlet拦截后,会调用HandlerMapping来处理,HandlerMapping根据 url<=>controller 之间的映射关系来确定要调用哪个controller来处理。
有2种HandlerMapping:
BeanNameUrlHandlerMapping
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<bean name="/userController" class="com.chy.controller.UserController" />
http://localhost:8080/springmvc_war_exploded/userController
BeanNameUrl,顾名思义,映射关系是BeanName <=> Url,url地址对应bean的name,根据url中的beanname确定要调用的controller。
SimpleUrlHandlerMapping
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<!-- 使用props配置url-controller之间的映射关系 -->
<props>
<!-- 一个prop配置一个映射,key指定url,value指定bean的id或name。可使用多个prop。 -->
<prop key="/userController">userController</prop>
</props>
</property>
</bean> <bean name="userController" class="com.chy.controller.UserController" />
http://localhost:8080/springmvc_war_exploded/userController
url是/userController,去<props>中找到key=/userController的<prop>,得到要调用的controller的name或id。
HandlerAdapter 处理器适配器
HandlerMapping确定要调用的controller后,将要调用的controller告诉DispatcherServlet,
由DispatcherServlet调用controller所属的HandlerAdapter,再由HandlerAdapter来调用controller。
HandlerAdapter有2种:
SimpleControllerHandlerAdapter(推荐)
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
public class UserController implements Controller {
@Override
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
//视图可以在构造器中指定,也可以先使用空参构造器,在调用setter方法设置
ModelAndView mav = new ModelAndView("user_info");
User user = new User();
user.setUsername("chy");
user.setPassword("abcd");
//向视图传递数据
mav.addObject("user", user);
return mav;
}
}
SimpleControllerHandlerAdapter,名字中有Controller,实现的自然是Controller接口。
方法要返回一个ModelAndView类型的值。
这个ModelAndView由controller返回给HandlerAdapter,再由HandlerAdapter返回给DispatcherServlet。
DispatcherServlet调用配置的ViewResolver来解析ModelAndView,获取里面的model(数据)、view(视图名),并将数据、视图名返回给DispatcherServlet。
DispatcherServelt对View进行渲染(把模型数据填入视图中),把渲染好的视图返回个浏览器。
所以需要搭配ViewResolver使用:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/" />
<!--后缀-->
<property name="suffix" value=".jsp" />
</bean>
视图解析器也有好几种,此处不再一一介绍。
HttpRequestHandlerAdapter
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter" />
public class UserController implements HttpRequestHandler{
@Override
public void handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
User user = new User();
user.setUsername("chy");
user.setPassword("abcd"); //向视图传递数据
httpServletRequest.setAttribute("user",user); //将请求转发到视图(地址栏的url不变)
RequestDispatcher dispatcher = httpServletRequest.getRequestDispatcher("/WEB-INF/jsp/user_info.jsp");
dispatcher.forward(httpServletRequest,httpServletResponse);
}
}
适配器与实现的接口是对应的。使用请求转发实现,返回值是void。
ViewResolver是解析ModelAndView用的,既然返回值是void,就不使用视图解析器,没有视图名的拼接,需要写视图的完整路径。
此种方式是Servlet的实现方式,不建议使用。尽量使用ModelAndView的方式,更加符合mvc的思想。
SpringMVC 配置文件详解的更多相关文章
- SpringMVC配置文件详解:<context:annotation-config/>和<context:component-scan base-package=""/>和<mvc:annotation-driven />
原文地址:https://www.cnblogs.com/lcngu/p/5080702.html Spring配置文件详解:<context:annotation-config/>和&l ...
- 【转载】SpringMVC配置文件详解
转自:https://my.oschina.net/happyBKs/blog/691502 web.xml文件是web应用的部署描述. 在上一节的springMVC示例中 ,idea下的Maven- ...
- SpringMVC配置文件详解
1.<context:annotation-config/> 它的作用是隐式的向Spring容器注册 AutowiredAnnotationBeanPostProcessor, Commo ...
- SpringMVC RequestMapping 详解
SpringMVC RequestMapping 详解 RequestMapping这个注解在SpringMVC扮演着非常重要的角色,可以说是随处可见.它的知识点很简单.今天我们就一起学习Spring ...
- Log4j2配置文件详解
目录[-] 1 系列目录 2 默认配置 3 第一个配置例子 4 复杂一点的配置 4.1 Appender之Syslog配置 4.2 Syslog及Syslog-ng相关配置(Fedora) 5 Log ...
- 2017.2.13 开涛shiro教程-第十二章-与Spring集成(一)配置文件详解
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第十二章-与Spring集成(一)配置文件详解 1.pom.xml ...
- 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+SpringMVC项目详解
http://blog.csdn.net/noaman_wgs/article/details/53893948 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+Spri ...
- quartz配置文件详解
quartz配置文件详解(转载) quartz学习总结: 一.关于job: 用Quartz的行话讲,作业是一个执行任务的简单Java类.任务可以是任何Java代码.只需你实现org.qu ...
- WebConfig配置文件详解
今天看到博客园一位朋友整理的一个WebConfig配置文件详解,觉得不错,转载一下: <?xml version="1.0"?> <!--注意: 除了手动编辑此文 ...
随机推荐
- android底部导航栏实现
第一种用radiobutton实现 https://wizardforcel.gitbooks.io/w3school-android/content/75.html 布局文件,使用radiogrou ...
- Duizi and Shunzi HDU
Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 吴裕雄 python 机器学习——集成学习梯度提升决策树GradientBoostingRegressor回归模型
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...
- 剑指OFFER之合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解决办法 1.递归方法: if(pHead1==NULL) return pHead2; els ...
- C 语言实例 - 约瑟夫生者死者小游戏
30 个人在一条船上,超载,需要 15 人下船. 于是人们排成一队,排队的位置即为他们的编号. 报数,从 1 开始,数到 9 的人下船. 如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了 ...
- app内区域截图利用html2Canvals保存到手机 截屏 (html2Canvals2版本1.0.0)
html2canvas($(], {scale:,logging:false,useCORS:true}).then(function(canvas) { var dataUrl = canvas.t ...
- 继承QWidget后无法使用QSS
使用继承QWidget后的类对象时,如果设置styleSheet看不到效果, 需要重写 void paintEvent(QPaintEvent *event); 方法, 在重写的方法中加入如下代码即可 ...
- OracleDBConsoleorcl 服务无法启动:Agent process exited abnormally during initialization.
OracleDBConsoleorcl 服务无法启动 在事件查看器里看到 Agent process exited abnormally during initialization.的记录.知道是因为 ...
- BZOJ 3262: 陌上花开 (cdq分治,三维偏序)
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; c ...
- python 的集合
set 的特点: 把不同的元素组合在一起,元素值必须是可哈希不可变的 set 的创建 s = set ('alex li') print(s) 表现形式:去重 {'e', 'i', ' ', 'l' ...