server.xml  中Context加上reloadable="true"

解决方案 »

  1.   

    删掉tomcat的work目录,那个目录里面是编译的临时文件
      

  2.   

    有时候是缓存的问题
    1, 使用java提供的方法,在jsp或者servlet中都可以  
    <% 
    response.setHeader("Pragma","No-cache"); 
    response.setHeader("Cache-Control","no-cache"); 
    response.setDateHeader("Expires", 0); 
    %>  
    2, 使用HTML标记,如下面:  
    <HEAD>  
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">  
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">  
    <META HTTP-EQUIV="Expires" CONTENT="0"> 
      

  3.   

    同意 fft123()
    删掉tomcat的work目录,那个目录里面是编译的临时文件
      

  4.   

    从Servlet的生命周期我们可以发现:如果没有在部署描述器(web.xml)中用不同参数多次加入同一个servlet,包容器(也就是Tomcat服务器)就只会给这个servlet创建一个实例(在包容器启动时,或响应第一个该servlet的请求时)并初始化它。以后所有关于此servlet的请求,都是这个实例分配的线程(主要是service()方法),也就是说只要请求的servlet在包容器中存在一个实例,那么包容器就不会重载这个servlet类,不管这个类是否已经更改了。一个被实例化的servlet实例,在包容器中一般是不会消亡的,这不像其他JVM中的类的实例。其实Tomcat的这种做法是很合理高效的,只是给我们的程序开发带来了一些不便。
    (对JSP问题的解答希望你自己能够证明,因为我自己也好像记不大清楚了,而现在又不能做实验)对JSP(JSP的实质还是servlet,所以这个观点也适合servlet)请求而言,服务器给的响应包括两部分,一部分是实体(Entity Body),这是该JSP的所有输出内容,另一部分就是响应头了,可在响应头(Response Header Field)中并不包括Last-Modified,也就是说即使该JSP的输出被缓存在客户机上,再次请求该JSP时的请求头(Request Header Field)中也不包括Last-Modified,而服务器也就必须再次请求该JSP,所以正常情况下服务器是不会给对该JSP的请求返回响应码304 Not Modified 的,而是再次重新执行JSP对应的servlet,并把输出返回(响应码200,这部分关于请求与响应的详细资料请参阅http://www.ietf.org/rfc/rfc2616.txt)。JSP所生成的servlet和servlet的生命周期一样,但却也有不同,就是服务器把对JSP的请求交给JSP引擎,JSP引擎会做出两个判断,1.JSP是否已经转换成servlet;2.JSP源文件是否已经被修改。这两点都可能导致JSP的编译或再编译,所以在一般情况下,JSP的改动将会导致JSP引擎对JSP重新编译而生成新的servlet。我所说的这两个判断,没有考虑JSP被web应用程序部署到servlet,即:
    <servlet>
      <servlet-name>JSPServlet</servlet-name>
      <page-file>jsp.file</page-file><!--对不起,这个标记我忘了,好像是这个吧-->
    </servlet>
      

  5.   

    除了
    server.xml  中Context加上reloadable="true"
    之外,tomcat刷新类库需要点时间,注意tomcat的后台输出
    每次更新类之后,tomcat会出现提示,classload信息,表示
    类已更新,这是再访问,才生效