Language/JSP

JSP 내부 _jspService 메서드의구조

적외선 2013. 12. 15. 03:01

07 JSP 내부 _jspService 메서드의구조

 

그럼 _jspService()메서드의 내부를 살펴 보도록 하겠습니다. 이 _jspService()메서드는 매개변수로 request와 response를 갖습니다. request는 HttpServletRequest형을 갖으며 response는 HttpServletResponse형을 갖습니다. 우선 앞에서 언급했듯이 jsp의 <% %>의 내용과 html태그들이 이 메서드 안에 삽입됩니다. 그리고 여러 개의 지역 변수들이 선언되고 사용됩니다. _jspService 의 구성요소를 살펴보면 다음과 같습니다.

 

_jspService의 구성

n         매개변수2개

1.        HttpServletRequest request

2.        HttpServletResponse response

n         필요한 지역변수

1.        PageContext pageContext = null;

2.        HttpSession session = null;

3.        ServletContext application = null;

4.        ServletConfig config = null;

5.        JspWriter out = null;

6.        Object page = this;

7.        JspFactory _jspxFactory = null;

8.        String  _value = null;

n         지역변수초기화

1.        _jspxFactory = JspFactory.getDefaultFactory();

2.        pageContext = _jspxFactory.getPageContext(this, request, response, "", true, 8192, true);

3.        application = pageContext.getServletContext();

4.        config = pageContext.getServletConfig();

5.        session = pageContext.getSession();

6.        out = pageContext.getOut();

 

 위의 모든 변수들은 제각각 _jspService내에 중요한 역할을 하며 앞으로도 계속 사용되는 변수들입니다. 위의 초기화 된 변수와 매개변수들을 내장객체라고 부릅니다. 그럼 _jspService메서드 부분을 직접 보면서 설명해 나가겠습니다. hello.jsp에 해당하는 _jspService메서드 부분은 아래와 같습니다.

 

hello.jsp

Hello World! JSP를 테스트하기 위한 예제

<html><head><title>Hello JSP</title></head><body>

<h1> Hello JSP Test</h1>

<%

out.println("<font color=blue>Hello World! JSP</font>");

%>

</body></html>

 

_jspService메서드 부분

  public void _jspService(HttpServletRequest request, HttpServletResponse  response) 
        
throws java.io.IOException, ServletException { 
        JspFactory _jspxFactory = 
null
        PageContext pageContext = 
null
        HttpSession session = 
null
        ServletContext application = 
null
        ServletConfig config = 
null
        JspWriter out = 
null
        Object page = 
this
        String  _value = 
null
        
try 
            
if (_jspx_inited == false) { 
                
synchronized (this) { 
                    
if (_jspx_inited == false) { 
                        _jspx_init(); 
                        _jspx_inited = 
true
                    } 
                } 
            } 
            _jspxFactory = JspFactory.getDefaultFactory(); 
            response.setContentType(
"text/html;charset=ISO-8859-1"); 
            pageContext = _jspxFactory.getPageContext(this, request, response,
"",true, 8192true); 
            application = pageContext.getServletContext(); 
            config = pageContext.getServletConfig(); 
            session = pageContext.getSession(); 
            out = pageContext.getOut(); 
            
// HTML // begin [file="/hello.jsp";from=(0,0);to=(2,0)] 
            
out.write("<html><head><title>Hello JSP</title></head><body>\r\n<h1> Hello JSP Test</h1>\r\n"); 
            
// end 
            // begin [file="/hello.jsp";from=(2,2);to=(4,0)] 
                  
out.println("<font color=blue>Hello World! JSP</font>"); 
            
// end 
            // HTML // begin [file="/hello.jsp";from=(4,2);to=(8,0)] 
                
out.write("\r\n</body></html>\r\n\r\n\r\n"); 
            
// end 
        
catch (Throwable t) { 
            
if (out != null && out.getBufferSize() != 0
                out.clearBuffer(); 
            
if (pageContext != null) pageContext.handlePageException(t); 
        } 
finally 
            
if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext); 
        } 
   }

 

 우선 메서드를 보면 IOException, ServletException이 선언되어 있습니다. 자동으로 jsp파일을 Servlet파일로 바꿔주는 것인 만큼 자세히 신경 쓰지 않아도 되겠지만, 이렇게 Exception 선언이 되어 있다는 정도는 알고 있는 것이 좋습니다.

 

 그리고 메서드 내부에서 지역 변수를 선언하고 있습니다. 이 선언된 객체변수를 초기화 한 후 _jspService메서드 내에서 사용하고 있습니다. 지역객체변수와 jsp에서 사용되는 태그사이에는 미묘한 관계가 있습니다.

 

<% %>태그와 _jspService의 지역변수

n        jsp문서의 <%  %>태그 안에 들어 있는 부분은 _jspService메서드안에 삽입된다.

n        <%  %> 내에서 _jspService메서드 내의 지역변수를 모두 사용할 수 있다.

 

여기에 선언된 pageContext, session, application, config, out, page와 매개변수 request, response를 우리는 내장객체라 부릅니다. <% %>태그 내에서는 _jspService에 존재하는 out객체를 이용하여 클라이언트로 println을 하고 있습니다. 이것은 <% %>태그 내의 모든 내용이 _jspService내의 지역변수 아래 쪽에 위치하기 때문에 가능한 일입니다.

 

JSP 내장객체

ServletRequest request (HttpServletRequest request) : 클라이언트의 http요청을 담고 있는 객체

ServletResponse response (HttpServletResponse response) : 클라이언트로 응답을 전송할 객체

PageContext pageContext : 다른 내장객체를 얻거나, 요청을 처리할 제어권을 다른 페이지로 위임하는 객체

HttpSession session : 클라이언트와 서버와의 세션데이터를 가지고 있는 객체

ServletContext application : Web application이 실행되는 실행 환경에 대한 정보를 담고 있는 객체

JspWriter out : Servlet이 요청을 처리하여 응답을 전송할 때 전송할 응답에 대한 출력 스트림 객체

ServletConfig config : Servlet 객체가 참조하게 될 초기 설정 데이터에 대한 정보를 담고 있는 객체

Object page (HttpJspPage) : Servlet 객체를 참조하는 레퍼런스

Throwable exception : 예외가 발생할 경우 에러 페이지에 전달되는 객체






출처 - http://www.jabook.com/jabook_original/book_jbjsp01/jbjsp01_html/10000_30000_70000__10000_30000_70000.html