DispatcherServlet学习笔记

来源:互联网 发布:foxmail咋样知乎 编辑:程序博客网 时间:2024/06/05 00:51
<servlet>        <servlet-name>chapter2</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>chapter2</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping> 

DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:

1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;

2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);

3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);

4、通过ViewResolver解析逻辑视图名到具体视图实现;

5、本地化解析;

6、渲染具体的视图等;

7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。

所以如果指定了/目录就会拦截所以请求,当作一种视图解析。如你访问/ta.html 就会被拦截请求,内部可能是默认能解析.jsp,所以能直接解析。

如果要能访问.html,有几种方式

1、就要配置默认的servlte拦截

交给默认的服务器容器如tomcat的servlte处理

再web.xml中加入

<servlet-mapping>    <servlet-name>default</servlet-name>    <url-pattern>*.html</url-pattern></servlet-mapping>
2、spring-mvc中加入
<mvc:default-servlet-handler/>

把一些请求不到的资源,交给默认的servlte处理

在springMVC-servlet.xml中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:

<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />


3、配置<mvc:resources


对于WEB-INF目录的文件是不能直接访问的,都要通过controller,然后经过视图解析器如InternalResourceViewResolver

参考

http://www.cnblogs.com/dflmg/p/6393416.html