Servlet配置中servlet-mapping的配置问题

Java Servlet Specification 3.1

https://jcp.org/aboutJava/communityprocess/final/jsr340/index.html

专门使用一章的内容讲请求和Servlet之间的映射,下面将翻译该章的内容。

将请求映射到对应的Servlet

本章主要描述web容器怎样将客户端请求映射到对应的Servlet上。

12.1关于URL路径

web容器接收到客户端请求后,首选要确定使用容器内的那个web应用来处理该请求,比如http://host:port/xxx/user/add.jsp?id=1,其中/xxx/user/add.jsp为请求URL,/xxx为context path,用来匹配使用那个web应用处理该请求,如果各个web应用都无法匹配该路径,则使用根应用(ROOT)来处理,tomcat中的根应用可以直接放到目录下的webapps目录下的ROOT文件夹内,或者在元素中配置,主要正确的配置方式是path=""空字符串。

确定使用哪个web应用处理请求后,根据具体web应用的配置(主要是Servlet配置的),确定使用哪一个Servlet来处理请求,在请求URL中去掉context path和请求参数后,按照顺序,根据如下规则进行匹配,使用第一个匹配成功的规则进行处理。

1.完整路径匹配;

2.根据路径前缀,进行最长匹配,使用'/'作为路径分隔符;

3.使用请求路径中的后缀进行匹配,比如'.jsp';

4.如果以上都没有匹配到合适的Servlet,将使用默认(default)Servlet来处理请求;

注意:路径匹配过程中,区分大小写;

12.2如何配置Servlet中的

使用‘/’开头,使用‘/*’结尾,表示使用路径匹配,比如/foo/bar/*

使用'*.xxx'表示使用后缀匹配;

只使用‘/*’,表示匹配所有的请求;

只使用'/',表示是一个默认的Servlet;

除此之外,其他的字符都是准确匹配;

12.3例子

Servlet配置中servlet-mapping的配置问题_第1张图片

【注意】/catalog是准确匹配

匹配结果:

Servlet配置中servlet-mapping的配置问题_第2张图片

Spring MVC的DispatcherServlet的配置



    springMvc
    org.springframework.web.servlet.DispatcherServlet
    
        contextConfigLocation
        classpath:spring-mvc.xml
    
    1

映射方式,采用如下两种方式:



    springMvc
    /

或者采用后缀映射



    springMvc
    *.do

【注意】一定不能写为/*,这样的话,所有的请求将全部由Spring的DispatcherServlet来处理,显然是不合适的,jsp文件还是应该由Tomcat配置的JSP Servlet来处理。

Tomcat,在conf/web.xml中配置了一个default Servlet,一个jsp Servlet


	default
	org.apache.catalina.servlets.DefaultServlet
	
		debug
		0
	
	
		listings
		false
	
	1


	jsp
	org.apache.jasper.servlet.JspServlet
	
		fork
		false
	
	
		xpoweredBy
		false
	
	3




	default
	/




	jsp
	*.jsp
	*.jspx

使用Spring的DispatcherServlet作为默认Servlet后,如果静态资源还需要由Tomcat配置的default Servlet来配置,可以参考Spring中静态资源的配置方式,个人比较倾向于使用如下配置,这样对静态资源的请求就不需要DispatcherServlet来处理了。



	default
	*.css
	*.jpg
	*.gif
	*.js

 

你可能感兴趣的:(Spring,Servlet)