1. None Thread Safe 예제 (선언부)
<%!
Map<String,Object> param;
public void init(HttpServletRequest req) {
param = ...;
}
%>
<%
init(request);
%>
위의 코드는 선언부에 param 객체를 선언해서
jsp가 컴파일될 때 param 객체는 멤버변수가 된다.
멤버변수는 여러 쓰레드가 접근할 경우 반드시 동기화를 시켜줘야 하는데
여기서는 동기화를 하지 않아 동시접근 시 안전성을 보장받을 수 없다.
2. Thread Safe 예제 (스크립틀릿)
<%
Map<String,Object> param;
...
param = ...;
%>
위의 코드에서 보이는 param 객체는 jsp 가 컴파일 될 때
멤버변수 영역이 아닌 _jspService 메소드 안에 자리잡게 된다.
이는 많은 쓰레드가 접근하더라도,
공유 객체가 아닌 메소드 안에서 생성되는 객체이기 때문에
Thread Safe 한 객체가 된다.
3. 결론
선언부(<%! %>)에는 final 변수, 동기화된 싱글톤 객체 등과 같이 Thread Safe 된 객체들이 와야 하고
스크립틀릿(<% %>) 내부에는 파라미터 가공과 같이 Thread에 민감한 객체들을 사용해야 한다.
'개발이야기 > java' 카테고리의 다른 글
초간단 jsp Thread-Safe 설명 (0) | 2022.11.21 |
---|---|
초간단 java Thread-Safe 설명 (0) | 2022.11.21 |
JSP 이벤트 페이지 - 데이터 및 DB동기화 문제 (0) | 2022.11.07 |
Java Reflection - private 변수값 수정하기 (0) | 2022.01.20 |
Java Reflection - private 변수값 읽어오기 (0) | 2022.01.20 |