Spring MVC是一个基于Servlet API构建的Web框架,全称是Spring Web MVC。
在传统的Servlet中,每个Servlet都有doGet和doPost方法。不管每个Servlet的功能如何,都需要创建一个Servlet API,这样徒劳地增加了力量。在 Spring MVC 中,有一个通用的 DispatcherServlet,它委托特殊的 bean 来处理请求并呈现适当的响应。这些特殊的bean 由Spring 管理。 Spring MVC 还需要 DispacherServlet。
在DispacherServlet中主要有以下Bean:
ViewResolver是视图解析器当配置了DispacherServlet后视图由该过滤器解析,还有HandlerMapping的拦截器,静态资源在后端返回时会被拦截。所以配置DispacherServlet后要进行静态资源的放行。
静态资源的三种方法:
- 修改拦截源。
在配置DispacherServlet的时url-parttern
是
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
对应的路径是/
表示除了jsp文件的所有文件都拦截,/*
拦截所有,*
为通配符,在这里可使用通配符拦截特定的url,如将Ajax或form的表单提交到.do
或.from
的地址,使用通配符*.do、*.from
拦截特定后缀的地址,就不会拦截静态资源了。
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
这样设置Spring就会只针对.do
结尾的进行处理,但请求地址也也要加上该后缀。
- spring-mvc.xml配置文件释放静态资源
在spring配置文件中添加针对静态资源的释放配置,这样spring的视图解析器的拦截器就不会拦截静态资源。
<!--放行资源-->
<mvc:resources location="/" mapping="/**/*.js"/>
<mvc:resources location="/" mapping="/**/*.css"/>
<mvc:resources location="/assets/" mapping="/assets/**/*"/>
<mvc:resources location="/images/" mapping="/images/*" cache-period="360000"/>
<!--拦截器忽略资源-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/*"/>
<mvc:exclude-mapping path="/**/fonts/*"/>
<mvc:exclude-mapping path="/**/*.css"/>
<mvc:exclude-mapping path="/**/*.js"/>
<mvc:exclude-mapping path="/**/*.png"/>
<mvc:exclude-mapping path="/**/*.gif"/>
<mvc:exclude-mapping path="/**/*.jpg"/>
<mvc:exclude-mapping path="/**/*.jpeg"/>
<mvc:exclude-mapping path="/**/*login*"/>
<mvc:exclude-mapping path="/**/*Login*"/>
<bean class="com.luwei.console.mg.interceptor.VisitInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
选择以上两种方法之一来释放静态资源。
- 将无法解析的资源交给默认的Servlet进行处理。
每个Tomcat服务器都有一个默认的服务器default,可以在配置DispacherServlet时进行配置。 DispacherServlet 无法解析的资源由默认 Servlet 解析。
在 spring-mvc.xml 中启用默认 Servlet:
<mvc:default-servlet-handler/>
在web.xml
中增加对静态资源的处理:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
<url-pattern>/assets/*"</url-pattern>
<url-pattern>/images/*</url-pattern>
</servlet-mapping>
但当前的设置必须在Spring的Dispatcher前面。