java - GWT,Tomcat,2个模块,JRebel:DevMode在错误的位置查找nocache.js并显示未找到404

标签 java tomcat tomcat7 jrebel gwt-dev-mode

我会先问我的问题,然后再详细介绍:


hosted.htmlDevMode中扮演什么功能文件?为什么从hosted.html?<module-name>之类的页面请求该文件?如何控制/配置该请求返回的内容?如果有人回答了这个问题,我会投票赞成并接受答案,因为我本人已经找到了第二个和第三个问题的答案,而且这些问题似乎与我的问题无关。
有什么方法可以触发GWT缓存刷新,而不是普通的浏览器Ctrl-F5?我看到在编译clear.cache.gif文件期间生成的每个模块中-它与GWT缓存有什么关系?我已经回答过了,在这种情况下似乎没有多大帮助
我是否正确指定了DevMode-war路径(见下文)?我应该改为指定src/main/webapp文件夹的绝对路径吗?我已经回答过了,在这种情况下似乎没有多大帮助
我的设置有什么问题,为什么我遇到以下问题? (可选答案,但如果回答正确-我将立即投票并接受答案:))


编辑-有关第一个问题的详细信息

因此,我的webapp中有2个GWT模块:logindashboard。问题是,在仅包含DevMode模块的login.html页面login中,总是正常加载,发出以下请求

GET http://localhost:8080/login/hosted.html?login                200 OK


它返回标准的hosted.html页面,该页面由GWT编译器生成并放入每个模块的文件夹中。

但是为什么仅包含dashboard.html模块的dashboard页面通常无法加载,因此发出以下请求:

GET http://localhost:8080/dashboard/hosted.html?dashboard        304 Not Modified

Cache-Control:private
Date:Tue, 17 Dec 2013 13:07:40 GMT
ETag:W/"11781-1367504122000"
Expires:Thu, 01 Jan 1970 03:00:00 EET
Last-Modified:Thu, 02 May 2013 14:15:22 GMT
Server:Apache-Coyote/1.1


结果令人惊讶地返回login.html页面,而不是我期望的标准hosted.html文件。请注意,这种情况在过去半年中很少发生,可以通过多次按Ctrl-F5来解决。但是从昨天开始,这种情况总是发生。

继续搜索,谁或什么向hosted.html?dashboard发出请求,以及谁对这种请求做出奇怪的响应。

编辑#2-有关第一个问题的详细信息
已发现问题出在服务器端-为什么对第二个请求的响应(上述)的状态码为304 Not Modified。在调试Catalina代码时,发现问题出在org.zeroturnaround.javarebel.integration.fileservlet.FileServlet类,该类最终提供了文件。此类来自JRebel(版本5.2.2),该类与Tomcat使用-javaagent选项一起启动。如果删除-javaagent选项并在没有JRebel的情况下启动Tomcat,则一切正常,并提供了正确的文件。将尝试更深入地研究并找出JRebel班上的问题。

编辑#3-有关第一个问题的详细信息

升级到JRebel-5.4.2后,错误仍然存​​在。
Zeroturnaround论坛上的开始主题:
http://zeroturnaround.com/forums/topic/gwt-devmode-tomcat-7-0-39-possible-fileservlet-bug/

我的问题的详细说明(没什么有趣的-只是细节:)):

我在运行两个名为Devmodelogin的模块的webapp的dashboard遇到问题。 Webapp正在本地部署到标准的tomcat安装,并具有如下目录结构:

<tomcat_folder>/webapps/ROOT/login.html
<tomcat_folder>/webapps/ROOT/login/
<tomcat_folder>/webapps/ROOT/login/<single gwt.rpc file>
<tomcat_folder>/webapps/ROOT/login/<multiple .cache.html files>
<tomcat_folder>/webapps/ROOT/login/gwt/<standard files>
<tomcat_folder>/webapps/ROOT/login/clear.cache.gif
<tomcat_folder>/webapps/ROOT/login/login.nocache.js
<tomcat_folder>/webapps/ROOT/login/hosted.html

<tomcat_folder>/webapps/ROOT/dashboard.html
<tomcat_folder>/webapps/ROOT/dashboard/
<tomcat_folder>/webapps/ROOT/dashboard/<two .gwt.rpc files>
<tomcat_folder>/webapps/ROOT/dashboard/<multiple .cache.html, .cache.png, etc files>
<tomcat_folder>/webapps/ROOT/dashboard/gwt/<standard files>
<tomcat_folder>/webapps/ROOT/dashboard/clear.cache.gif
<tomcat_folder>/webapps/ROOT/dashboard/dashboard.nocache.js
<tomcat_folder>/webapps/ROOT/dashboard/hosted.html
<tomcat_folder>/webapps/ROOT/dashboard/<other css and image resources used by page>

<tomcat_folder>/webapps/ROOT/<other files of webapp>


