Cookie와 Session의 제일 큰 차이점 (저장 데이터 타입)
: Session의 데이터 타입은 Object(최상위 클래스)
Session 장점 : 업캐스팅(자식->부모) 모든 데이터 타입을 전부 저장할 수 있다.
Session 단점 : 모든 데이터를 Object로 저장(저장 단계에서 업캐스팅이 일어남) -> 문제 발생 : 부모클래스인 Object의 기능만 남음, 최상위 객체라 몇 가지 기능이 없다. (저장은 했으나 못 쓰는 형태가 된다 -> 꺼내서 사용하려면 다운 캐스팅이 필요)
Session은 로그인에 많이 쓰인다.
데이터선언, 세션 저장_ jsp)
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// 1. 저장할 데이터
String name = "꼬기";
ArrayList<String> list = new ArrayList<String>();
list.add("복숭아");
list.add("청포도");
list.add("딸기");
// 2. 세션에 저장
// ① 세션 객체 생성
// 내장객체이므로 따로 생성하지 않아도 됨.
// HttpSession session = request.getSession();
// ② 데이터 저장
// .setAttribute("name", object타입으로 저장할 데이터);
// 저장시에 Object타입으로 업캐스팅 => 모든 데이터타입을 저장할 수 있다.
session.setAttribute("name", name);
session.setAttribute("list", list);
// JSP 내장객체의 영역(유효 범위) - Scope
// setArrtribute, getAttribute, removeAttribute는 공통 메소드
// pageContext(page scope)
// : 하나의 jsp페이지 안에서만 유효
pageContext.setAttribute("page", "page scope");
// request(request scope)
// : 한 번의 요청이 출발하고, 응답을 받기 전까지 유효
request.setAttribute("req", "request scope");
// session(session scope)
// : 하나의 브라우저가 열려있는 동안 유효
// application(application scope)
// : 하나의 웹 어플리케이션 내(톰켓서버가 실행되는 동안 어디서든지)
// 모든 사용자에게 같은 정보를 출력시킬 때
application.setAttribute("app", "application scope");
// response.sendRedirect("Ex05SelectSession.jsp");
// Forward
RequestDispatcher rd = request.getRequestDispatcher("Ex05SelectSession.jsp");
rd.forward(request, response);
%>
<a href="Ex05SelectSession.jsp">세션 조회</a>
</body>
</html>
세션 값, scope 데이터 조회_jsp)
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// 1. 세션 값 조회하기
// Object타입으로 저장되기 때문에 다운캐스팅은 필수
String name = (String)session.getAttribute("name");
ArrayList<String> list = (ArrayList<String>)session.getAttribute("list");
// 2. scope에 저장된 데이터 가져오기
// page는 내장객체임.
String page1 = (String)pageContext.getAttribute("page");
// request
// String req = (String)request.getAttribute("req");
// application
String app = (String)application.getAttribute("app");
%>
<h1><%=name %></h1>
<h1><%=list %></h1>
<hr>
<h4><%=page1 %></h4>
<!--
<EL방식>
String req = (String)request.getAttribute("req");
표현식 + req
==> !${name}
-->
<h4>${req}</h4>
<h4><%=app %></h4>
<a href="ex06">세션 수정/삭제</a>
</body>
</html>
데이터 수정, 삭제_java)
package Ex0418;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/ex06")
public class Ex06UpdateSession extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 세션 객체 생성
HttpSession session = request.getSession();
// 2. 세션 데이터 수정
// "꼬기" ==> "참돔"
session.setAttribute("name", "참돔");
// 3. 세션 데이터 삭제
session.removeAttribute("list");
// session.invalidate(); => 세션을 닫아버리는 메소드
response.sendRedirect("Ex05SelectSession.jsp");
}
}
예제) Login
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// 1. 세션에서 사용자의 정보를 꺼내오기
// null => 로그인 X
// id => 로그인 O
String id = (String)session.getAttribute("id");
// 만약에 사용자가 로그인 한 상태라면
// <h1> (id)님 환영합니다. </h1>
// 로그인하지 않았다면
// 로그인 form을 그대로 출력
%>
<% if(id == null){ %>
<h1>로그인</h1>
<form action="ex07" method="post">
아이디 : <input type="text" name="id">
비밀번호 : <input type="number" name="pw">
<input type="submit" value="로그인">
</form>
<%}else { %>
<h1><%=id %>님, 환영합니다.</h1>
<%} %>
</body>
</html>
java
package Ex0418;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/ex07")
public class Ex07Login extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. id, pw 수집
String id = request.getParameter("id");
String pw = request.getParameter("pw");
// 2. 로그인 확인
// 로그인 조건 (아직 db가 없음)
// 만약에 id가 smhrd이고, 비밀번호가 1234와 같다면 로그인 성공
// 그 외 나머지 경우는 실패로 판단
// => console 창에 출력
response.setContentType("text/html ; charset=utf-8");
PrintWriter out = response.getWriter();
if(id.equals("smhrd") && pw.equals("1234")) {
// session에 사용자의 id만 저장
// 1) 세션 객체 생성
HttpSession session = request.getSession();
// 2) 세션에 데이터 저장
session.setAttribute("id", id);
out.print("로그인 성공");
} else {
out.print("로그인 실패");
}
// 3. View 선택
response.sendRedirect("Ex07Login.jsp");
}
}
'Web > JSP_Servlet' 카테고리의 다른 글
MVC_로그인/로그아웃 시스템 (0) | 2023.04.25 |
---|---|
MVC_회원가입 시스템 (0) | 2023.04.24 |
객체실습_html에서 값 입력 후 jsp에서 출력 (1) | 2023.04.19 |
쿠키 (0) | 2023.04.18 |
forward & redirect (0) | 2023.04.18 |
댓글