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配置文件的位置。
文件结构如下:
<!-- 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