서블릿의라이프사이클 뇌를자극하는 JSP & Servlet
Contents v 학습목표 서블릿클래스로부터서블릿객체가만들어지고, 서블릿객체가초기화되어서서블릿이되고, 서블릿이사용되고, 최종적으로소멸되기까지의전과정을서블릿의라이프사이클이라고한다. 이장에서는서브릿의라이프사이클에관련된프로그래밍기술을배워보자. v 내용 서블릿의라이프사이클 서블릿클래스의 init 메서드의 destroy 메서드 JSP 페이지의 jspinit 메서드와 jspdestroy 메서드 서블릿의환경을표현하는 ServletContext 객체 2/39
1. 서블릿의라이프사이클 서블릿클래스는웹브라우저에의해바로호출되는것이아니라서블릿클래스로부터 서블릿객체가만들어지고, 그객체가웹컨테이너에의해초기화된다음에호출된다. 웹브라우저의요청을처리할수있는상태의서블릿객체를서블릿이라고한다. [ 그림 6-1] 서블릿의라이프사이클 3/38
1. 서블릿의라이프사이클 웹컨테이너는서블릿을언제제거할까? 웹컨테이너는자신이종료되기전이나웹애플리케이션을리로드 (unload) 하기전에그에속하는모든서블릿을제거한다. 서블릿라이프사이클전체에거쳐서한번만실행되어야할코드는서블릿클래스안에 init 메서드와 destroy라는메서드를선언하고그안에써놓으면된다. public class SomeServlet extends HttpServlet { public void init() throws ServletException { 서블릿이초기화될때해야할일을기술하는부분 public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { out.println( <HTML> ); out.println( <HEAD><TITLE>Hello</TITLE></HEAD> ); out.println( <BODY>Hello, Everyone.</BODY> ); out.println( </HTML> ); public void destroy() { 서블릿이제거되기전에해야할일을기술하는부분 [ 그림 6-2] 서블릿클래스의 init 메서드와 destroy 메서드 4/38
1. 서블릿의라이프사이클 JSP 기술에서는초기화작업과마무리작업단계에해야할일을 jspinit 와 jspdestroy 메 서드안에써놓으면웹컨테이너에의해자동으로호출된다. <%! public void jspinit() { JSP 페이지로부터변환된서블릿이초기화될때해야할일을기술하는부분 %> <HTML> <HEAD><TITLE>Hello</TITLE></HEAD> <BODY> Hello, Everyone. </BODY> </HTML> <%! public void jspdestroy() { JSP 페이지로부터변환된서블릿이제거되기전에해야할일을기술하는부분 %> [ 그림 6-3] JSP 페이지의 jspinit 메서드와 jspdestroy 메서드 5/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v init 메서드의작성방버 init 메서드는파라미터가없는메서드로선언해야하고, 리턴타입은 void로지정해야하며, public 메서드로선언해야한다. public void init() throws ServletException { 우리가작성할코드가들어가는부분 위의점선으로표시된부분에서블릿클래스의초기화작업중에실행해야할코드를써 놓으면 init 메서드가완성된다. 6/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v init 메서드의작성방법 [ 예제 6-1] 피보나치수열을출력하는서블릿클래스 import javax.servlet.http.*; import javax.servlet.*; import java.io.*; import java.math.biginteger; public class FibonacciServlet extends HttpServlet { private BigInteger arr[]; public void init() { arr = new BigInteger[100]; arr[0] = new BigInteger( 1 ); arr[1] = new BigInteger( 1 ); for (int cnt = 2; cnt < arr.length; cnt++) arr[cnt] = arr[cnt-2].add(arr[cnt-1]); public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { String str = request.getparameter( NUM ); int num = Integer.parseInt(str); if (num > 100) num = 100; response.setcontenttype( text/html;charset=euc-kr ); PrintWriter out = response.getwriter(); out.println( <HTML> ); out.println( <HEAD><TITLE> 피보나치수열 </TITLE></HEAD> ); for (int cnt = 0; cnt < num; cnt++) out.println(arr[cnt] + ); out.println( </BODY> ); out.println( </HTML> ); 7/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v init 메서드의작성방법 톰캣의 webapps 디렉터리아래에 brain06이라는이름의웹애플리케이션디렉터리를만들고, 서블릿클래스를컴파일한결과를다음과같이설치하고등록한다. 2 WEB-INF/classes 서브디렉터리에 [ 예제 6-1] 의컴파일결과를저장하세요 3 WEB-INF 서브디렉터리에다음과같은 web.xml 파일을만들어서저장하세요 1 톰캣의 webapps 디렉터리아래에 brain06/web-inf/classes 서브디렉터리를만드세요 8/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v init 메서드의작성방법 [ 예제 6-1] 을호출하면서출력할항의수를 URL 뒤에쓰세요. [ 그림 6-5] 예제 6-1 의실행결과 웹컨테이너가시작될때서블릿이초기화되도록만드는엘리먼트 [ 그림 6-6] 웹컨테이너가시작될때서블릿이초기화되도록만드는엘리먼트 9/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v destroy 메서드의작성방법 destroy 메서드의작성방법은 init 메서드와비슷하다. 파라미터가없어야하고, 리턴타입은 void여야하고, public 메서드로선언해야한다. 하지만 init 메서드와달리 throws 절을쓸수없다. public void destroy() { 우리가작성할코드가들어가는부분 [ 그림 6-7] 인사말을출력하는웹애플리케이션의화면설계 10/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v destroy 메서드의작성방법 http://localhost:8080/brain06/yourname.html [ 그림 6-7] 의왼쪽화면의 URL [ 예제 6-2] 이름을입력받는 HTML 문서 http://localhost:8080/brain06/greeting [ 그림 6-7] 의오른쪽화면의 URL <HTML> <HEAD> <META http-equiv= Content-Type content= text/html;charset=euc-kr > <TITLE> 이름입력 </TITLE> </HEAD> <BODY> <H3> 이름을입력하십시오.</H3> <FORM ACTION=greeting> 이름 : <INPUT TYPE=TEXT NAME=NAME> <INPUT TYPE=SUBMIT VALUE= 확인 > </FORM> </BODY> </HTML> 11/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v destroy 메서드의작성방법 [ 예제 6-3] 인사말을출력하는서블릿클래스 import javax.servlet.http.*; import javax.servlet.*; import java.io.*; import java.util.*; public class GreetingServlet extends HttpServlet { private PrintWriter logfile; public void init() throws ServletException { try { logfile = new PrintWriter(new FileWriter( c:\\data\\log.txt, true)); catch (IOException e) { throw new ServletException(e); public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { String name = request.getparameter( NAME ); String greeting = 안녕하세요, + name + 님. ; if (logfile!= null) { GregorianCalendar now = new GregorianCalendar(); logfile.printf( %TF %TT - %s %n, now, now, name); response.setcontenttype( text/html;charset=euc-kr ); PrintWriter out = response.getwriter(); out.println( <HEAD><TITLE> 인사하기 </TITLE></HEAD> ); out.println( <BODY> ); out.println(greeting); out.println( </BODY> ); out.println( </HTML> ); public void destroy() { if (logfile!= null) logfile.close(); 12/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v destroy 메서드의작성방법 2 [ 예제 6-3] 의컴파일결과를 classes 디렉터리에저장하세요. 3 web.xml 파일을열어서다음과같은두엘리먼트를추가하세요 1 brain06 웹애플리케이션디렉터리의 WEB-INF 서브디렉터리로가세요. 13/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v destroy 메서드의작성방법 [ 그림 6-10] 예제 6-3 이만든로그파일의내용확인하기 출력메시지 14/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v 서블릿의초기화파라미터 서블릿의초기화파라미터란서블릿의초기화작업에필요한데이터의의미한다. <servlet> <servlet-name>agreement-servlet</servlet-name> <servlet-class>agreementservlet</servlet-class> <init-param> <param-name>file_name</param-name> <param-value>agreement.txt</param-value> </init-param> </servlet> 파라미터의이름파마미터의값 하나의서블릿클래스에둘이상의초기화파라미터를넘겨줄수있다. 서블릿클래스안에서초기화파라미터값을가져오려면 getinitparameter 라는메서드를 호출하면된다. 서블릿의초기화파라미터 String filename = getinitparameter( FILE_NAME ); 초기화파라미터의이름 15/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v 서블릿의초기화파라미터 [ 예제 6-4] 인사말을출력하는서블릿클래스 서블릿의초기화파라미터사용 import javax.servlet.http.*; import javax.servlet.*; import java.io.*; import java.util.*; public class GreetingServlet extends HttpServlet { private PrintWriter logfile; public void init() throws ServletException { String filename = getinitparameter( FILE_NAME ); try { logfile = new PrintWriter(new FileWriter(filename, true)); catch (IOException e) { throw new ServletException(e); public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { String name = request.getparameter( NAME ); String greeting = 안녕하세요, + name + 님. ; if (logfile!= null) { GregorianCalendar now = new GregorianCalendar(); logfile.printf( %TF %TT - %s %n, now, now, name); response.setcontenttype( text/html;charset=euc-kr ); PrintWriter out = response.getwriter(); out.println( <HEAD><TITLE> 인사하기 </TITLE></HEAD> ); out.println( <BODY> ); out.println(greeting); out.println( </BODY> ); out.println( </HTML> ); public void destroy() { if (logfile!= null) logfile.close(); 16/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v 서블릿의초기화파라미터 brain06 웹애플리케이션디렉터리의 WEB-INF/web.xml 파일에서블릿을등록할때다음과같이 FILE_NAME 라는이름의초기화파라미터를기재한다. [ 예제 6-4] 를등록하는 <servlet> 엘리먼트안에 <init-param> 서브엘리먼트를추가하세요. [ 그림 6-11] 예제 6-4 의등록방법 [ 그림 6-12] 예제 6-4 가만든로그파일의내용확인하기 17/38
2. 서블릿클래스의 init 메서드와 destroy 메서드 v 서블릿의초기화파라미터 [ 예제 6-4] 를등록하는기존의엘리먼트 [ 예제 6-4] 를등록하는새로운엘리먼트 [ 그림 6-13] 하나의서블릿클래스를가지고두개의서블릿을등록하는방법 18/38
3. JSP 페이지의 jspinit 메서드와 jspdestroy 메서드 v jspinit 메서드와 jspdestroy 메서드의작성방법 jspinit 메서드의작성방법은서블릿클래스의 init 메서드와비슷하다. 파라미터가없는메서드로만들어야하고, 리턴타입은 void로지정해야하고, public 메서드로선언해야한다. 하지만 throw 절을쓸수없다는점은 init 메서드와다르다. public void jspinit() { 우리가작성할코드가들어가는부분 jspdestroy 메서드의작성규칙은서블릿클래스의 destroy 메서드와비슷하다. 파라미터 가없어야하고, 리턴타입은 void 로지정하며, public 메서드로선언해야한다. public void jspdestroy() { 우리가작성할코드가들어가는부분 19/38
3. JSP 페이지의 jspinit 메서드와 jspdestroy 메서드 v jspinit 메서드와 jspdestroy 메서드의작성방법 [ 예제 6-5] jspinit, jspdestroy 메서드의사용예를보여주는 JSP 페이지 <%@page contenttype= text/html; charset=euc-kr import= java.io.*, java.util.* %> <%! private PrintWriter logfile; public void jspinit() { String filename = c:\\data\\datetime_log.txt ; try { logfile = new PrintWriter( new FileWriter(filename, true)); catch (IOException e) { System.out.printf( %TT - %s 파일을열수없습니다. %n, new GregorianCalendar(), filename); %> <HTML> <HEAD><TITLE> 현재의날짜와시각 </TITLE></HEAD> <BODY> <% GregorianCalendar now = new GregorianCalendar(); String date = String.format( 현재날짜 : %TY 년 %Tm 월 %Te 일, now, now, now); String time = String.format( 현재시각 : %TI 시 %Tm 분 %TS 초, now, now, now); out.println(date + <BR> ); out.println(time + <BR> ); if (logfile!= null) logfile.printf( %TF %TT 에호출되었습니다.%n, now, now); %> </BODY> </HTML> <%! public void jspdestroy() { if (logfile!= null) logfile.close(); %> 20/38
3. JSP 페이지의 jspinit 메서드와 jspdestroy 메서드 v jspinit 메서드와 jspdestroy 메서드의작성방법 [ 그림 6-14] 예제 6-5 의실행방법 [ 그림 6-15] 예제 6-5 가저장한로그파일의내용확인하기 21/38
3. JSP 페이지의 jspinit 메서드와 jspdestroy 메서드 v JSP 페이지의초기화파라미터 JSP 페이지는서블릿클래스와달리 web.xml 파일에등록하지않아도웹브라우저에서호출할수있지만, 초기화파라미터를기재하기위해서는 web.xml 파일에등록해야한다. web.xml 파일의루트엘리먼트인 <web-app> 아래에 <servlet> 과 <servle-mapping> 이라는두개의서브엘리먼트를쓴다. <web-app> <servlet> </servlet> <servlet-mapping> </servlet-mapping> </web-app> JSP 페이지의본래의 URL 경로명이들어갈부분 JSP 페이지를호출할때사용할 URL 경로명이들어갈부분 22/38
3. JSP 페이지의 jspinit 메서드와 jspdestroy 메서드 v JSP 페이지의초기화파라미터 <servlet> 엘리먼트안에 <servlet-name> 과 <jsp-file> 이라는서브엘리먼트를쓰고, <servlet-mapping> 엘리먼트안에 <servlet-name> 과 <url-pattern> 이라는서브엘리먼트를쓴다. <jsp-file> 엘리먼트안에는 JSP 페이지의 URL 경로명을써야하는데, 이경로명은웹애플리케이션내에서의경로명이어야하고반드시슬래시 (/) 로시작해야한다. <web-app> <servlet> <servlet-name>winners-jsp</servlet-name> <jsp-file>/winners.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>winners-jsp</servlet-name> <url-pattern>/winners</url-pattern> </servlet-mapping> </web-app> 23/38
3. JSP 페이지의 jspinit 메서드와 jspdestroy 메서드 v JSP 페이지의초기화파라미터 JSP 페이지의초기화파라미터를기재하는방법은서블릿클래스의경우와동일하다. <servlet> 엘리먼트안에 <init-param> 이라는서브엘리먼트를쓰고, 그안에다시 <param-name> 과 <param-value> 라는두개의서브엘리먼트를쓴다. <web-app> <servlet> <servlet-name>winners-jsp</servlet-name> <jsp-file>/winners.jsp</jsp-file> <init-param> <param-name>file_name</param-name> <param-value>winner-list.txt</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>winners-jsp</servlet-name> <url-pattern>/winners</url-pattern> </servlet-mapping> </web-app> 초기화파라미터를지정하는엘리먼트 String filename = getinitparameter( FILE_NAME ); 초기화파라미터의이름 24/38
3. JSP 페이지의 jspinit 메서드와 jspdestroy 메서드 v JSP 페이지의초기화파라미터 [ 예제 6-6] 초기화파라미터를가져오는 JSP 페이지 <%@page contenttype= text/html; charset=euc-kr %> <HTML> <HEAD><TITLE> 초기화파라미터테스트 </TITLE></HEAD> <BODY> <% String dbname = getinitparameter( DB_NAME ); %> 데이터베이스이름 : <%= dbname %> <BR> </BODY> </HTML> [ 예제 6-6] 을등록하는엘리먼트 JSP 페이지의초기화파라미터 [ 그림 6-17] 예제 6-6 의실행결과 25/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 서블릿의환경정보를가져오는방법 서블릿클래스나 JSP 페이지의환경에관련된정보는 javax.servlet 패키지의 ServletContext 인터페이스타입의객체를이용해서얻을수있다. 서블릿클래스에서이타입의객체를구하기위해서는 getservletcontext라는메서드를호출하면된다. ServletContext context = getservletcontext(); ServletContext 객체에대해 getserverinfo 라는메서드를호출하면서블릿이속하는웹서 버종류가리턴된다. ServletContext 객체를리턴하는메서드 String str = context.getserverinfo(); 웹서버의종류를리턴하는메서드 26/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 서블릿의환경정보를가져오는방법 ServletContext 객체에대해 getmajorversion 과 getminorversion 이라는메서드를호출하 면웹컨테이너가지원하는서블릿규격서의메이저버전과마이너버전이리턴된다. int num1 = context.getmajorversion(); 서블릿의메이저버전을가져오는메서드 int num2 = context.getminorversion(); 서블릿의마이너버전을가져오는메서드 27/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 서블릿의환경정보를가져오는방법 [ 예제 6-7] 웹서버의정보를출력하는 JSP 페이지 import javax.servlet.http.*; import javax.servlet.*; import java.io.*; public class ServerInfoServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { ServletContext context = getservletcontext(); String serverinfo = context.getserverinfo(); int majorversion = context.getmajorversion(); int minorversion = context.getminorversion(); response.setcontenttype( text/html;charset=euc-kr ); PrintWriter out = response.getwriter(); out.println( <HTML> ); out.println( <HEAD><TITLE> 웹서버의정보 </TITLE></HEAD> ); out.println( <BODY> ); out.printf( 웹서버의종류 : %s <BR>, serverinfo); out.printf( 지원하는서블릿버전 : %d.%d <BR>, majorversion, minorversion); out.println( </BODY> ); out.println( </HTML> ); 28/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 서블릿의환경정보를가져오는방법 2 [ 예제 6-3] 의컴파일결과를 classes 디렉터리에저장하세요. 3 web.xml 파일을열어서다음과같은두엘리먼트를추가하세요 1 brain06 웹애플리케이션디렉터리의 WEB-INF 서브디렉터리로가세요. 29/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 서블릿의환경정보를가져오는방법 [ 예제 6-8] application 내장변수의사용예를보여주는 JSP 페이지 <%@page contenttype= text/html; charset=euc-kr %> <HTML> <HEAD><TITLE> 웹서버의정보 </TITLE></HEAD> <BODY> 웹서버의종류 : <%= application.getserverinfo() %> <BR> 지원하는서블릿버전 : <%= application.getmajorversion() %>.<%= application.getminorversion() %> <BR> </BODY> </HTML> [ 그림 6-17] 예제 6-6 의실행결과 30/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 웹애플리케이션의초기화파라미터값을가져오는 getinitparameter 메서드 web.xml 파일에웹애플리케이션전체에속하는초기화파라미터를기재할수도있다. web.xml 파일의루트엘리먼트인 <web-app> 엘리먼트바로아래 <context-param> 이라 는이름의서브엘리먼트를쓰고, 그안에 <param-name> 과 <param-value> 라는서브엘 리먼트를쓰면된다. <web-app... > <context-param> <param-name>db_name</param-name> <param-value>malldb</param-value> </context-param> </web-app> 웹애플리케이션의초기화파라미터 파라미터의이름 파마미터의값 String str = application.getinitparameter( DB_NAME ); 초기화파라미터의이름 31/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 웹애플리케이션의초기화파라미터값을가져오는 getinitparameter 메서드 [ 예제 6-9] 웹애플리케이션의초기화파라미터를읽는 JSP 페이지 <%@page contenttype= text/html; charset=euc-kr %> <HTML> <HEAD><TITLE> 웹애플리케이션의초기화파라미터 </TITLE></HEAD> <BODY> 데이터베이스이름 : <%= application.getinitparameter( DB_NAME ) %> <BR> </BODY> </HTML> [ 그림 6-22] 웹애플리케이션의초기화파라미터지정방법 [ 그림 6-23] 예제 6-9 의실행결과 32/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 로그메시지를기록하는 log 메서드 ServletContext 인터페이스의 log 메서드를이용하면로그파일에메시지를기록할수있다. log 메서드를호출할때는다음과같이파라미터로로그메시지를넘겨주어야한다. application.log( 인사하기 JSP 페이지가호출되었습니다. ); 로그메시지 log 메서드는파라미터로넘겨준메시지를톰캣의설치디렉터리아래의 logs 라는이름 의서브디렉터리안의 localhost.yyyy-mm-dd.log 라는이름의파일에기록한다. 33/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 로그메시지를기록하는 log 메서드 [ 예제 6-10] log 메서드의사용예를보여주는 JSP 페이지 <%@page contenttype= text/html; charset=euc-kr %> <HTML> <HEAD><TITLE> 인사하기 </TITLE></HEAD> <BODY> 안녕하세요, <%= request.getparameter( NAME ) %> 님 <% application.log( [ 인사하기 ] JSP 페이지가호출되었습니다. ); %> </BODY> </HTML> 로그파일에기록을합니다 [ 그림 6-24] 예제 6-10 의실행결과 34/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 같은웹애플리케이션에속하는웹컴포넌트들끼리데이터를주고받는방법 ServletContext 인터페이스의 setattribute, getattribute, removeattribute 메서드는같은웹애플리케이션디렉터리에있는웹컴포넌트들끼리데이터를공유할수있도록만드는메서드이다. setattibute 메서드는웹애플리케이션에할당된공유데이터영역에데이터를저장하는기능을한다. setattribute 메서드는그영역에있는데이터를읽어오는기능을한다. removeattribute 메서드는그영역의데이터를삭제하는기능을한다. application.setattribute( ID, lee77 ); 데이터이름 데이터값 String str = (String) application.getattribute( ID ); application.removeattribute( ID ); 데이터이름 35/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 같은웹애플리케이션에속하는웹컴포넌트들끼리데이터를주고받는방법 [ 예제 6-11] 웹애플리케이션의데이터영역에데이터를저장하는 JSP 페이지 <%@page contenttype= text/html; charset=euc-kr %> <% String name = request.getparameter( NAME ); application.setattribute( NAME, name); %> <HTML> <HEAD><TITLE> 웹애플리케이션데이터저장하기 </TITLE></HEAD> <BODY> NAME 데이터가저장되었습니다. </BODY> </HTML> [ 예제 6-12] 웹애플리케이션의데이터영역으로부터데이터를읽어오는 JSP 페이지 <%@page contenttype= text/html; charset=euc-kr %> <HTML> <HEAD><TITLE> 웹애플리케이션데이터조회하기 </TITLE></HEAD> <BODY> 이름 : <%= application.getattribute( NAME ) %> </BODY> </HTML> 36/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 같은웹애플리케이션에속하는웹컴포넌트들끼리데이터를주고받는방법 [ 예제 6-13] 웹애플리케이션의데이터영역에있는데이터를삭제하는 JSP 페이지 <%@page contenttype= text/html; charset=euc-kr %> <% application.removeattribute( NAME ); %> <HTML> <HEAD><TITLE> 웹애플리케이션데이터삭제하기 </TITLE></HEAD> <BODY> NAME 데이터가삭제되었습니다. </BODY> </HTML> [ 그림 6-26] 예제 6-11, 예제 6-12, 예제 6-13 의실행결과 37/38
4. 서블릿의환경을표현하는 ServletContext 객체 v 웹애플리케이션에관련된파일경로명을가져오는메서드 ServletContext 인터페이스에는웹애플리케이션의 URL 경로명을리턴하는 getcontextpath 라는메서드도있다. String apppath = application.getcontextpath(); 웹애플리케이션의 URL 경로명을리턴하는메서드 ServletContext 인터페이스의 getrealpath 메서드는웹애플리케이션디렉터리내의파 일경로명을파일시스템전체에대한절대경로명으로바꾸어서리턴하는메서드이다. String absolutepath = application.getrealpath( /sub1/intro.html ); 웹애플리케이션내에서의파일경로명 38/38
뇌를자극하는 JSP & Servlet