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()方法内