自知其无知
不懂,慢慢懂。
posts - 2,comments - 2,trackbacks - 0

 

 

<Host name="localhost"  appBase="webapps"
            unpackWARs
="true" autoDeploy="true"
            xmlValidation
="false" xmlNamespaceAware="false">
   
   
    
<Context path="/webtest" reloadable="false" docBase="D:\years5000 workspace\webtest\web"> 
    
    
<Manager   className="org.apache.catalina.session.PersistentManager"   debug="0"   saveOnRestart="true"     
        maxActiveSessions
="-1"   minIdleSwap="1800"   maxIdleSwap="3600"   maxIdleBackup="-1"   checkInterval="180">   
      
<Store   className="org.apache.catalina.session.FileStore"   directory="c:/www/session"   />   
     
</Manager>   

   
    
</Context>

  
</Host>

 

配置了 reloadable = "false"
当 jsp 的页面部分(而非<%= %> ) 部分有更新时,服务器不会重启,服务器动态编译 jsp 使页面能够读取到最新信息。
当更改了 jsp 的类部分时,服务器同样不户重启,服务器仍旧可以动态编译 jsp .
不过, jsp 在更新之后,假设你浏览器输入了一个当前工程的一个错误目录而产生 404 错误,然后再重新定位到更改后的 jsp 页面(注意不要经过 servlert 跳转),它就会显示更新前的页面,而不会立即显示更新后的页面。如果你刷新一下,它就会显示更新后的页面了;如果你的 jsp 是通过 servlet 重定向(forward) 过来的,那么 你的页面会马上显示出来最新的更新,而不会需要页面刷新才能获取最新的页面。这是为什么?是服务器的原因还是客户端缓存的原因呢?
  当产生404 错误之后,我清空了客户端的缓存,然后进行测试,果然能够得到结果?那会不会是我清空缓存的时候本身就耗费了很长时间,然后服务器已经重新编译了呢?也就说,我还要进行的测试就是不清空缓存,等待一定长的时间,然后回到正确的页面,看页面是否有正确的数据:  等了 n 长时间,在 url 中输入正确的路径后,还是得不到最新数据,由此可以看出这是客户端的错,而不是服务器的错。(开始是怀疑服务器的缓存,服务器的动态编译问题。)

 类(.java ) 文件的修改在 reload ='false' 的时候,服务器不能进行重启也就不能读取类文件的更新。
即使你在某个类中添加了某个方法,但是没有重启服务器,你在 jsp 中调用这个类的方法,会报错!
比如 Student 类如下:(其中类的 stuSex 属性是在运行的时候添加上去的)

package pojo;

public class Student {
    
    
private String stuName;
    
private Integer stuAge;
    
private String stuSex;
    
    
public String getStuSex() {
        
return stuSex;
    }


    
public void setStuSex(String stuSex) {
        
this.stuSex = stuSex;
    }


    
public void init(){
        
        stuName 
= "Hoo聪";
        stuAge 
= 30;
        stuSex 
= "男人";
        
    }

    
    
public Integer getStuAge() {
        
return stuAge;
    }

    
public void setStuAge(Integer stuAge) {
        
this.stuAge = stuAge;
    }

    
public String getStuName() {
        
return stuName;
    }

    
public void setStuName(String stuName) {
        
this.stuName = stuName;
    }

    
}
    
你的 jsp 如下:
<%
  Student stu = new Student();
  stu.init();
  pageContext.setAttribute("stu",stu);
%>
学生的 性别: ${stu.stuSex}

这样会导致页面错误:
Property 'stuSex' not found on type pojo.Student
也就是说你的类并没有动态编译。



配置了 reloadable = "true"
当我们更改 jsp 的时候,是没有任何reload 的迹象的,当我们修改类的时候,可以 tomcat 进行了 reload 操作


小结如下:
 jsp 的修改(不论是页面部分还是类部分<%=%>) 都不需要 reload 的设置。
class 在 reload 设置为 false 的时候,不会得到更新,即使你上传了最新的.class 文件;在 reload 设置为 true的时候就会得到更新,也就是说必须重启才能生效。而在一般情况下,重启带来的麻烦很多,不如重新部署你的工程。

posted on 2008-12-16 13:07 CopyHoo 阅读(246) 评论(0)  编辑  收藏 所属分类: Java Web

只有注册用户登录后才能发表评论。


网站导航: