Apache的UrlRewrite和Resin的配置问题
最近有个需求,需要对项目的url进行规范,由于现有的url都是以.jsp结尾的,而且很多应用都在调用这个接口,所以只能保持原有的接口不变,而增加新的url,通过一定的映射来指向到旧的url。
首先,很自然的就想到了使用Apache的UrlRewrite功能。
RewriteEngine on
RewriteRule ^/test/index$ /index.jsp
但实际的试验后,发现此方法行不通。因为Resin的mod_caucho模块只处理.jsp文件和servlet请求,而配置了UrlRewrite后,虽然url能重写了,但重写后的url却无法由resin处理了......
上网Google了一把,发现了一个不错的东东,urlrewritefilter,是个开源的项目,专门在web application server中利用filter来实现url rewrite的。
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/test/*</url-pattern>
</filter-mapping>
下载安装后,如果只用Resin的话,运行很顺利,但如果和Apache协作起来,同样是有上面的问题。在urlrewrite.xml中配置的url rewrite根本无法处理(因为url首先被Apache给截取了).......
继续Google,发现了Resin的一个隐蔽的配置,能将一个url配置成不由Apache处理,而是交给Resin来处理,在web.xml中增加:
<servlet-mapping url-pattern='/test/*' servlet-name='plugin_match'/>
这样的话,以/test/开头的url全部都交给了Resin来处理,然后由urlrewrite的filter进行重写,之后交给真正的jsp进行处理......
至此上面的那个需求基本算是满足了.......