BackEnd

5/22 - Servlet, 쿠키, 세션

Jiwon_Loopy 2025. 6. 1. 16:22
반응형

목차


Servlet Context


  • 서블릿 컨테이너 간의 연동을 위해 사용
  • 어플리케이션마다 존재
  • 기능
    • 서블릿에서 파일 접근
    • 자원 바인딩
    • 로그 파일
    • 컨텍스트에서 제공하는 설정 정보 제공
  • WEB-INF 안에 web.xml 넣고 작성
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<context-param>
	<param-name>name</param-name>
	<param-value>홍길동</param-value>
</context-param>
</web-app>
package sec03.ex01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/second3")
public class SecondServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private String name;
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
		// ServletCOntext (프로젝트 전체)
		ServletContext sc = config.getServletContext();
		// 초기화 파라미터 출력
		name = sc.getInitParameter("name");
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		// request저장소에서 꺼내기
		String name = (String)request.getAttribute("name");
		out.print("dispatch를 이용한 forward 실습입니다. name:"+this.name);
	}

}

Web.xml


  • 초기화 매개변수를 xml에 작성하여 넣어줄 수 있음
  • 외부에서 넣어줄 수 있음
  • init-param 태그 안에 매개변수를 설정
    • <param-name>
      • 파라미터 키 값
    • <param-value>
      • 파라미터 밸류 값

web.xml이란 무엇인가?

Servlet Config


  • 각 Servlet 객체에 대해 생성
  • 기능
    • ServletContext 객체를 얻음
    • 서블릿에 대한 초기화
  • initParam
    • 초기화 파라미터
  • value
    • 기본 파라미터
  • urlPatterns
    • 기본 파라미터

쿠키


  • 쿠키
    • 사용자 PC(파일)에 저장, 문자열
    • 정보가 클라이언트 PC에 저장
    • 저장 정보 용량에 제한이 있음
      • 파일은 4KB
    • 보안이 취약
    • 클라이언트 브라우저에서 사용 유무 설정 가능
    • 도메인당 쿠키가 만들어짐 (웹 사이트 하나에 쿠키 1개)
  • 종류
    • Persistence 쿠키
      • 파일로 저장
      • 쿠키를 삭제하거나 쿠키 설정 값이 종료된 경우
      • 최초 접속 시 서버로 전송
      • 로그인 유무, 팝업창 제한
    • Session 쿠키
      • 브라우저 메모리에 생성
      • 브라우저 종료한 경우 만료
      • 최초 접속 시 서버로 전송되지 않음
      • 사이트 접속 시 Session 인증 정보 유지
  • 쿠키 Set
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class SetCookie
 */
@WebServlet("/set")
public class SetCookie extends HttpServlet {
	private static final long serialVersionUID = 1L;
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter pw = response.getWriter();
		Date d = new Date();
		Cookie c = new Cookie("cookieTest", URLEncoder.encode("JSP 프로그래밍 입니다.","utf-8"));
		c.setMaxAge(24*60*60);
		pw.print("현재 시간 : "+ d);
		pw.println("문자열을 쿠키에 저장합니다");
		response.addCookie(c);
	}

}

  • 쿠키 Get
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/get")
public class GetCookie extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter pw = response.getWriter();
		Cookie[] allValues = request.getCookies();
		for(int i = 0; i< allValues.length;i ++) {
			if(allValues[i].getName().equals("cookieTest")) {
				pw.print("<h2>쿠키 값 가져오기" + URLDecoder.decode(allValues[i].getValue(),"utf-8"));
			}
		}
	}

}

세션


  • 서버 메모리에 저장, object
  • 세션 트래킹
    • 다른 페이지 이동 시 세션이 유지가 어려움
    • 예를 들어 미리 로그인하지 않고 새 글 작성을 누르면 로그인 해야하는 경우
    • 웹 페이지 연결 기능
  • 웹 페이지 연동 방법
    • <hidden>
    • URL Rewriting
    • 쿠키
    • 세션
  • web.xml에 <session-config> 태그 내에 <session-time>으로 분을 주면 모든 세션이 기입한 시간만큼 유지
  • 개별 쿠키 시간을 지정해도 web.xml이 우선순위가 더 높다.

메모


  • 속성값
    • setAtrribute
    • getAttribute
    • removeAttribute
728x90
반응형