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")));
}
}
지도 web.xml을
시작 톰캣이나 부두에서 서블릿에서이 서블릿/안녕하세요이와 요청을 시작합니다 쉘 스크립트 :
#/bin/sh
for i in {1..100}
do
curl -i -X GET "http://localhost:8080/hello?a=a&b=b&c=c"
done
서버 로그에 다음과 같은 몇 가지 매개 변수가 있습니다. 일부 요청은 아마도 null이 될 수 있으며이 경우는 규칙적인 패턴없이 발생합니다. 예 :
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
이유는 내 Executor에 대해 HttpServletRequest 인스턴스를 보유 할 수 없다는 것입니다. 그래서 이유를 알고 싶습니다! 하나의 요청에서 HttpServletRequest 인스턴스를 보유하는 동작이 다른 요청에 영향을 미칠 수있는 이유는 무엇입니까?
궁금한데 HttpServletRequest 인스턴스의 값이 다른 요청의 영향을받을 수있는 이유는 무엇입니까? – terry
HttpServletRequest가 다른 HttpServletRequest에 영향을받을 수 있다고 말하는 것은 아닙니다. 그러나 요청이 완료되면 (응답이 클라이언트에 전송 됨) 응용 프로그램 서버 (tomcat, jetty ...)가 데이터를 지울 수 있습니다. –