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 ...
随机推荐
- C++面向对象程序设计第三章习题答案解析
整理一下自己写的作业,供考试前复习用,哈哈 进入正题!!! 题目: 2.分析下面的程序,写出其运行时的输出结果 这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释 #inclu ...
- elasticsearch7.x集群安装(含head、bigdesk、kibana插件)
网址:https://www.elastic.co 192.168.14.239 es-node1192.168.14.240 es-node2192.168.14.241 es-node3 ==== ...
- Web API系列(四) 使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录
转自:https://www.cnblogs.com/hnsongbiao/p/7039666.html 需要demo在github中下载: https://github.com/shan333cha ...
- RookeyFrame 加载 自定义JS
注意JS存放的位置:是在model文件夹下的某某文件夹!!! 线上添加的模块: 1.JS文件名:和表名一致 2.JS目录:Rookey.BusSys.Web\Scripts\model\TempMod ...
- lixuxmint系统定制与配置(2)-输入法
小书匠Linux RIME的官网在这里 1.安装 刚开始是使用ibus-rime,后来使用过程感觉不舒服,就换回fcitx-rime.使用以下命令安装fcitx-rime sudo apt insta ...
- 如何重置Portal for ArcGIS、ArcGIS Server管理员密码
忘记管理员密码是ArcGIS系统管理员司空见惯的情况.每次为了找回站点管理员密码,用户经常要测试多次.有没有一种快捷的解决方案呢?答案是有的. 下面将分别介绍如何重置Portal for ArcGIS ...
- 利用Synplify Pro 加时钟约束的问题
可以改名称为"design.ucf"加成新约束. 在使用Xilinx ISE进行综合时,可以与Synplify Pro软件配合,实现较高的综合性能.但是,有时会出现如下问题: “E ...
- fgets()函数
声明: char *fgets(char *str,int n,FILE* stream) 参数: str—这是指向一个字符数组的指针,该数组存储了要读取的字符串 n – 这是要读取的最大字符数(包括 ...
- [golang]写了一个可以用 go 来写脚本的工具:gosl
转自:https://golangtc.com/t/53cca103320b52060a000030 写了一个可以用 go 来写脚本的工具:gosl 代码和使用说明可以看这里: http://gith ...
- linux服务器时间乱码问题解决
问题现象如下: [root@ip-171-21-36-129 testcase]# date 2019Ū 08Ղ 02ɕ чǚϥ 09:44:48 UTC 解决步骤: 1.执行命令:vi /etc/s ...