七、(一)DispatcherServlet
2019-07-24 本文已影响0人
烟雨乱平生
Spring MVC的核心是DispatcherServlet,这个Servlet充当Spring MVC的前端控制器。与其他Servlet一样,DispatcherServlet必须在web应用程序的web.xml中进行配置。
<servlet>
<servlet-name>pray</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
为这个Servlet所设置的<servlet-name>
是很重要的。默认情况下,DispatcherServlet在加载时会从一个基于这个Servlet名字的XML文件(位于应用程序的WEB-INF目录下)中加载Spring应用上下文。
接下来我们必须声明DispatcherServlet处理哪些URL。比较常见的匹配模式是*.html
、/*
或者/app
。但是这些模式都存在一些问题:
-
*.html
: 隐式表明响应始终是HTML格式的 -
/*
: 没有特定类型的响应,它表明DispatcherServlet将处理所有的请求。这会在处理图片或样式表这样的静态资源文件时带来不必要的麻烦。 -
/app
: 这种类似的模式帮助我们区分了DispatcherServlet处理的内容和其他内容。但这样就会在URL中暴露实现的细节。
四种匹配模式
1. 匹配精确路径
以“/”开头,以字母(非”*”)结束2. 匹配扩展名
以* 开头,以扩展名结束3. 匹配最长路径
以“/”开头,并以 /* 结尾4. 匹配默认
“/” 用来表示对应的servlet 为默认的servelet
匹配模式
/
和/*
含义是不一样的。
/*
属于路径匹配,并且可以匹配所有请求,由于路径匹配的优先级仅次于精确匹配,所以/*
会覆盖所有的扩展名匹配,故不推荐使用。/
是servlet中特殊的匹配模式,优先 级最低,不会覆盖其他任何匹配模式,只是会替换servlet容器的内建default servlet ,该模式同样会匹配所有请求。
推荐使用一下匹配规则:
<servlet-mapping>
<servlet-name>pray</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
该匹配规则会匹配所有的请求,为了解决对静态资源的请求,Spring提供了<mvc:resources>
元素,他会处理静态资源的请求。所要做的就是在Spring配置文件中对其进行配置。
<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
<mvc:resources mapping="/resources/**" location="/resources/"></mvc:resources>
</beans>