不幸的是,Serlvet规范不允许创建Servlet映射来仅匹配传入请求,而不转发。但是,可以对过滤器映射执行此操作(默认情况下,过滤器映射仅匹配传入的请求)。
因此,使用单个servlet拦截所有内容的典型解决方案是使用UrlRewriteFilter:
<filter> <filter-name>urlRewrite</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class></filter><filter-mapping> <filter-name>urlRewrite</filter-name> <url-pattern>/*</url-pattern></filter-mapping><servlet> <servlet-name>application</servlet-name> <servlet-class>...</servlet-class></servlet><servlet-mapping> <servlet-name>application</servlet-name> <url-pattern>/app/*</url-pattern></servlet-mapping>
/WEB-INF/urlrewrite.xml:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" "http://tuckey.org/res/dtds/urlrewrite3.0.dtd"><urlrewrite default-match-type="wildcard"> <rule> <from>/**</from> <to>/app/$1</to> </rule> <outbound-rule> <from>/app/**</from> <to>/$1</to> </outbound-rule> </urlrewrite>
这种方式还允许您从
/*静态文件的映射中指定例外。



