Spring MVC的配置与DispatcherServlet的分析
Spring MVC是一款Web MVC框架,是目前主流的Web MVC框架之一。
Spring MVC工作原理简单来看如下图所示:

接下来进行Spring MVC的配置
首先我们配置Spring MVC先要引进相关的jar包
我们需要有一个处理器,即Controller层,并将它配置到ioc中,当用户访问一个路径是,前端控制器拦截后会产生一个handler映射到ioc容器中,如果有匹配的RequestMapping就会访问这个方法,否则产生404异常。
@Controller
public class helloworld { @RequestMapping("hello1.action")
public ModelAndView hello(){
ModelAndView mav = new ModelAndView();
mav.addObject("data", "你好");
mav.setViewName("hello");
return mav;
}
}
并将它扫描到ioc容器中
<context:component-scan base-package="package com.xt.crud"></context:component-scan>
<mvc:default-servlet-handler/> <mvc:annotation-driven ></mvc:annotation-driven>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:default-servlet-handler/>表示将没有匹配到Controller的静态资源的处理交给web容器,例如css,js等
但是当我们把静态资源的处理交给web容器时,你会发现我们写的RequestMapping中的路径无法访问,这是因为当我们没有添加这个标签时,框架默认注册有
AnnotationMethodHandlerAdapter这个类,他会对spring MVC中的注解进行处理,匹配RequestMapping中的路径,但是当我们加了<mvc:default-servlet-handler/>,
前端控制器拦截后会将拦截路径和资源型请求交给默认的处理器处理,而这个处理器无法处理Controller中的路径,而<mvc:annotation-driven >会注册一个RequestMappingHandlerAdapter,
并在默认处理器处理完静态资源后处理RequestMapping中的路径。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean> 可以简化我们返回视图层的路径,比如我们要返回view/success.jsp,配置了以上内容后,我们只需要写success就可以了。
接下来配置前端控制器(DispatcherServlet),打开web.xml
找到spring-webmvc包下的Dispatcher.class并把它配置到servlet标签

<servlet>
<servlet-name>Dispatchar</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/crud.xml</param-value>
</init-param>
</servlet>
在配置前端控制器时,我们需要初始化org.springframework.web.servlet.DispatcherServlet中的contextConfigLocation属性,将他赋值为我们刚才写的ioc容器的路径,
这样他才能将我们的请求与ioc中Controller中的RequestMapping作对比。在servlet标签中还有一个<load-on-startup></load-on-startup>标签,它是用来设置多个servlet
拦截的优先级的,数字越小优先级越高,例如<load-on-startup>0</load-on-startup>的servlet会比<load-on-startup>1</load-on-startup>的优先执行。
接下来配置前端控制器的拦截路径
<servlet-mapping>
<servlet-name>Dispatchar</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
/表示拦截所有路径,包括静态资源
以上就是前端控制器(DispatcherServlet)的配置过程,下一周会分享spring MVC中的Restful,自动装箱和重定向
Spring MVC的配置与DispatcherServlet的分析的更多相关文章
- spring mvc之启动过程源码分析
简介 这两个星期都在看spring mvc源码,看来看去还是还是很多细节没了解清楚,在这里把看明白的记录下,欢迎在评论中一起讨论. 一.铺垫 spring mvc是基于servlet的,在正式分析之前 ...
- Spring MVC 事务配置
Spring MVC事务配置 要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法: 一. XML,使用tx标签配置拦截器实现事务 一. ...
- spring mvc+myBatis配置详解
一.spring mvc Spring框架(框架即:编程注解+xml配置的方式)MVC是Spring框架的一大特征,Spring框架有三大特征(IOC(依赖注入),AOP(面向切面),MVC(建模M- ...
- Maven 工程下 Spring MVC 站点配置 (一)
最近,查找一些具体资料时,虽然会有很多,但是系统的却很少,尤其是对maven 下 spring mvc 站点搭建的配置,总是说的很多但让新手一目了然的步骤却少之又少. 对此闲暇时整理了一下,做了一套较 ...
- Spring mvc系列一之 Spring mvc简单配置
Spring mvc系列一之 Spring mvc简单配置-引用 Spring MVC做为SpringFrameWork的后续产品,Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块 ...
- Spring学习日志之Spring MVC启动配置
对DispatcherServlet进行配置 Spring MVC的配置实际上就是对DispatcherServlet的配置 public class DispatcherServletConfig ...
- Spring MVC的配置和使用
Spring MVC的配置和使用 笔记仓库:https://github.com/nnngu/LearningNotes Spring MVC需要的jar包 文章中 Spring MVC 使用的版本是 ...
- Spring MVC 零配置 / Spring MVC JavaConfig
1. Spring MVC的核心就是DispatcherServlet类,Spring MVC处理请求的流程如下图所示: 2. Spring MVC中典型的上下文层次 当我们初始化一个Dispatch ...
- [转]Spring MVC 事务配置
Spring MVC事务配置 要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法: <tx:advice/>就是告诉事务管理器:怎么做 ...
随机推荐
- 利用python多线程实现多个客户端与单个服务端的远程ssh
本次实验设计两个方面的代码,第一个是客户端,代码如下: import os from socket import * c = socket(AF_INET,SOCK_STREAM) c.connect ...
- java中需要注意的小细节
很早以前就打算写博客,但是总是因为不知道写什么,或是觉得博客里其他人已经把我要写的整理很好了而迟迟没有动笔,现在决定把自己平时的记录的一些笔记拿出来,希望大神们可以批评指导,并且希望能够帮助一些刚刚入 ...
- 编译LNMP之nginx+php-fpm
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- ubuntu 11.04侧边栏怎么添加图标
打开想添加的软件,图标会出现在侧边栏,右击之,点Keep In Launcher即可
- 【转】 Python subprocess模块学习总结
从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn*.os.popen*.popen2.*.comman ...
- 一步使你的asp.net网站在手机浏览器上全屏显示
首先要加入下面的代码: <meta name="viewport" content="width=device-width, initial-scale=1.0, ...
- 选择排序的3种语言实现方法(C java python)
1.选择排序的思路是:遍历数组,第一遍找出所有成员的最小值,放到数组下标为0的位置,第二遍从剩余内容中,再次找出最小值,放到数组下标为1的位置,以此类推,遍历完成所有的数组内容,最后结果就是:数组是按 ...
- Oracle_11gR2_概念_第06章_数据字典和动态性能视图_英文词汇
decode 解码 be intend for 适应 distinguished 显著的,突出的 implied 隐含的 abbreviated 简短的 enabled roles 已 ...
- Hadoop技术之Hadoop HA 机制学习
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:温球良 导语 最近分享过一次关于Hadoop技术主题的演讲,由于接触时间不长,很多技术细节认识不够,也没讲清楚,作为一个技术人员,本 ...
- win10 3dmax 激活后反复激活和激活码无效问题
我也是遇到这个问题在网上找答案,像什么断网,清理注册表,删除某个.dat文件 各种试了好多都没管用 弄这个弄了五六个小时才总算成功 心累 现在我总结一下这些方法 我是第一条成功的 其他的我试着都没用 ...