1.springmvc 接受请求访问的流程如下所示:

即:

DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。 
但是,我们在搭建SpringMVC框架时,往往总是把DispatcherServlet的配置文件放错位置。网上有的说:springDispatcherServletMVC-servlet.xml(暂且命名这么一个springDispatcherServletMVC的dispatchservlet配置文件)应该放在WEB-INF下面(与web.xml放一起);有的说:应该直接把springDispatcherServletMVC-servlet.xml放在src文件夹下面;有的说:在java resources下面新建一个config的resource folder,把配置文件都放在这个资源文件夹下面。那么到底哪种是正确的呢? 

答案是:这个要根据web.xml中DispatcherServlet的配置声明有关系。

  

 

关于url-pattern的配置
url-pattern配置有三种:
1.*.do 访问以.do结尾的由DispatcherServlet进行解析.

/(斜杠) 所有访问的地址都由DispatcherServlet进行解析,对于静态的文件解析需要配置,不让DispatcherServlet进行解析.
注意:使用此种方式可以实现 RESTful风格的url.
/* 这样配置不对,使用这种配置,最终要转发到一个jsp页面时,仍然会由DispatcherServlet进行解析,但是不能根据这个jsp页面找到handler所以会报错.


注意:当你配置了Spring MVC,同样还是需要在web.xml中配置ContextLoaderListener监听器的,虽然Spring MVC是Spring的一个模块,可以做到无缝整合,但是他们的配置是独立的.

springmvc的配置文件一般都是在web.xml里面指定位置的。其实,springmvc的配置文件有默认位置。因此,存在两种配置方式:

(1)采用指定位置配置方式,即在web.xml配置文件中指定springmvc配置文件的位置。

当web.xml中DispatcherServlet配置声明中,已经明确DispatcherServlet前端控制器配置文件的位置时,则必须将前端控制器的配置文件放在src下面,不能放在webcontent(webapp)下了,当然,在src的各级子文件夹中也是可以的。一般放在java resources下面,或者在resources下新建一个config的文件夹专门用来存放配置文件,把配置文件都放在这个资源文件夹下面。这种方式也是用的最多的一种。
文件结构如下: 

 

<!-- springmvc 前端控制器 -->
    <servlet>
        <servlet-name>dispatcherSerlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherSerlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

 上面代码中,明确了contextConfigLocation的地址为:classpath:(即在classess文件夹下面),而且命名为springmvc.xml(或者其他名称都可以),指定配置文件位置时,这个配置文件的名字可以随便取。 

(2)采用默认位置配置方式

当web.xml中DispatcherServlet配置声明中,没有明确DispatcherServlet前端控制器配置文件的位置时,则系统默认DispatcherServlet前端控制器配置文件放在WEB-INF文件夹下。

文档结构如下:

 

<!--  Spring MVC 的Servlet,它将加载WEB-INF/springDispatcherServlet-servlet.xml 的配置文件,以启动Spring MVC模块-->    
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping> 

上面代码声明了一个命名为springDispatcherServlet的前端控制器(DispatcherServlet),并且没有指定该servlet配置文件的路径,那么系统将以默认名字springDispatcherServlet-servlet.xml在默认路径/WEB-INF下寻找它,位置不正确,名字不正确,都会报错。(这种命名是规定好的,前端控制器的名字-servlet这种形式。)

 下面是spring-servlet.xml的配置

 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:context="http://www.springframework.org/schema/context"
 4        xmlns:mvc="http://www.springframework.org/schema/mvc"
 5        xmlns:p="http://www.springframework.org/schema/p"
 6        xmlns:websocket="http://www.springframework.org/schema/websocket"
 7        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 8        xsi:schemaLocation="http://www.springframework.org/schema/beans
 9        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
10        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
11        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
12        http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket-4.0.xsd">
13     <!-- <mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。它提供了数据绑定支持,读取json的支持 -->
14     <mvc:annotation-driven />  
15     
16     <!-- 设置自动注入bean的扫描范围,use-default-filters默认为true,会扫描所有的java类进行注入 ,-->    
17     <!-- Use-dafault-filters=”false”的情况下:<context:exclude-filter>指定的不扫描,<context:include-filter>指定的扫描 -->
18     <!-- springmvc和application文件都需要配置,但mvc文件只扫描controller类,application扫描不是controller类 -->    
19     <context:component-scan base-package="mytest.*" use-default-filters="false">
20         <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
21     </context:component-scan>
22     
23     <!-- 文件上传功能需该配置 -->
24     <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
25     <property name="defaultEncoding" value="UTF-8"/>
26     </bean>
27     
28     <!-- ResourceBundleThemeSource是ThemeSource接口默认实现类-->
29     <bean class="org.springframework.ui.context.support.ResourceBundleThemeSource" id="themeSource"/>
30     
31     <!-- 用于实现用户所选的主题,以Cookie的方式存放在客户端的机器上-->
32     <bean class="org.springframework.web.servlet.theme.CookieThemeResolver" id="themeResolver" p:cookieName="theme" p:defaultThemeName="standard"/>
33     
34     <!-- 由于web.xml文件中进行了请求拦截
35         <servlet-mapping> 
36             <servlet-name>dispatcher</servlet-name> 
37             <url-pattern>/</url-pattern> 
38         </servlet-mapping> 
39     这样会影响到静态资源文件的获取,mvc:resources的作用是帮你分类完成获取静态资源的责任
40     -->
41     <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" />
42     
43     <!-- 配置使用 SimpleMappingExceptionResolver 来映射异常 -->
44     <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" >
45     
46     <!-- 定义默认的异常处理页面 -->  
47     <property name="defaultErrorView" value="error"/> 
48          <!-- 配置异常的属性值为ex,那么在错误页面中可以通过 ${exception} 来获取异常的信息如果不配置这个属性,它的默认值为exception-->
49         <property name="exceptionAttribute" value="exception"></property>
50         <property name="exceptionMappings">
51             <props>
52             <!-- 映射特殊异常对应error.jsp这个页面 -->
53                 <prop key=".DataAccessException">error</prop>
54                 <prop key=".NoSuchRequestHandlingMethodException">error</prop>
55                 <prop key=".TypeMismatchException">error</prop>
56                 <prop key=".MissingServletRequestParameterException">error</prop>
57             </props>
58         </property>
59     </bean>
60     
61     <!-- 配置jsp视图解析器 -->
62     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="jspViewResolver">
63         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
64         <property name="prefix" value=""/>
65         <property name="suffix" value=".jsp"/>
66     </bean>
67 </beans>

 

参考链接:

https://blog.csdn.net/qq_36324685/article/details/79928766

https://www.jianshu.com/p/9575e95a4eda

https://www.jianshu.com/p/6587555a7123

https://blog.csdn.net/zwl18210851801/article/details/78489021

http://www.cnblogs.com/ioufev/p/9950768.html

https://blog.csdn.net/sinat_25318461/article/details/60962122

https://www.cnblogs.com/Jason-Xiang/p/6544188.html

posted on 2019-02-23 20:10  小白coder  阅读(38713)  评论(1编辑  收藏  举报