我很困惑,HttpServletRequest.getParameter有时会返回null,而我真的在请求中包含参数。HttpServletRequest.getParameter丢失参数
测试下面的程序:
HelloServlet.java:
public class HelloServlet extends HttpServlet {
private static Executor logExecutor = Executors.newFixedThreadPool(5);
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
logExecutor.execute(new Task(req));
}
}
class Task implements Runnable {
private HttpServletRequest req;
public Task(HttpServletRequest req) {
this.req = req;
}
@Override
public void run() {
System.out.println(String.format("a=%s b=%s c=%s",
req.getParameter("a"), req.getParameter("b"),
req.getParameter("c")));
}
}
地图这个servlet来/你好在web.xml
开始在Tomcat或码头servlet时,启动与请求shell脚本:
#/bin/sh
for i in {1..100}
do
curl -i -X GET "http://localhost:8080/hello?a=a&b=b&c=c"
done
服务器日志显示某些参数在某些请求可能为空,并且此情况发生时没有常规模式。如:
a=a b=b c=c
a=a b=b c=c
a=null b=null c=null
a=null b=null c=null
a=null b=null c=null
a=null b=b c=c
a=null b=null c=c
a=a b=b c=c
a=a b=b c=c
a=a b=b c=c
a=a b=b c=c
a=null b=null c=null
a=a b=b c=c
a=null b=b c=c
我发现原因是我无法为我的执行程序持有HttpServletRequest实例。 所以我想知道原因!为什么我在一个请求中持有HttpServletRequest实例的操作可能会影响其他请求。
我很好奇为什么一个HttpServletRequest的实例的值可以由其他请求的影响。 – terry 2014-12-05 07:38:46
我并不是说HttpServletRequest可能会受到另一个的影响。但是一旦请求完成(响应发送给客户端),应用程序服务器(tomcat,jetty ...)就可以清除它的数据。 – 2014-12-05 08:22:16