这个问题在这里已有答案:
我有一个简单的JSP页面,其表单的值为参数 val
<form action="test">
Insert Value<input type="text" name="val"/>
<input type="submit"/>
</form>
接下来我有一个servlet test.java
,需要 val
并打印出来 . servlets doGet
方法看起来像这样 -
String val=request.getParameter("val");
response.setContentType("text/html");
PrintWriter p=response.getWriter();
p.println("Value of parameter is "+val);
现在,我已经读过在初始化期间只创建了一个servlet实例,即只创建了一个servlet对象,并使用Multiple Threads处理了多个请求 .
现在,由于只创建了一个servlet实例,因此只创建了一个变量 val
的实例,它一次只能保存一个值,那为什么在多个请求期间每个用户都可以访问自己的 val
值?
不应该在多个请求之间共享 val
的值并反映其在相应请求中的更改?
请帮忙 . 谢谢 .
3 回答
除了只有一个servlet实例之外,每个HTTP请求都在一个线程内执行,因此每次执行doGet都有自己的调用堆栈 . 以下命令在该堆栈上创建一个局部变量:
因此,对于每个线程都有一个调用堆栈,因此每个线程都有自己的此变量版本 .
我不确定你的代码:val没有定义?你在哪里运行这些代码行?
假设val是:
而且你的方法如下:
每个调用都有一个唯一的请求作为参数,因此唯一的“val”参数 .
所以现在你已经纠正了代码 . 对于每个请求,您正在更新val属性的值,该属性将由最新请求更新: