嘿,这个应该可以算bug吧。关于JfinalFilter

绝望的八皮 发布于 2012/12/19 14:59
阅读 1K+
收藏 2
HttpServletRequest request = (HttpServletRequest)req;
 HttpServletResponse response = (HttpServletResponse)res;
 request.setCharacterEncoding(encoding);
//		String target = request.getServletPath();
 String target = request.getRequestURI().
        substring(request.getContextPath().length());
		boolean[] isHandled = {false};
		try {
			handler.handle(target, request, response, isHandled);
		}

注释部分是jfinal目前的源码,下面是我修改的,然后自己打了个jar放项目里面了。

之前开发的jfinal相关的东西还没有一个全面使用于web的。所以还没真正被这个问题坑了。

jfinalFilter采用 getServletPath()的返回值来做url mapping的工作我个人理解是为了效率考虑,减少调用次数和字符串的截取。

但是这个玩意儿在不同servlet下行为不同的。比如http://localhost:8080/file/sourcefile/

在jetty下得出来的是source/而在tomcat下面确是sourcefile/index.html。然后之后坑爹的现象就不解释了吧。。s

难道各位用tomcat的项目里面没有遇到这个问题?我是7.0.29版本。或者tomcat有什么配置可以避免这个问题?


另外关于getServletPath的文档


Returns the part of this request's URL that calls the servlet. This path starts with a "/" character and includes either the servlet name or a path to the servlet, but does not include any extra path information or a query string. Same as the value of the CGI variable SCRIPT_NAME.This method will return an empty string ("") if the servlet used to process this request was matched using the "/*" pattern.


似乎不是太适合来做url mapping

加载中
1
JFinal
JFinal

    抽时间测试了一下,总结如下:

1:假定 tomcat 的 web.xml 中配置了 welcome list 有 index.html 项

2:假定 WebRoot/path 下存在 index.html

3:假定要访问的 actionKey 为 "/path"

4:在以上三个条件全部成立的情况下HttpRequest.getServletPath()返回值为: "/path/index.html",而JFinal期望的返回值为"/path",所以JFinal会认为该请求为静态请求而直接交由tomcat来处理。

    综上所述,在Tomcat之上只要满足前三个条件,那么 getServletPath()的行为会有差别,导致了 @绝望的八皮 碰到的问题。目前可以通过打破这三个条件中的任意一个来解决问题,例如将 index.html改个名。JFinal 1.2 完美解决了该问题 :)


JFinal
JFinal
回复 @cshanghui : 时间未定,还有一些功能没时间开发,长远来说需要来一些较大的创新
酱油
酱油
什么时候上1.1.7啊
JFinal
JFinal
回复 @绝望的八皮 : 是指 tomcat 本身的那个 web.xml,并非你应用中的 web.xml
绝望的八皮
绝望的八皮
话说我没有配置有welcome 啊
0
JFinal
JFinal

    request.getServletPath()在jetty 6 与tomcat 6 下测试是没有问题的。这行代码的确是出于效率的考虑,因为可以省去字符串截取操作。

    以前曾经在 JFinalFilter 与 Servlet 同时存在的情况下出现过值不符的问题。你现在的情况是不是也是 JFinalFilter 与 Servlet 在web.xml 中同时混用?

0
绝望的八皮
绝望的八皮
没有,就一个jfinalfilter~ 全面使用jfinal肯定web.xml只要一个配置嘛哈哈
0
JFinal
JFinal

引用来自“绝望的八皮”的答案

没有,就一个jfinalfilter~ 全面使用jfinal肯定web.xml只要一个配置嘛哈哈
把值不一致的 tomcat 发给我一下,我测测
JFinal
JFinal
@绝望的八皮 好的,回头我测下
绝望的八皮
绝望的八皮
jfianl 126邮箱发了 7.0.29版本
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部