关于url映射
最近在新项目中想使用一个映射规则,如下:
URL映射过程(严格遵守,如果method为空,则默认执行类特定名字的方法)
http://host:port/model/method?paramName=paramValue...
实现思想:
1,用一个过滤器去获得请求uri,再把uri转化为model.do?method=method的请求,然后调用RequestDispatcher.forward(request, response)方法转发。
2,再在web.xml中配置过滤.do的ActionServlet过滤器。
在测试一个<jsp:include page="/model/method">的时候发现存在如下问题:
The requested resource (/model/method) is not available
于是把过滤器设为
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
结果出现死无限制执行,堆栈溢出。
晚上下载urlrewriter开源项目,读了一下源代码,并没有发现解决方案,并测试了一下也出现同样的问题。(就是当<jsp:include>的时候就出问题了),不过他可以配置请求是哪种类型,比如redirect,forward,include等,但还是无法完全避免一种场景:
/a映射到a.jsp
/b映射到b.jsp
然后a.jsp里面有<jsp:include page="/b">的情形
如果是这样,一旦请求/a,则urlrewriter必出问题。
我的过滤器代码如下:
不知道大家有没有碰到此类问题或已经有相应的解决方案? 1 楼 jiangshaolin 2010-03-06 参考了大量资料,包括tomcat源码,jsp/servlet规范,做了不少测试.
<jsp:include>is not a request?
Filter不再起作用? 2 楼 jiangshaolin 2010-03-07 刚测试了Struts也存在同样的问题
.do-->jsp(包含<jsp:include page="XX.do">语句)
因为ActionForward也是用forward实现,所以错误信息如下:
java.io.IOException: Stream closed