遇到一个问题很难搞懂不知道是不是bug?

Iam王森 发布于 2013/03/19 15:04
阅读 8K+
收藏 9

@JFinal 你好,想跟你请教个问题:

我们公司现在用Jfinal开发项目,今天我遇到了一个问题,不知道是不是该系统的bug,下面是我的问题描述!

我们使用highcharts插件进行报表显示,但是由于我们的项目是在断网的情况下进行运行的,所以,我修改了highcharts的报表导出图片/pdf...的url,以便满足需求,我创建了一个名为images的Controller,然后将处理的程序代码写在了index方法中,问题出现了,如果我这么写url:http://localhost:8080/water/Images

表单中的参数死活传递不进去,firebug调试:

 

http状态码为302,并且它又重新以get方式进行了请求!

但是,如果我这么写url:http://localhost:8080/water/Images/index

就可以传递进去。这是个很隐蔽的问题,我弄了很长时间。

我记得Controller默认调用的index方法啊!为什么会这样????

 

加载中
1
JFinal
JFinal

    这个问题是tomcat自做主张导致的,tomcat有个极坏的毛病,假如WebRoot 下面存在一个目录叫 "abc" 那么你如果请求 localhost/abc 则 tomcat 会给你自做主张做 302 重定向到 localhost/abc/,即自动加上 "/" 字符到末尾。而你用 /abc/index 访问时,实际上是用后面的 index 是当成了 urlPara。

    所以解决的办法很简单,建议在WebRoot下建一个view子目录,将所有 .html 都存放在这个子目录下面,而非直接存放在WebRoot下。另外 js、css、jpg 这些文件不用动,还是直接放 WebRoot下,不必移入view 下

    如果想快速解决问题,可以将controllerKey 的名字改一下,例如改成 image,去掉 s

ren_kang
ren_kang
回复 @小99 : 怎么解决的
JFinal
JFinal
回复 @小99 : 最彻底的办法就是将所有模板放在一个子目录下,例如在WebRoot下创建一个view子目录,然后将所有的模板都以这个目录为基础目录。还有一个最快捷的办法,就是在出现该问题的地方直接为url添加"/" 后缀
小99
小99
我今天遇到了,这个有彻底的解决方案吗?如果按照您说的修改key的名字,那岂不我项目所有key都要改?工作量好大,但是似乎这样也不是彻底根治的方法
1
cxshun
cxshun

引用来自“JFinal”的答案

    这个问题是tomcat自做主张导致的,tomcat有个极坏的毛病,假如WebRoot 下面存在一个目录叫 "abc" 那么你如果请求 localhost/abc 则 tomcat 会给你自做主张做 302 重定向到 localhost/abc/,即自动加上 "/" 字符到末尾。而你用 /abc/index 访问时,实际上是用后面的 index 是当成了 urlPara。所以解决的办法很简单,建议在WebRoot下建一个view子目录,将所有 .html 都存放在这个子目录下面,而非直接存放在WebRoot下。另外 js、css、jpg 这些文件不用动,还是直接放 WebRoot下,不必移入view 下

    如果想快速解决问题,可以将controllerKey 的名字改一下,例如改成 image,去掉 s

当时在弄spring结合commons-fileupload上传的时候也遇到这个问题,起了一个upload文件夹,requestMapping也用upload,当时就杯具了好久。确实好像好像只有tomcat才是这样的,jetty那些都不是这样处理的。
返回顶部
顶部