一、web.xml

tomcat启动时,扫描web.xml

1. web.xml配置 代码

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!-- 配置 ContextLoaderListener 加载 Spring 配置文件 -->
  7. <!-- needed for ContextLoaderListener -->
  8. <context-param>
  9. <param-name>contextConfigLocation</param-name>
  10. <param-value>classpath:spring-persist-*.xml</param-value>
  11. </context-param>
  12. <listener>
  13. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  14. </listener>
  15. <!--配置字符集-->
  16. <!-- 配置 CharacterEncodingFilter 解决 POST 请求的字符乱码问题 -->
  17. <filter>
  18. <filter-name>CharacterEncodingFilter</filter-name>
  19. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  20. <!-- 指定字符集 -->
  21. <init-param>
  22. <param-name>encoding</param-name>
  23. <param-value>UTF-8</param-value>
  24. </init-param>
  25. <!-- 强制请求进行编码 -->
  26. <init-param>
  27. <param-name>forceRequestEncoding</param-name>
  28. <param-value>true</param-value>
  29. </init-param>
  30. <!-- 强制响应进行编码 -->
  31. <init-param>
  32. <param-name>forceResponseEncoding</param-name>
  33. <param-value>true</param-value>
  34. </init-param>
  35. </filter>
  36. <!--这个filter执行的顺序,要在其他所有的filter前面-->
  37. <filter-mapping>
  38. <filter-name>CharacterEncodingFilter</filter-name>
  39. <url-pattern>/*</url-pattern>
  40. </filter-mapping>
  41. <!-- 配置 SpringMVC 的前端控制器 -->
  42. <!-- The front controller of this Spring Web application, responsible for handling all application
  43. requests -->
  44. <servlet>
  45. <servlet-name>springDispatcherServlet</servlet-name>
  46. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  47. <!-- 以初始化参数的形式指定 SpringMVC 配置文件的位置 -->
  48. <init-param>
  49. <param-name>contextConfigLocation</param-name>
  50. <param-value>classpath:spring-web-mvc.xml</param-value>
  51. </init-param>
  52. <!-- 让 DispatcherServlet 在 Web 应用启动时创建对象、初始化 -->
  53. <!-- 默认情况:Servlet 在第一次请求的时候创建对象、初始化 -->
  54. <load-on-startup>1</load-on-startup>
  55. </servlet>
  56. <!-- Map all requests to the DispatcherServlet for handling -->
  57. <servlet-mapping>
  58. <servlet-name>springDispatcherServlet</servlet-name>
  59. <!-- DispatcherServlet 映射的 URL 地址 -->
  60. <!-- 大白话:什么样的访问地址会交给 SpringMVC 来处理 -->
  61. <!-- 配置方式一:符合 RESTFUL 风格使用“/” -->
  62. <!-- <url-pattern>/</url-pattern> -->
  63. <!-- 配置方式二:请求扩展名 -->
  64. <!-- 优点1:静态资源xxx.css,xxx.js,xxx.png等等,完全不经过SpringMvc,不需要特殊处理-->
  65. <!-- 优点2:可以实现伪静态效果,看起来像访问静态的 *.html,其实是访问动态的-->
  66. <!-- 伪静态:给黑客入侵增加难度。有利于SEO优化,让百度谷歌这样的搜索引擎,更容易找到项目-->
  67. <!--缺点:不符合RESTFul 风格-->
  68. <url-pattern>*.html</url-pattern>
  69. <!--为什么还要配置一个json拓展名-->
  70. <!--如果一个AJax请求扩展名是html,但是实际服务器给浏览器返回的是json数据,二者就不匹配了,会出现406错误-->
  71. <!--为了让ajax请求能够顺利拿到JSON格式的响应数据,我们另外配置一个json拓展名-->
  72. <url-pattern>*.json</url-pattern>
  73. </servlet-mapping>
  74. </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。

    缺陷:不符合 RESTFUL 风格

    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启动过程

未命名图片.png