jfinal 项目在tomcat上的问题? url 怎么会多一个/ 。不得其解。大家帮忙看看问题根源。

lifetime 发布于 2015/08/02 10:46
阅读 459
收藏 2

项目是jfinal的项目,用jfinal的jetty启动项目,一切都ok,跑的飞起。  但部署到tomcat后,问题就来了,访问url的时候会自动多加一个/。

rote.add("/login", LoginAction.class);

比如jetty运行的时候: localhost/login 会被上面的配置拦截,ok的。

但是tomcat运行的时候,我访问localhost:8080/war包名/login的时候,url会自动变成localhost:8080/war包名/login/(注意了,url后面自动多出了一个/),这样的话jfinal配置的规则就拦截不到了。我看了下浏览器的请求,tomcat下第一次请求302,后面才多加了一个/后再次请求。


大家看看这个是个上面问题?   为什么tomcat会是302,难道是tomcat的问题吗 ?


加载中
0
JFinal
JFinal

   tomcat 有一个很恶心的自做主张的行为:

1:假定 WebRoot 下面有一个目录叫  abc

2:再假定有一个 action 的 url 叫 localhost/abc

3:当请求 localhost/abc 时,tomcat 会首先接管这个请求,并将 url 由 "/abc" 重定向为 "/abc/",也即在 url 最后面自做主张地添加 "/" 字符,并做了一次 302 重定向

4:如果是 post 请求,重定向会丢失请求中的参数,造成工作不正常,即便不是 post 请求,仍然会对性能有所损害,因为重定向会让浏览器重新发起一次请求。

    最好的解决办法是在 WebRoot 下先创建一个总的子目录如"view",模板文件放在这个目录之下的子目录之下。还有一个妥协的办法是在发生这个问题时让 url 直接以 "/" 为后缀,这样 tomcat 就做不了什么了

lifetime
lifetime
回复 @JFinal : 大哥,现在又碰到了另外一个问题,好折腾啊。是jfinal + beetl 时的问题,我不知道是jfinal的问题呢还是beetl的问题。 因为问题需要图文说明,所以我还是另外用新建个话题讨论,希望大哥知道的话能帮忙解答下。谢谢!
JFinal
JFinal
回复 @lifetime : 建议采用创建一个总的子目录来放页面的方式解决,一劳永逸,如果你的项目分为前后端页面,你可以分别创建两个子目录,如:"front" "back" 分别作为前后端页面的根目录
lifetime
lifetime
谢谢大哥的解惑。我试试。
0
南湖船老大
南湖船老大
Tomcat就是这样的。。。这个讨论N次了。。。
lifetime
lifetime
why? 为什么会这样。 有讨论的地址吗? 给我参考一下。大哥。谢谢。
0
南湖船老大
南湖船老大
没有为什么,Tomcat就这么处理url的,就是会给你自动加个/
返回顶部
顶部