Dag*_*Dag 9 java spring servlets spring-mvc
我正在使用Spring 2.5 MVC并希望添加另一个第三方Servlet.问题是,Spring MVC捕获所有请求,因此Servlet没有得到任何请求.这是一个web.xml片段:
SpringMVC org.springframework.web.servlet.DispatcherServlet 2
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet>
<description>This is the servlet needed for cache.type servlet, returns the packed resources</description>
<display-name>PackServlet</display-name>
<servlet-name>PackServlet</servlet-name>
<servlet-class>net.sf.packtag.servlet.PackServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PackServlet</servlet-name>
<url-pattern>*.pack</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
应用程序确实需要/*映射,pack:标签(第三方Servlet)确实需要基于文件扩展名的映射.告诉Spring不要处理请求的任何可能性?感谢致敬.
Pet*_*ans 14
实际上你不需要spring来做任何事情,servlet容器可以为你解决这个问题.
当匹配发送请求的servlet时,取决于url-pattern定义的匹配规则.没有2个servlet可能具有相同的模式,但它们可能具有重叠的模式.然后适用4条规则:
1)完全匹配优先于通配符匹配2)较长的路径模式优先于较短的模式3)路径匹配优先于文件类型匹配4)/匹配任何尚未匹配的路径
<servlet-mapping>
<servlet-name>PackServlet</servlet-name>
<url-pattern>*.pack</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
如果对SpringMVC使用/*,它可能在最长路径上匹配.通过删除*,您一定要遵循默认servlet的servlet规范,并遵守规则4.
| 归档时间: |
|
| 查看次数: |
2926 次 |
| 最近记录: |