Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat 7返回“;“304未修改”;关于已修改/不存在的资源_Java_Http_Tomcat_Struts2_Tomcat7 - Fatal编程技术网

Java Tomcat 7返回“;“304未修改”;关于已修改/不存在的资源

Java Tomcat 7返回“;“304未修改”;关于已修改/不存在的资源,java,http,tomcat,struts2,tomcat7,Java,Http,Tomcat,Struts2,Tomcat7,我正在开发一个在Struts2和Tomcat 7.0.42上运行的web应用程序。 我编写了一个操作,该操作以友好方式生成一个jsp文件generated.jsp,其中包含一些图像引用,并创建包含这些图像的相关“\u files”文件夹 该操作在另一个页面request.html中通过jQueryAjax请求调用,然后使用jQueryLoad加载生成的.jsp。request.html文件如下所示: <HTML> <HEAD> <script

我正在开发一个在Struts2和Tomcat 7.0.42上运行的web应用程序。
我编写了一个操作,该操作以友好方式生成一个jsp文件generated.jsp,其中包含一些图像引用,并创建包含这些图像的相关“\u files”文件夹

该操作在另一个页面request.html中通过jQueryAjax请求调用,然后使用jQueryLoad加载生成的.jsp。request.html文件如下所示:

<HTML>
   <HEAD>

       <script language="javascript">

           $(function() {
               $.ajax({
                  type: "POST",
                   url: "http://..../myAction.action", 
                   data: someDataObj,
                   success: function(msg){
                      $("#myDiv").load("http://.../generated.jsp");
                   });
           }

        </script>
     </HEAD>

    <BODY>
       <div id="myDiv"> </div>
    </BODY>
</HTML>

我不认为问题是由浏览器缓存引起的,因为请求已经完成,浏览器只有在收到304状态码后才使用缓存

我尝试过不同的方法,直到找到解决办法。
首先,我修改了操作,在每次请求、页面和图像时删除旧文件,然后生成所有内容,但没有成功

然后我尝试每次都用不同的名称生成图像,将时间戳连接到文件名。
发生的情况是首先删除generated.jsp,然后在每次请求时引用新的图像名称生成。
在这种情况下,当浏览器请求generated.jsp时,tomcat返回带有200 OK状态代码的页面。当问题出现时,查看页面的源代码,我可以看到返回的是带有旧图像名称引用的页面。
tomcat似乎无法识别文件更改,并且旧图像不再存在,因为在使用旧名称的图像请求时,它仍然会使用304状态代码进行应答

看到这种行为,我检查了tomcat的工作目录,找到了对应于generated.jsp的“java”和“class”文件,发现这些文件的时间戳比webapp文件夹中包含的页面的时间戳早

此时,我尝试了另一种解决方法:使操作删除包含生成的.jsp相关文件的tomcat的工作子文件夹。
即使尝试失败,浏览器也会收到旧的generated.jsp页面和图像的304状态代码

唯一的解决办法是删除webapp文件夹中的旧页面,并使用不同的名称创建页面,就像我对图像所做的那样

我在文档中读到,Tomcat会在每次请求时检查资源是否被修改,除非web.xml中的某些属性被更改。
看到这种行为,我相信tomcat使用一些缓存来进行检查,而不是每次都在文件系统上进行检查,但我在文档中没有找到任何内容


有人知道我是否错了,也许可以帮助我理解这些机制在Tomcat中是如何工作的吗?

Tomcat在服务器上缓存内容,因此在运行时修改可用资源会让您陷入麻烦。你将在职业生涯的剩余时间里努力解决所有问题,并在这个过程中变得疯狂。对不起,你需要重新考虑你的方法


与其在每个请求上生成代码等,为什么每次不直接从servlet 100%动态地服务请求?

我已经从缓存重新标记为tomcat,更具体地说,并接触到更广泛的受众。从来没有想过动态生成JSP,顺便说一句。。。直接生成HTML文件不是更容易吗?是的,但在第一次尝试之后,我认为这是浏览器缓存问题,所以我在jsp中添加了不缓存页面的指令,添加了元标记指令等。。顺便说一句,生成的html也有同样的问题。生成的html不应由AS编译。还是在生成JSP之后手动编译它们?我猜(编译时间)可能是双击把事情搞砸的机会之窗。也许在第一次编译时访问JSP文件(从第二次单击)会中止第二次编译…是的,这是有意义的,我会尽快再次尝试生成纯HTML页面。顺便说一句,我不会手动重新编译生成的jsp。谢谢你的建议:)
<% 
response.setHeader( "Pragma", "no-cache" ); 
response.setHeader( "Cache-Control", "no-cache" ); 
response.setDateHeader( "Expires", 0 ); 
%>
Request URL:http://.../generated.jsp
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html, */*; q=0.01
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,it;q=0.6
Connection:keep-alive
Cookie:JSESSIONID=44E591CE76423F14CCFBE2DF86F50DDE
Host:127.0.0.1:8080
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36
X-Requested-With:XMLHttpRequest
Response Headersview source
Cache-Control:no-cache
Content-Type:text/html;charset=ISO-8859-1
Date:Tue, 03 Dec 2013 07:54:05 GMT
Expires:Thu, 01 Jan 1970 00:00:00 GMT
Pragma:no-cache
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
Request URL:http://.../generated.jsp_files/img.png
Request Method:GET
Status Code:304 Not Modified
Request Headersview source
Accept:image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,it;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Cookie:JSESSIONID=300B5CB436CD60BA8E129B21B085A965
Host:127.0.0.1:8080
If-Modified-Since:Mon, 02 Dec 2013 15:31:57 GMT
If-None-Match:W/"1481-1385998317000"
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36
Response Headersview source
Date:Mon, 02 Dec 2013 15:32:00 GMT
ETag:W/"1481-1385998317000"
Server:Apache-Coyote/1.1