一、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 applicationrequests --><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>
二、tomcat启动过程

