org.springframework.web.servlet.DispatcherServlet--Spring的前置控制器简介

Struts有一个ActionServlet,用来完成前置控制器(分发器)的功能。其实,所有MVC框架都有一个Servlet来完成这个功能,Spring也不例外,Spring中的前置控制器(分发器)就是DispatcherServlet.

在百度百科这样介绍它的作用:

DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。

一、org.springframework.web.servlet.DispatcherServlet在web.xml中的配置

所有的分发器都要在web.xml中定义,定义分发器的示例代码如下:

<servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcherServlet-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping>     <servlet-name>dispatcherServlet</servlet-name>     <url-pattern>*.do</url-pattern> </servlet-mapping>

代码说明:

<servlet-name>是<servlet>的属性,用来定义servlet的名称,这里是dispatcherServlet。<servlet-class>是<servlet>的属性,用来定义上面定义servlet的具体实现类,这里是org.springframework.web.servlet.DispatcherServlet。<init-param>是<servlet>的属性,用来定义servlet的初始化参数,这里指定要初始化WEB-INF文件夹下的spring-mvc.xml。如果spring-mvc.xml的命名方式是前面定义servlet-name+"-servlet",则可以不用定义这个初始化参数,(Spring默认配置文件为“/WEB-INF/[servlet名字]-servlet.xml”),Spring会处理这个配置文件。由此可见,Spring的配置文件也可放置在其他位置,只要在这里指定就可以了。如果定义了多个配置文件,则用“,”分隔即可。<servlet-mapping>定义了所有以.do结尾的请求,都要经过分发器。

当DispatcherServlet配置好后,一旦DispatcherServlet接受到请求,DispatcherServlet就开始处理请求了。

二、org.springframework.web.servlet.DispatcherServlet的相关源码说明源码1:
protected void doService(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        ......

        request.setAttribute(WEB_APPLICATION_CONTEXT_ATTRIBUTE,
                getWebApplicationContext());
        ......
    }

通过上面源码得知,DispatcherServlet会找到上下文WebApplicationContext(其指定的实现类为XmlWebApplicationContext),并将它绑定到一个属性上(默认属性名为WEB_APPLICATION_CONTEXT_ATTRIBUTE),以便控制器能够使用WebApplicationContext。

源码2:

protected void initStrategies(ApplicationContext context) {
        initMultipartResolver(context);
        initLocaleResolver(context);
        initThemeResolver(context);
        initHandlerMappings(context);
        initHandlerAdapters(context);
        initHandlerExceptionResolvers(context);
        initRequestToViewNameTranslator(context);
        initViewResolvers(context);
        initFlashMapManager(context);
    }

从如上代码可以看出,DispatcherServlet启动时会进行我们需要的Web层Bean的配置,如HandlerMapping、HandlerAdapter等,而且如果我们没有配置,还会给我们提供默认的配置。

 
				
时间: 2024-10-13 01:07:48

org.springframework.web.servlet.DispatcherServlet--Spring的前置控制器简介的相关文章

org.springframework.web.servlet.DispatcherServlet报错

搭建springmvc时,出现org.springframework.web.servlet.DispatcherServlet错误.检查了MAVEN依赖,包已下载好了,但就是找不到-- java.lang.ClassNotFoundException 重新检查项目的 web deployment assembly ,发现没有将maven依赖加入到其中,重新将其中所有的jar包加入.重启Tomcat.报错解决.

java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

新建Maven 项目的时候报错: java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappC

springmvc报错 org.springframework.web.servlet.DispatcherServlet

在写springMVC时,导入所有需要的包后,运行程序,控制台报以下错误: 严重: Servlet [springDispatcherServlet] in web application [/SpringMVC-1] threw load() exception java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet at org.apache.catalina.loader.Web

maven Java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

如果你可以确认你的maven Dependencies中已经导入了如下的jar包,那么你就要检查下Deployment Assembly 选中项目 alt+enter,然后查看maven依赖有没有被添加进来,没有的话执行下图操作即可 如果你之前喜欢用user library的方式在web工程中导入jar那么对于上图的操作一定不陌生,myeclipse对于这种引用jar包的方式总是要手动的把这种依赖添加到项目真正的路径下 原文地址:https://www.cnblogs.com/tele-shar

org.springframework.web.servlet.PageNotFound

2017-07-11 16:36:13.489 WARN [http-nio-8032-exec-16]org.springframework.web.servlet.PageNotFound -Request method 'POST' not supported 2017-07-11 16:37:30.491 WARN [http-nio-8032-exec-48]org.springframework.web.servlet.PageNotFound -Request method 'PO

SpringMVC Maven项目 java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServle

今天在搭建SpringMVC开发框架时,遇到了一个问题,尽管在maven的POM.xml文件中配置了项目所依赖的jar包,但在启动项目是已然报错如下: 信息: Starting Servlet Engine: Apache Tomcat/7.0.56 十一月 27, 2017 3:19:14 下午 org.apache.catalina.util.SessionIdGenerator createSecureRandom 信息: Creation of SecureRandom instance

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

配置spring+shiro时,启动tomcat报错异常 严重: Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of i

[org.springframework.web.servlet.PageNotFound] -No mapping found for HTTP request with URI [/homework/js/jquery-1.7.2.min.js] in DispatcherServlet with name &#39;SpringMVC&#39;

先上解决方案:对于上面出现的问题,查看了很多相关的博客,论坛.最后实在Spring-mvc.xml这个配置文件里加入了如下两行: 1 <mvc:annotation-driven /> 2 <mvc:default-servlet-handler /> 问题描述: 由于项目需要Ajax,于是在jsp的head里加入了如下代码: 1 <script type="text/javascript" src="/homework/js/jquery-1.

org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [XXX] in DispatcherServlet with name &#39;springMVC&#39;

在web.xml中添加 <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.ico</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png<