# Spring-MVC需要注意的点

# tomcat下的web.xml中的重要配置

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>
<!-- The mapping for the default servlet -->
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- The mappings for the JSP servlet -->
<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.jspx</url-pattern>
</servlet-mapping>

# DefaultServlet

  1. 用来匹配servlet
  2. 用来匹配静态资源

# JspServlet

  1. 用来匹配jsp
  2. 用来匹配jspx

# springMVC工程下的web配置

<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:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

# 匹配servlet请求的选择

  1. / : 表示拦截所有请求(包括servlet以及静态资源),但是不会拦截jsp页面
  2. /*:表示拦截所有请求,拦截jsp页面
  3. 在springmvc中一般不会去拦截jsp,所以一般会选择使用 / 进行匹配
  4. 当使用 / 进行匹配时,静态资源就不能被正常访问了

# 解决使用 / 匹配,静态资源不能被访问的问题

# 1. 可以在web.xml中配置tomcat的DefaultServlet

<servlet>
	<servlet-name>defaultServlet</servlet-name>
	<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
</servlet>
<!-- 有多少种要访问的静态资源都需要在此配置,有一个没有配置,就访问不到 -->
<servlet-mapping>
	<servlet-name>defaultServlet</servlet-name>
	<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
	<servlet-name>defaultServlet</servlet-name>
	<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
	<servlet-name>defaultServlet</servlet-name>
	<url-pattern>*.png</url-pattern>
</servlet-mapping>

存在的问题:会造成配置文件配置了很多的静态资源后缀

# 2. 在springmvc的配置文件中增加以下配置

<!-- 此配置表示:我们自己配置的请求由controller来处理,不能请求的处理交由tomcat来处理 -->
<mvc:default-servlet-handler></mvc:default-servlet-handler>

存在的问题:这么配置会造成,我们自己的动态资源(controller)无法访问了

# 3. 解决动态(controller)资源无法访问的问题

在springmvc的配置文件中增加以下配置

<!-- 保证静态资源和动态请求都能够访问 -->
<mvc:annotation-driven></mvc:annotation-driven>

# springMVC的DispatcherServlet配置

<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:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

# contextConfigLocation配置问题

<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:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>-->
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

如果contextConfigLocation不进行配置,那么默认路径在当前项目的 WEB-INF 的目录下,名称为 springmvc-servlet.xml

名称格式:[ DispatcherServlet 的 servlet-name ]-servlet.xml

Last Updated: 6/15/2020, 1:01:06 AM