Spring MVC初始化
初始化Spring IoC上下文
初始化映射请求上下文

从图中可以看出,DispactherServlet的父类是FrameworkServlet,而FrameworkServlet的父类则是HttpServletBean。HttpServletBean继承了Web容器所提供的HttpServlet,所以它是一个可以载入Web容器中的Servlet。
Spring MVC的核心组件
•MultipartResolver:文件解析器,用于支持服务器的文件上传。
•LocaleResolver:国际化解析器,可以提供国际化的功能。
•ThemeResolver:主题解析器,类似于软件皮肤的转换功能。
•HandlerMapping:Spring MVC中十分重要的内容,它会包装用户提供一个控制器的方法和对它的一些拦截器,后面会着重谈它,通过调用它就能够运行控制器。
•handlerAdapter:处理器适配器,因为处理器会在不同的上下文中运行,所以Spring MVC会先找到合适的适配器,然后运行处理器服务方法,比如对于控制器的SimpleControllerHandlerAdapter、对于普通请求的HttpRequestHandlerAdapter等。
•HandlerExceptionResolver:处理器异常解析器,处理器有可能产生异常,如果产生异常,则可以通过异常解析器来处理它。比如出现异常后,可以转到指定的异常页面,这样使得用户的UI体验得到了改善。
•RequestToViewNameTranslator:视图逻辑名称转换器,有时候在控制器中返回一个视图的名称,通过它可以找到实际的视图。当处理器没有返回逻辑视图名等相关信息时,自动将请求URL映射为逻辑视图名。
•ViewResolver:视图解析器,当控制器返回后,通过视图解析器会把逻辑视图名称进行解析,然后定位实际视图。
使用注解配置方式初始化
代码清单14-10:通过注解方式初始化Spring MVC
package com.ssm.chapter14.config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { //Spring IoC容器配置
//getRootConfigClasses获取Spring IoC容器的Java配置类,用以装载各类Spring Bean。
@Override
protected Class<?>[] getRootConfigClasses() {
//可以返回Spring的Java配置文件数组
return new Class<?>[]{};
} //DispatcherServlet的URI映射关系配置
//getServletConfigClasses获取各类Spring MVC的URI和控制器的配置关系类,用以生成Web请求的上下文。
@Override
protected Class<?>[] getServletConfigClasses() {
//可以返回Spring的Java配置文件数组
return new Class<?>[]{WebConfig.class};
} //DispatcherServlet拦截内容
// getServletMappings定义DispatcherServlet拦截的请求。
@Override
protected String[] getServletMappings() {
return new String[]{"*.do"};
} }
MyWebAppInitializer也实现了WebApplicationInitializer接口。ContextLoader和DispatcherServlet的初始化器都是抽象类,通过它们就能初始化Spring IoC上下文和映射关系上下文,这就是只要继承AbstractAnnotationConfigDispatcherServle-tInitializer类就完成了DispatcherServlet映射关系和SpringIoC容器的初始化工作的原因。
代码清单14-12:WebConfig.java
package com.ssm.chapter14.config; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration
//定义扫描的包,加载控制器
@ComponentScan("com.ssm.chapter14.*")
//启用Spring Web MVC
@EnableWebMvc
public class WebConfig { /***
* 创建视图解析器
* @return 视图解析器
*/
@Bean(name = "viewResolver")
public ViewResolver initViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
return viewResolver;
} }
这段代码和Spring IoC使用Java的配置也是一样的,只是多了一个注解@EnableWebMvc,它代表启动Spring MVC框架的配置。和入门实例同样也定义了视图解析器,并且设置了它的前缀和后缀,这样就能获取由控制器返回的视图逻辑名,进而找到对应的JSP文件。
如果还是使用入门实例进行测试,此时可以把web.xml和所有关于Spring IoC容器所需的XML文件都删掉,只使用上面两个Java文件作为配置便可以了,然后重启服务器
Spring MVC初始化的更多相关文章
- Spring MVC初始化参数绑定
初始化参数绑定与类型转换很类似,初始化绑定时,主要是参数类型 ---单日期 在处理器类中配置绑定方法 使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型 proper ...
- spring MVC初始化过程学习笔记1
如果有错误请指正~ 1.springmvc容器和spring的关系? 1.1 spring是个容器,主要是管理bean,不需要servlet容器就可以启动,而springMVC实现了servlet规范 ...
- spring mvc 初始化错误
java.lang.NoSuchMethodError: org.springframework.util.ClassUtils.isPresent(Ljava/lang/String;Ljava/l ...
- Spring mvc 初始化过程
1.DispatcherServlet:获取servlet的name 2.XmlWebApplicationContext:获取contentConfigLocation的xml名称和namespac ...
- 基于XML配置的Spring MVC 简单的HelloWorld实例应用
1.1 问题 使用Spring Web MVC构建helloworld Web应用案例. 1.2 方案 解决本案例的方案如下: 1. 创建Web工程,导入Spring Web MVC相关开发包. Sp ...
- Spring MVC 基础
Spring MVC 基础 1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是 ...
- spring mvc之请求过程源码分析
简介 上一篇,我们分析了spring mvc启动过程的源码,这一节,来一起分析下在用户请求controller的过程中,spring mvc做了什么事? 一.准备 我写这么一个controller p ...
- Spring MVC源码——Root WebApplicationContext
目录 Spring MVC源码--Root WebApplicationContext 上下文层次结构 Root WebApplicationContext 初始化和销毁 ContextLoaderL ...
- Spring MVC(2)Spring MVC 组件开发
一.控制器接收各类请求参数 代码测试环境: 接收各类参数的控制器--ParamsController package com.ssm.chapter15.controller; @Controller ...
随机推荐
- Enterprise Architect 14破解版 安装包 安装教程
安装包以及破解补丁下载: 链接:https://pan.baidu.com/s/1es0wN_6-d9pk4xnSN1SiFA 提取码:bor0 安装包链接失效可在下方留言 安装以及破解教程 参考链接 ...
- 移动端videojs视频插件使用直播流rtmp、hls、http-flv的注意事项
可以访问:https://videojs.com/ 下载对应的脚本包 特别注意的是 移动端videojs一般应用的直播流协议为HLS, RTMP协议一般是PC上使用,需要flash支持. HLS直播源 ...
- JQuery购物车多物品数量的加减+总价计算
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- commons-dbutils工具栏的编写
db.properties driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test_db?useUnicode=t ...
- LightOJ - 1354 - IP Checking(进制)
链接: https://vjudge.net/problem/LightOJ-1354 题意: An IP address is a 32 bit address formatted in the f ...
- git 在 A 项目中引用 B 项目
git 在 A 项目中引用 B 项目 场景: 需要在项目calcDLL(http://XXX/XXXA.git) 中 引用 项目libindex(http://XXX/XXXB.git). 解决方 ...
- Oracle 记录下jdbc thin client module名称
java.util.Properties props = new java.util.Properties(); props.setProperty("password",&quo ...
- webuploader+Java如何实现分片+断点续传
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...
- gdb tui设置默认窗口高度
gdb -p 12999 -tui 先显示win信息(输入:info win) 显示如下: SRC (35 lines) <has focus> CMD (17 lines) 我们要改的是 ...
- [提权]sudo提权复现(CVE-2019-14287)
2019年10月14日, sudo 官方在发布了 CVE-2019-14287 的漏洞预警. 0x00 简介 sudo 是所有 unix操作系统(BSD, MacOS, GNU/Linux) 基本集成 ...