9

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.

Josh1billion
  • 14,837
  • 8
  • 38
  • 48
Dag
  • 10,079
  • 8
  • 51
  • 74

2 Answers2

14

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.

Peter Tillemans
  • 34,983
  • 11
  • 83
  • 114
  • both your end with a , try to correct those as people who find these useful will likely copy-paste this snippet – Lombo Jun 10 '10 at 11:02
1

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?

Community
  • 1
  • 1
Lombo
  • 11,847
  • 2
  • 20
  • 27