프로그래밍/JSP Servlet

JSP/Servlet - init 메소드와 destroy 메소드 사용하기

가카리 2016. 1. 3. 22:15
반응형

1. init 메소드 사용하기

서블릿에서 init 메소드를 작성하면 서블릿이 초기화할 때 init메소드가 호출됩니다.

 

다음 예제는 init 메소드 사용 방법입니다.

 

 

위와 같이 서블릿 파일 한 개를 작성합니다.

 

 

FibonacciServlet.java

 

package com.exam.kch;

 

import java.io.IOException;

import java.io.PrintWriter;

import java.math.BigInteger;

 

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

/**

* Servlet implementation class FibonacciServlet

*/

@WebServlet("/FibonacciServlet")

public class FibonacciServlet extends HttpServlet {

    private BigInteger arr[];

    

    //다음 init 메소드가 서블릿이 초기화할 반드시 호출된다.

    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]);

    }

    

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)

            throws ServletException, IOException {

        String str = req.getParameter("NUM");

        int num = Integer.parseInt(str);

        if(num > 100)

            num = 100;

        resp.setContentType("text/html;charset=euc-kr");

        PrintWriter out = resp.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>");

        

        

    }

}

 

 

실행 화면

다음과 같이 피보나치 수열이 잘 출력됩니다.

 

 

2. destroy 메소드 사용하기

 

init 메소드와 작성 방법이 비슷합니다. destroy 메소드는 서블릿의 마무리 작업 단계에서 웹컨테이너에 의해 자동으로 호출됩니다.

 

이번 예제는 다음 2개의 파일을 작성합니다.

 

InputName.html

 

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<title>Insert title here</title>

</head>

<body>

    이름을 입력하세요.<br>

    <form action=GreetingServlet>

        이름: <input type=text name=NAME>

        <input type=submit value='확인'>

    </form>

</body>

</html>

 

GreetingServlet.java

 

package com.exam.kch;

 

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.GregorianCalendar;

 

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

/**

* Servlet implementation class GreetingServlet

*/

@WebServlet("/GreetingServlet")

public class GreetingServlet extends HttpServlet {

    private PrintWriter logFile;

    @Override

    public void init() throws ServletException {

        try{

            

            logFile = new PrintWriter(new FileWriter("C:\\Users\\kch\\Documents\\log.txt", true));//파일 열기

        

        }catch(IOException e){

            throw new ServletException(e);

        }

    }

    

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)

            throws ServletException, IOException {

        String name = req.getParameter("NAME");

        String greeting = "안녕하세요, " + name + ".";

        

        if(logFile != null){

            GregorianCalendar now = new GregorianCalendar();

            logFile.printf("%TF %TT - %s %n", now, now, name);//파일에 쓰기

        }

        

        resp.setContentType("text/html;charset=euc-kr");

        PrintWriter out = resp.getWriter();

        out.println("<HTML>");

        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();//파일을 닫습니다.

    }

}

 

 

실행 화면

InputName.html 을 먼저 실행하시고 다음과 같이 입력하면

 

다음과 같이 잘뜨는 것을 볼 수 있습니다.

 

저장한 경로의 파일을 열어보면 잘 저장된 것을 볼 수 있습니다. 파일에 저장이 안되면 close()메소드가 아직 호출안되서 그런것이니 서버를 restart 해주자.

반응형