我有一个简单的JSP页面,其表单的值为参数val
<form action="test">
Insert Value<input type="text" name="val"/>
<input type="submit"/>
</form>
接下来我有一个servlet test.java
,它接受val
并打印它。 servlet doGet
方法看起来像这样 -
String val=request.getParameter("val");
response.setContentType("text/html");
PrintWriter p=response.getWriter();
p.println("Value of parameter is "+val);
现在,我已经读过在初始化期间只创建了一个servlet实例,即只创建了一个servlet对象,并使用多个线程处理多个请求。
现在,由于只创建了一个servlet实例,因此只创建了一个变量val
的实例,它一次只能保存一个值,那么为什么在多个请求中每个用户都可以访问自己的值val
的问题?是否不应在多个请求之间共享val
的值并反映其在相应请求中的更改?
请帮助。感谢。
答案 0 :(得分:1)
除了只有一个servlet实例之外,每个HTTP请求都在一个线程内执行,因此每次执行doGet都有自己的调用堆栈。以下命令在该堆栈上创建一个局部变量:
String a=request.getParameter("val");
因此,对于每个线程都有一个调用堆栈,因此每个线程都有自己的变量版本。
答案 1 :(得分:0)
我不确定你的代码:val没有定义? 你在哪里运行这些代码行?
假设val是:
String val=request.getParameter("val");
你的方法如下:
public void doStuff(HttpRequest request){
...
}
每个调用都有一个唯一的请求作为参数,因此是唯一的“val”参数。
答案 2 :(得分:0)
现在你已经纠正了代码。对于每个请求,您正在更新val属性的值,该属性将由最新请求更新:
String val = request.getParameter("val");
因此,如果您想保留该值,请确保您增加 此变量的范围为class,将其设置为 volatile ,然后在分配时验证其中是否包含任何现有值。