프로그래밍/JSP Servlet

JSP/Servlet - 서블릿 클래스에서 세션 기술 사용 방법

가카리 2015. 12. 27. 22:45
반응형

서블릿 클래스에서 세션 기술을 사용하는 방법

 

doGet, doPost 메소드의 HttpServletRequest 파라미터에 대해 getSession이라는 메소드를 호출해야 합니다.

 

이 메소드는 세션 정보를 포함하는 javax.servlet.http.HttpSession 타입의 객체를 리턴합니다.

 

    HttpSession session = request.getSession();

 

HttpSession 객체에 대해 setAttribute라는 메소드를 호출하면 세션 데이터 영역에 데이터를 저장할 수 있습니다.

 

이 중 데이터 이름은 반드시 String 이어야 하고 데이터는 객체이기만 하면 됩니다.

 

    session.setAttribute("ID", "abc1234");

 

setAttribute 메소드는 같은 이름의 데이터가 이미 있으면 기존 값을 지우고 새로운 값을 입력하므로 데이터 수정 기능을 구현하기 위해서도 사용됩니다.

 

다른 웹 컴포넌트에서 세션데이터를 읽으려면 HttpSession가 필요한데 그럴 경우에도 getSession 메소드를 이용해서 이 객체를 구할 수 있습니다.

 

이렇게 구한 HttpSession 객체에 대해 getAttribute라는 메소드를 호출하면 세션 데이터 영역의 데이터를 가져올 수 있습니다.

 

    String str = (String)session.getAttribute("ID");

 

HttpSession 객체를 이용하면 세션 데이터를 삭제할 수도 있습니다. removeAttribute메소드를 호출해서 할 수 있는데 다음과 같이 사용합니다.

 

    session.removeAttribute("ID");

 

세션을 이용해서 할 일을 모두 마치고 나면 invalidate라는 메소드를 호출해서 세션을 끝낼 수 있습니다.

 

이 메소드는 HttpSession객체에 대해 호출해야 하고, 호출 방법은 다음과 같습니다.

 

    session.invalidate();//세션 끝내기

 

세션 데이터는 같은 웹 애플리케이션 디렉터리에 있는 웹 컴포넌트들끼리만 공유할 수 있습니다.

 

예제 구성은 다음과 같습니다.

 

예제 Food.html

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<title>Insert title here</title>

</head>

<body>

    좋아하는 음식은?

    <form action=AnimalServlet>

        <input type=text name='FOOD'>

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

    </form>

</body>

</html>

 

AnimalServlet.java

package com.exam.kch;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

 

public class AnimalServlet extends HttpServlet {

    @Override

    protected void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        String food = request.getParameter("FOOD");//가져옴

        HttpSession session = request.getSession();//세션 시작

        session.setAttribute("FOOD", food);//세션 설정

        

        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("좋아하는 동물은?<BR>");

        out.println("<FORM ACTION=ResultServlet>");

        out.println("<INPUT TYPE=TEXT NAME=ANIMAL>");

        out.println("<INPUT TYPE=SUBMIT VALUE='확인'>");

        out.println("</FORM>");

        out.println("</BODY>");

        out.println("</HTML>");

    }

        

    

}

 

ResultServlet.java

package com.exam.kch;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

 

public class ResultServlet extends HttpServlet {

    

    @Override

    protected void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        HttpSession session = request.getSession();

        String food = (String) session.getAttribute("FOOD");//FOOD 세션 데이터 가져옴

        String animal = request.getParameter("ANIMAL");//ANIMAL파라미터 가져옴

        session.invalidate();//세션 종료

        

        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("테스트");

        out.printf("당신은 %s %s 좋아합니다.", food, animal);

        out.println("</BODY>");

        out.println("</HTML>");

        

    }

}

 

 

실행 화면

Food.html 화면

AnimalServlet.java화면

 

ResultServlet.java화면

 

 

 

반응형