总是说servlet是多线程的,谁能具体解释一下,是只有一个实例,但被多个线程使用,每个线程对应一个客户请求吗,那么这些servlet的方法不是同步的了,所以效率才高,而且线程不安全,这样理解对吗。
解决方案 »
- jdk1.6 开发webservice 获得request为空
- jsp页面之间传值
- 如何更好的提升自己的能力
- The server encountered an internal error () that prevented it from fulfilling this request.
- CLOB的问题
- 包含有隐藏file的FORM为什么提交会出现runtime的错误?急
- jboss+cvs控制以及开发的问题,请高手作答,100分,分不够可以再加
- 如何传等号(=)???.....在线
- 为什么SQL无法更新oracle数据库,生成的sql(ss)语句能在SQL PLUS上正常运行.代码如下:
- 请看看这个程序?为什么得不出结果。急!
- 急!!数据库连接串
- Java插入mysql数据库出现了乱码
Servlet是个程序,一个Java程序,被Tomcat调用了,随Web服务一直运行着。
其中,Servlet的service()方法,是能被Tomcat反复调用的。
每调用一次,就是创建了一个线程,并把封装好的 request 对象和 response对象 传递给service方法。其中,request 和 response 是Tomcat接收到的客户端的请求,再封装而成的对象。按你上面所说的,每个 request 对象是不同的(虽然都是HttpRequest类),所获取的 Parameter肯定也不同了,不能被第二个进程读到。当它调用 servlet 自身的方法,把它放到 ServletContext中,或者是HttpSession中,就能被其它的线程读到了。
public class A extends HttpServlet{
private String s=null;//属性
..doGet(request,response){
String ss="SSS";
//改变属性值
s=...
}
}
这个例子,如果有两个线程同时访问这个servlet,在doGet()方法中第一个线程改变了s(属性)的值,第二个线程就可能错误的读取了第一个线程改变的s值,但是不管如何,局部变量ss是不会受影响的.所以在servlet考虑线程安全,不要用属性,就用局部变量好了