开发者

How to stop Spring MVC blocking all other Servlets?

开发者 https://www.devze.com 2023-01-02 19:19 出处:网络
I\'m using Spring 2.5 MVC and want to add another third-party Servlet. The 开发者_运维问答Problem is, that Spring MVC catches all request, so the Servlet isn\'t getting any request. Here a web.xml Sni

I'm using Spring 2.5 MVC and want to add another third-party Servlet. The 开发者_运维问答Problem is, that Spring MVC catches all request, so the Servlet isn't getting any request. Here a web.xml Snippet:

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>

The /* mapping is really needed for the application, an pack:tag (the third-party Servlet) really need the mapping based on the file extension. Any possiblities to tell Spring not to process the request? Thanks and regards.


Actually you do not need spring to do anything, the servlet container can solve this for you.

When matching to which servlet a request is sent is dependent on the matching rules defined by the url-pattern. No 2 servlets may have the same pattern, but they may have overlapping patterns. Then 4 rules apply :

1) exact matches have priority over wildcard matches 2) longer path patterns have priority over shorter patterns 3) path matches have priority over filetype matches 4) / matches anything not already matched

<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>

If you use /* for the SpringMVC it may match on the longest path. By removing the * you are sure to follow the servlet spec for the default servlet and falls under rule 4.

Here you can find some more details.


Check the accepted answer on this SO questions. It should solve your issue.

Can SpringMVC be configured to process all requests, but exclude static content directories?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号