일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- springboot
- loadcomplete
- NextJs
- tortoise SVN
- Next.js
- tomcat
- typeorm
- Spring
- JSP
- exit code = -805306369
- BRIN
- orioledb
- maven
- PG-Strom
- Windows 10
- PostgreSQL
- NestJS
- Eclipse
- Spring Boot
- HTML Code
- Java
- Spring Cloud
- Can't load AMD 64-bit .dll on a IA 32-bit platform
- Maven Project
- MariaDB
- OGM
- STS
- graph database
- HTML Special Entity
- 서브라임 텍스트
- Today
- Total
Undergoing
서블릿의 Life Cycle 본문
서블릿의 생명 주기
(출처 : http://book.javanb.com/java-server-pages-2nd/0321150791_ch11lev1sec1.html)
웹 컨테이너에서는 다음과 같은 작업이 수행됨
1. 서브릿 클래스 읽음
2. 인스턴스화 되어 서블릿 객체 생성
3. 초기화 작업을 거친 후 서블릿 탄생 => 이 서블릿은 웹 브라우저로부터 호출 처리가 됨
4. 더 이상 사용되지 않는 서블릿은 제거됨
- init : 서블릿의 초기화 작업이 수행될 때 자동으로 호출되는 메서드
=> public void init() throws ServletException(){}
- destroy : 서블릿의 마무리 작업이 수행될 때 자동으로 호출되는 메서드
=> public void destroy(){}
------------------------------------------------- Servlet Part -------------------------------------------------
init 메서드를 이용한 자원 절약 예시(이 소스코드로는 인지하기 힘듦)
fibonacci.java <= Servlet |
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.math.BigInteger; public class fibonacci 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 ServletException, IOException { request.setCharacterEncoding("euc-kr"); response.setCharacterEncoding("euc-kr"); 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>"); out.println(" <BODY>"); for(int cnt = 0 ; cnt < num ; cnt++) out.println(arr[cnt] + " "); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } } |
destroy 메서드를 활용한 이름입력/로그저장 프로그램
YourName.html |
<html> <head> <title>이름 입력</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=EUC-KR">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head>
<body> <h3>이름을 입력하십시오.</h3> <form action = greeting> 이름 : <input type = text name = NAME> <input type = submit value = '확인'> </form> </body> </html> |
GreetingServlet.java <= Servlet |
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:\\exer\\ch6\\data\\log.txt", true)); } catch(IOException e) { throw new ServletException(e); } }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("NAME"); String greeting = "안녕하세요, " + name + "님."; if(logFile != null) { GregorianCalendar now = new GregorianCalendar(); logFile.printf("%TF %TT - %s %n", now, now, name); } request.setCharacterEncoding("euc-kr"); response.setCharacterEncoding("euc-kr");
response.setContentType("text/html;charset = euc-kr"); PrintWriter out = response.getWriter(); out.println("<HTML>"); out.println(" <HEAD><TITLE>인사하긔</TITLE></HEAD>"); out.println(" <BODY>"); out.println(greeting); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } public void destroy() { if(logFile != null) logFile.close(); } } |
지정된 경로에 저장되는 log.txt에는 입력한 날짜와 입력된 값이 저장됨
2012-05-14 10:59:34 - null
2012-05-14 11:00:12 - null
2012-05-14 11:00:30 - 김을동
2012-05-14 11:00:38 - 김을동
2012-05-14 11:00:58 - 김을동
2012-05-14 11:01:44 - 김발동
2012-05-14 11:01:55 - 김발동
GreetingServlet.java <= Servlet |
. . . 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); } }
. . . |
web.xml도 다음과 같이 변경
<servlet> <servlet-name>Greeting-Servlet</servlet-name> <servlet-class>GreetingServlet</servlet-class> <init-param> <param-name>FILE_NAME</param-name> <param-value>C:\\exer\\ch6\\data\\greeting_log.txt</param-value> </init-param> </servlet> |
DateTime.jsp |
<%@ page contentType = "text/html; charset = euc-kr;" pageEncoding = "euc-kr"%> <%@ page import = "java.io.*, java.util.*"%> <%! private PrintWriter logFile; public void jspInit() { String filename = "c:\\exer\\ch6\\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(); } %> |
실행하면 지정된 폴더에 있는 datetime_log.txt 파일에 기록됨
단, 이 방법은 앞에 있는 Servlet과 마찬가지로 경로를 수정할 때 소스코드를 뜯어야 하는 부담을 가져야 하므로 초기화 파라미터를 이용해 수정이 용이하게 할 수 있음
<web-app> <servlet> <servlet-name>filename-jsp</servlet-name> <jsp-file>/filename.jsp</jsp-file> <---- JSP 페이지의 본래 URL 경로명 <init-param> <param-name>FILE_NAME</param-name> <param-value>filename_txt</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>filename-jsp</servlet-name> <url-pattern>/filename</url-pattern> <---- JSP 페이지의 새로운 URL 경로명 </servlet-mapping> </web-app> |
호출은 [String filename = getinitParameter("FILE_NAME");] <--- FILE_NAME은 초기화 파라미터 이름
'개발 > Web Development' 카테고리의 다른 글
Expression Language (0) | 2012.05.18 |
---|---|
ServletContext (0) | 2012.05.15 |
쿠키 입력과 삭제 (0) | 2012.05.10 |
쿠키와 세션 (0) | 2012.05.10 |
JSP 기초 (0) | 2012.05.08 |