Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to stop Spring MVC blocking all other Servlets?

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.

like image 627
Dag Avatar asked Jun 10 '10 09:06

Dag


2 Answers

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.

like image 117
Peter Tillemans Avatar answered Sep 23 '22 04:09

Peter Tillemans


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?

like image 43
Lombo Avatar answered Sep 19 '22 04:09

Lombo