Servlet的结束篇

自动刷新
自动刷新不仅可以实现一段时间之后自动跳转到另一个页面,还可以实现一段时间之后自动刷新新本野茫茫
。在servlet中通过HttpServletResponse对象设置Header属性来实现自动刷新举例如下
 response.setHeader("Refresh",1000;UR=Http://localhost;8080/servlert/examp.hrm");
在上述代码中1000为时间单位为毫秒
Servlet与线程安全
所谓的线程安全问题是指在多线程并发执行时会不会出现问题。如果不出现问题则该线程是安全的否则该线程
不是安全线程
由于servlet只会有一个实例,多个用户请求一个Servlet时,Tomcat会派出多条线程执行Servlet的代码,因此
Servlet可能会出现不安全的隐患
下面举例从request中获取name属性,并显示。因为doget()与dopost()方法都要获取name参数所以程序要定义
一个公共的私有变量name,举例如下
public class ThreadSafetyServlet extends HttpServlet{
       prinvate String name;
    
       public void doGet(HttpServletRequest request, HttpServletResponse response)
                throw ServletException,IOEception{
                    name=request.getParamater(“name”);    从request 中获取那么参数
                           try{
                                   Thread.sleep(1000);               让线程沉睡10秒钟

}
catch (InterruptedException e){}              

}

response.getWriter().println("您好,"+name+".你使用了GET方式提交数据“);
        public void  dopost(HttpServletRequest  request,HttpServletResponse response)
                 throws ServletException, IOException{
                        name =request.getParameter().println("您好,"+name+".你使用了post方式提交了数据);
 }
}
细看该程序没有问题。单独测试的时候也不会有问题。但是,这个程序在并发访问的时候就会暴露问题
为突出效果,doget();方法让线程沉睡10秒,10秒内分别用两个游览器访问则会出现器结果都是
“您好,janet.您使用了GET方式提交数据”。这意味着该程序出现了问题。
因此,Servlet不是线程安全的,多线程并发的读写会导致数据不同步的问题。解决的办法是尽量不要定义name属性,而要把
name变量分别定义到doGet()dopost()方法内

posted @ 2013-02-08 14:04  南海问天  阅读(463)  评论(0编辑  收藏  举报