一、web.xml
1. web.xml配置 代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置 ContextLoaderListener 加载 Spring 配置文件 -->
<!-- needed for ContextLoaderListener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-persist-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置字符集-->
<!-- 配置 CharacterEncodingFilter 解决 POST 请求的字符乱码问题 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 指定字符集 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- 强制请求进行编码 -->
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<!-- 强制响应进行编码 -->
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!--这个filter执行的顺序,要在其他所有的filter前面-->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置 SpringMVC 的前端控制器 -->
<!-- The front controller of this Spring Web application, responsible for handling all application
requests -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 以初始化参数的形式指定 SpringMVC 配置文件的位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-web-mvc.xml</param-value>
</init-param>
<!-- 让 DispatcherServlet 在 Web 应用启动时创建对象、初始化 -->
<!-- 默认情况:Servlet 在第一次请求的时候创建对象、初始化 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<!-- DispatcherServlet 映射的 URL 地址 -->
<!-- 大白话:什么样的访问地址会交给 SpringMVC 来处理 -->
<!-- 配置方式一:符合 RESTFUL 风格使用“/” -->
<!-- <url-pattern>/</url-pattern> -->
<!-- 配置方式二:请求扩展名 -->
<!-- 优点1:静态资源xxx.css,xxx.js,xxx.png等等,完全不经过SpringMvc,不需要特殊处理-->
<!-- 优点2:可以实现伪静态效果,看起来像访问静态的 *.html,其实是访问动态的-->
<!-- 伪静态:给黑客入侵增加难度。有利于SEO优化,让百度谷歌这样的搜索引擎,更容易找到项目-->
<!--缺点:不符合RESTFul 风格-->
<url-pattern>*.html</url-pattern>
<!--为什么还要配置一个json拓展名-->
<!--如果一个AJax请求扩展名是html,但是实际服务器给浏览器返回的是json数据,二者就不匹配了,会出现406错误-->
<!--为了让ajax请求能够顺利拿到JSON格式的响应数据,我们另外配置一个json拓展名-->
<url-pattern>*.json</url-pattern>
</servlet-mapping>
</web-app>
2. *.html 扩展名
举例 http://localhost:8080/atcrowdfunding02-admin-webui/save/emp.html
作用:伪静态 表面上看起来是一个访问静态资源的请求,但是实际上是由 SpringMVC 交给 handler 来处理的动态资源。
- 好处 1:有利于 SEO 优化 让搜索引擎更容易找到我们的网站,有利于网站的推广
- 好处 2:隐藏后端技术实现细节 给黑客入侵系统增加难度
好处 3:自动解决静态资源访问问题 访问 a.png 本身不符合*.html 这个 url-pattern,和 SpringMVC 完全没 有关系,当前请求由 Tomcat 处理。 如 果 url-pattern 映 射 了 “ / ”, 那 么 SpringMVC 中 还 需 要 配 置 DefaultServletHandler。
3. *.json 扩展名
描述问题
请求扩展名 http://localhost:8080/extra01-ajax/get/emp/by/ajax.html
服务器端打算返回的数据:JSON 格式 二者不匹配!!!
分析问题 请求扩展名和响应体的数据格式不匹配!!!
解决问题让请求扩展名和预计的响应体数据格式一致。
- http://localhost:8080/extra01-ajax/get/emp/by/ajax.json同时让 SpringMVC 在映射.html 扩展名之外再映射.json 扩展名,
<servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>*.html</url-pattern> <url-pattern>*.json</url-pattern> </servlet-mapping>