빅데이터 서비스 교육/JSP Servlet

JSP Session

Manly 2022. 5. 13. 17:47
반응형

 

서버에 부담이 덜한 Cookie / Session에는 정말 필요한 정보만 저장 (서버에 부담을 덜기 위해)

 

 

세션에서 꺼내서 사용할 때 반드시 다운캐스팅 해야한다

 

 

 

 

 

 

 

세션 생성, 수정, 삭제

ex05createSession.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>
<h1>세션 생성</h1>
<%
 // 세션 데이터 저장하기
 // 1. 세션 객체 생성
 // HttpSession session = request.getSession();
 // JSP 내장객체에 session이 포함되어있음
 // JSP파일에서는 객체생성 스킵가능
 
 // 2. 세션에 데이터 저장하기
 // setAttribute("Name",(Object)value);
 // 저장할 때 업캐스팅
 session.setAttribute("int", 100);
 
 session.setAttribute("str", "세션에 값 저장하기");

 ArrayList<String> list = new ArrayList<String>();
 list.add("str1");
 list.add("str2");
 list.add("str3");
 list.add("str4");
 list.add("str5");
 
 session.setAttribute("list", list);

%>
<a href="ex06selectSession.jsp">세션 조회</a>
</body>
</html>

ex06selectSession.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>
<h1>세션 조회</h1>
<%
// 세션에서 데이터 꺼내오기
// 1. 세션 객체 생성
// 2. 데이터 꺼내기
// session.getAttribute("Name");
// 다운캐스팅 필요
// int, char, boolean --> 기본 자료형은 null 저장 불가
// 기본자료형 대신 참조자료형을 사용해야함
// int -> Integer 참조자료형
Integer num = (Integer)session.getAttribute("int");

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

ArrayList<String> list= (ArrayList<String>)session.getAttribute("list");
%>
<p>int : <%=num %></p>
<p>str : <%=str %></p>
<p>list : <%=list %></p>

<a href="ex07updateSession">세션 수정</a>
<a href="ex08removeSession">세션 삭제</a>
<a href="ex09deleteSession">세션 전체 삭제</a>
</body>
</html>

ex07updateSession

package ex0513;

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("/ex07updateSession")
public class ex07updateSession extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		// 세션객체 생성 (jsp에서만 자동으로 생성이다)
		HttpSession session = request.getSession();
		// 세션 수정
		// 같은이름으로 저장하면 덮어쓰기
		
		session.setAttribute("int", 10000);

		// 페이지 이동
		response.sendRedirect("ex06selectSession.jsp");
	
	}

}

ex08removeSession

package ex0513;

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("/ex08removeSession")
public class ex08removeSession 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.removeAttribute("Name"); : 해당 이름의 데이터를 삭제
	session.removeAttribute("str");
	
	// 3. 페이지 이동
	response.sendRedirect("ex06selectSession.jsp");
	}
}

ex09deleteSession

package ex0513;

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("/ex09deleteSession")
public class ex09deleteSession 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.invalidate();
	 
	 // 3. 페이지 이동
	 response.sendRedirect("ex06selectSession.jsp");
	}
}

 

 

각각 세션 생성 / int값 수정 / str값 삭제 / 세션 전체 삭제

 

 

로그인을 하고 아이디/ 비밀번호가 맞으면 main 틀리면 로그인실패 페이지를 만들어보자

STEP1.  id = smhrd  pw = 12345  메인 페이지에서 ex10_login.jsp로 로그인 후 실패시 ex10_loginF.jsp 성공시 다시 메인으로

 

 

 

STEP2.  로그인 성공시 메인페이지가 id,pw, 로그인이 있는 페이지가 아닌 id명, 로그인중, 로그아웃 페이지가 뜨게 만들어보자

 

 

 

 

 

 

ex10_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>

<%
// 세션에서 값 꺼내오기
String id = (String)session.getAttribute("id");
if(id == null){%>
  <h1>로그인</h1>
  <form action="ex10_login.jsp" method="post">
     ID : <input type="text" name="id"> <br>
     PW : <input type="password" name="pw"> <br>
<input type="submit" value="로그인">
</form>

<%}else{%>
		<h1><%=id %>님</h1>
	<p>로그인 중입니다</p>
	<a href="ex10_logout">로그아웃</a>
	
<%}%>

</body>
</html>

ex10_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. 파라미터 수집
	String id = request.getParameter("id");
	String pw = request.getParameter("pw");

	// 2. id = smhrd? 그리고 pw = 12345 가 맞는지?
	String nextPage = "";
	if (id.equals("smhrd") && pw.equals("12345")) {
		nextPage = "ex10_main.jsp";
		// HttpSession session = request.getSession(); 이 jsp에는 자동생성
		session.setAttribute("id", id);
	} else {
		nextPage = "ex10_loginF.jsp";
	}
	response.sendRedirect(nextPage);
	%>
</body>
</html>

ex10_loginF.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>
<h1>로그인 실패</h1>
<p>아이디나 비밀번호를 확인해주세요.</p>
<a href="ex10_main.jsp">로그인 페이지로</a>
</body>
</html>

ex10_logout

package ex0513;

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("/ex10_logout")
public class ex10_logout extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 로그아웃을 위해 session에 저장하고 있던 사용자 데이터 삭제
		// 1. 세션 객체 생성
		HttpSession session = request.getSession();

		// 2. 세션 삭제
		session.removeAttribute("id");

		// 3. 페이지 이동
		response.sendRedirect("ex10_main.jsp");

	}

}

 

Session 복습

Session : 정보유지

세션은 Object타입 -> 모든 데이터 타입 저장가능

(이 과정에서 업캐스팅이 일어나서 꺼내 쓸때 다운캐스팅필요)

 

1. 세션 객체 생성

HttpSession session = request.getSession();

2. 저장

 session.setAttribute("세션명",값);

3. 값 가져오기

 (Object형을 형변환 -> 다운캐스팅)session.getAttribute("세션명");

4. 삭제

 session.removeAttribute("name")

 

로그인 / 로그아웃   

     

반응형

'빅데이터 서비스 교육 > JSP Servlet' 카테고리의 다른 글

JDBC MVC 패턴  (0) 2022.05.18
JSP 내장객체 (Scope) & JDBC & Maven  (0) 2022.05.16
JSP Cookie  (0) 2022.05.12
JSP request, response  (0) 2022.05.11
JSP 지시자, 내장객체  (0) 2022.05.10