现在,login.html包含对login.nocache.js文件的引用,如下所示:

    <script src="login/login.nocache.js" type="text/javascript" language="javascript"></script>


dashboard.html分别包含对dashboard.nocache.js文件的引用:

    <script src="dashboard/dashboard.nocache.js" type="text/javascript" language="javascript"></script>


我使用以下参数从DevMode启动Eclipse

-remoteUI "${gwt_remote_ui_server_port}:${unique_id}" 
-startupUrl http://localhost:8080/login.html -logLevel INFO 
-noserver -war <absolute-path-to-tomcat-folder>/webapps/ROOT 
-codeServerPort 9997 
org.yura.cases.DashboardModule org.yura.cases.LoginModule


现在,我已经使用这种设置已经半年了,并且一切都工作正常,即它在DevMode中无法正常工作,例如,我成功使用DevMode的时间有95%-调试代码,更改在Eclipse等中

但是,问题是(过去是)我不时打开

http://localhost:8080/dashboard.html?gwt.codesvr=127.0.0.1:9997 


页面为空白,并且在浏览器控制台中看到以下错误:

GET http://localhost:8080/dashboard/login/login.nocache.js/ 404 (Not Found)  hosted.html:10


当我转到页面加载过程中加载的hosted.html:10文件时,我看到此文件是从以下URL加载的:

http://localhost:8080/dashboard/hosted.html?dashboard


并且返回的HTML文件确实包含login.nocache.js的错误路径:

<script src="login/login.nocache.js" type="text/javascript" language="javascript"></script>


(路径错误,因为login/login.nocache.js' is relative path and it resolves to dashboard / login / login.nocache.js`)

直到今天,我仅按住Ctrl-F5几秒钟即可重新加载页面并清除浏览器缓存,并最终将页面正常加载到DevMode中,从而绕过了这个问题。但是,今天,无论我按Ctrl-F5多长时间,该错误仍然存​​在。因此,我决定一劳永逸地解决这个问题。

在此先感谢您的帮助!

最佳答案

找到了我的第二个和第三个问题的答案,尽管它们似乎对解决我的问题没有太大帮助。无论如何,在这里分享它们:


  问题2.除了普通浏览器Ctrl-F5,还有什么方法可以触发GWT缓存刷新?在编译过程中生成的每个模块中
  clear.cache.gif文件-它与GWT缓存有什么关系?


根据http://www.gwtproject.org/doc/latest/DevGuideCompilingAndDebugging.html#launching_a_browser


  修改源代码后,您无需重新启动开发模式。相反,在开发模式仍在运行的情况下,编辑客户端代码或资源,保存更改,然后在浏览器中刷新页面。


并且根据GWT project directory creation by hand


  clear.cache.gif是一个1x1可缓存图像,用于为标记添加占位符。请参见http://code.google.com/p/google-web-toolkit/wiki/ImageBundleDesign(“裁剪图像的构造函数”)


因此,事实证明,就我而言,按F5或Ctrl-F5完全可以解决问题,并且没有其他“刷新” GWT缓存的方法,至少已经向公众公开了。


  问题3.我是否正确指定了DevModes -war路径(请参见下文)?我应该改为指定src / main / webapp文件夹的绝对路径吗?


是的,根据Using my own server in development mode instead of GWT's built-in Jetty instance教程,我已经正确指定了-war选项。

编辑-找到第四个问题的答案(解决我的问题)
好的,结果发现该错误在org.zeroturnaround.javarebel.integration.fileservlet.FileServlet类中,在极少数情况下,该类错误地处理了ETag标头。这就是为什么它提供Tomcat先前返回的login.html内容的原因,这是由于未经身份验证的对受保护的/dashboard/hosted.html?dashboard资源的访问(Tomcat的奇怪但标准的行为)。 JRebel的错误修正应该会出现在今天的夜间版本中,我99%的肯定它会起作用:)

有关详细信息,请参阅以下讨论:http://zeroturnaround.com/forums/topic/gwt-devmode-tomcat-7-0-39-possible-fileservlet-bug/#post-39379

真的希望这对其他人有帮助:)

关于java - GWT,Tomcat,2个模块,JRebel:DevMode在错误的位置查找nocache.js并显示未找到404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20630232/

相关文章:

eclipse - 在 Eclipse 中启动服务器后找不到 Liferay 主页

java - Tomcat 7 : SecureRandomAlgorithm

c# - 从 Java Server Faces 访问 C# 对象

java - 数组android studio中相同值百分比和价格的总和不同

java - 检查Android设备是否有代码中的某个硬件按钮

java - 我该如何解决 "org.json.simple.JSONObject cannot be resolved"?

java - mysql查询使用java花费的时间太长

tomcat - 在 SSL 上访问 JIRA 时获取空白文件

带有 Puppet 的 Tomcat 由用户选择

java - 在 EC2 Amazon Linux 上全新安装 Tomcat 出现 404 错误