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>
- 파라미터 밸류 값
- <param-name>
Servlet Config
- 각 Servlet 객체에 대해 생성
- 기능
- ServletContext 객체를 얻음
- 서블릿에 대한 초기화
- initParam
- 초기화 파라미터
- value
- 기본 파라미터
- urlPatterns
- 기본 파라미터
쿠키
- 쿠키
- 사용자 PC(파일)에 저장, 문자열
- 정보가 클라이언트 PC에 저장
- 저장 정보 용량에 제한이 있음
- 파일은 4KB
- 보안이 취약
- 클라이언트 브라우저에서 사용 유무 설정 가능
- 도메인당 쿠키가 만들어짐 (웹 사이트 하나에 쿠키 1개)
- 종류
- Persistence 쿠키
- 파일로 저장
- 쿠키를 삭제하거나 쿠키 설정 값이 종료된 경우
- 최초 접속 시 서버로 전송
- 로그인 유무, 팝업창 제한
- Session 쿠키
- 브라우저 메모리에 생성
- 브라우저 종료한 경우 만료
- 최초 접속 시 서버로 전송되지 않음
- 사이트 접속 시 Session 인증 정보 유지
- Persistence 쿠키
- 쿠키 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
반응형