2010-11-26 5 views
0

내부 doGet()/doPost() I은 ​​할 여러 요청 RequestDispatcher dispatcher재사용 RequestDispatcher의 서블릿의 객체

init() 가변 인스턴스

dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/pages/view.jsp"); 
0123이되도록했다

doGet()/doPost()은 이렇게 뒤에 이유는 모든 요청에 ​​대해 RequestDispatcher 건설 (/ 조회)의 비용을 저장하는 것입니다

dispatcher.forward(request, response); 

있습니다. 서버 구현이 이미 객체를 캐시하고 모든 getRequestDispatcher() 호출에 대한 URL로 디스패처를 조회하는 경우 코드에서 디스패처에 대한 참조를 init으로 얻음으로써 조회 비용을 절약 할 수 있습니다.

또한 동일한 디스패처 개체가 매번 사용되므로 스레드 안전성 여부를 알고 싶습니까?

답변

1

스레드 안전해야하지만, 스레드 세이프가 아닌 특정 servletcontainer 제작/버전이 있습니다. 예를 들어 Apache Tomcat에서는 버전 6.0.8에서 수정하기 전까지는 스레드 세이프가 아닙니다.

이 방법을 "조기 최적화"범주에 넣을 수 있습니다. 나는 그렇게하지 않을 것이다.