1. JSP가 되어 보자
그리하여 JSP는 서블릿이 되었더라
컨테이너가 서블릿을 작성하는 과정은 먼저 여러분이 작성한 JSP파일을 서블릿 소스코드 파일로 바꾼뒤, 서블릿 클래스로 컴파일 합니다. 돌아왔든 바로왔든 결국은 서블릿이 됩니다.
스크립틀릿 코드
<% out.println(Counter.getCount()); %>
표현식 코드
<%= Conter.getCounter() %>
변수, 메소드 선언문
<%! int count=0; %>
<%! int doubleCunt(); %>
-> JSP 선언문에 기술하면 클래스 내부에 서비스 메소드나 여타 메소드의 바깥쪽에 위치하게 됩니다 여기에 간단한 정적인 변수나 메소드 아니면 인스턴스변수나 메소드를 만들수 있습니다.
컨테이너와 내장객체 비교
API -> 내장객체
JSPWriter -> out
HttpServletRequest -> request
HttpServletResponse -> response
HttpSession -> session
ServletContext -> application
ServletConfig -> config
JspException -> exception
PageContext -> pageContext
Object -> page
생성된 서블릿의 API
컨테이너는 JSP 파일을 HttpJspPage 인터페이스를 구현한 서블릿 클래스를 변환하여 생성합니다. 아래 나와있는 API만 이해하면 됩니다.
org.apache.jasper.reuntime.HttpJspbase
1. jspInit(0
init() 메소드에서 호출합니다.
2. jspDestory()
서블릿의 destroy() 메소드에서 호출합니다. 이 메소드 또한 재정의해도 관계없습니다.
3. _jspService()
서블릿의 service() 메소드에서 호출합니다. 즉 요청이 들어올때 마다 이 메소드는 새로운 스레드로 실행이 된다는 말이겠죠 컨테이너가 알아서 Request 객체와 Response 객체를 매개변수로 넘겨줄 겁니다.
JSP의 일생
1. 김씨가 열심히 .jsp 파일을 작성합니다. 그런 다음 웹 애플리케이션의 일부로 이를 배포함니다.
컨테이너는 이 애플리케이션의 dd파일을 읽습니다. 그렇다고 .jsp 파일에 어떤 작업을 하느냐하면 그건 안닙니다.
2. 사용자가 .jsp 를 요청하는 링크를 클릭합니다.
컨테이너는 .jsp파일을 서블릿 파일을 만들기 위한 .java소스파이로 변환합니다.
3. 컨테이너는 .java파일을 컴파일하여 .class파일로 만듭니다.
4. 컨테이너는 새로 생성된 서블릿 클래스를 메모리로 로딩합니다.
5. 컨테이너가 서블릿을 인스턴스화하면 인스턴스 jspInit(0메소드가 실행되겠죠
이제 이 객체는 클라이언트 요청을 처리할수 있는 완전한 서블릿으로 거듭나게 되었습니다.
6. 요청이 들어올때마다 컨테이너는 새로운 스레드를 만들어 _jspService() 메소드를 실행합니다.
다음 요청부터는 앞에서 살펴본 일반 서블릿과 동일하게 요청을 처리합니다.
이제 마지막으로 서블릿은 클라이언트로 응답을 보냅니다.
JSP 초기화 하기
서블릿 초기화 파라미터 설정하기
<web-app..>
<servlet>
<servlet-name>MyTestInit</servlet-name>
<jsp-file>/TestInit.jsp</jsp-file>
<init-param>
<parma-name>email</param-name>
<param-value>ik@wicked.com</param-value>
</init-param>
</servlet>
</web-app>
jspInit() 재정의 하기
jspInit() 메소드를 JSP 파일에 코딩해놓으면, 컨테이너가 서블릿 인생이 시작하는 시점에 이 메소드를 호출합니다. 물론 이 메소드는 서블릿 init() 메소드에서 호출하겠지요 따라서 이 메소드가 실행되는 시점에서는 ServletConfig 객체와 ServletContext 객체를 사용할수 있습니다.
<%!
public void jspInit(){
ServletConfig sConfig = getServletConfig();
String emailAddr = sConfig.getInitParameter(“email”);
ServletContext ctx = getServletContext();
ctx.setAttribute(“mail”, emailAddr);
}
%>
JSP에서 자바 코딩을 못하도록 막는 방법
<scripting-invalid>
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
<jsp-property-group>
</jsp-config>