세션 예제

    sessionInit.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- 
    	1. 세션(Session)
    		- 웹 페이지들 사이의 공유 정보를 서버의 메모리에 저장해 놓고 사용하는 방법
    	2. 세션의 특징
    		- 정보가 서버의 메모리에 저장
    		- 쿠키보다 보안에 유리
    		- 브라우저(사용자)당 한개의 세션(sessionId)이 생성됨.
    		- 세션은 유효 시간을 가짐(30분)
    		- 로그인 상태 유지 기능이나 소핑몰은 장바구니 담기 기능들에 주로 사용됨.
     -->
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>세션만들기</title>
    </head>
    <body>
    	<%
    		//세션의 속성을 지정하는 코드
    		session.setAttribute("gumi", 202102);
    		session.setAttribute("zoom", "jsp");
    		session.setAttribute("daegu", "mysql");
    		
    		/* 스크립트릿으로 내부객체인 session객체를 이용하여 값을 설정함
    		   현재 이 jsp파일이 서버에 요청을 하게되면 컨테이너가 jsp파일 서블릿으로 변환함.
    		   =>session객체가 자동으로 생성되면서 컴파일이 이루어진다.*/
    	%>
    	<a href="sessionGet.jsp">세션값 확인</a>
    </body>
    </html>

     

    sessionGet.jsp

    <%@page import="java.util.Enumeration"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>세션 값 확인</title>
    </head>
    <body>
    	<%  
    		/* 
    			세션에 저장한 각 속성의 Name에 대한 value를 출력함.
    			=> session의 getAttribute()의 변환타입이 Object타입이라서
    			강제로 다운케스팅 했다.
    		*/
    		Object obj1 = session.getAttribute("gumi"); //속성값 얻기
    		Integer intValue = (Integer)obj1; //downcasting
    		out.print("gumi : " +intValue+ "<br/>"); //출력
    		
    		Object obj2 = session.getAttribute("zoom"); //속성값 얻기
    		String str = (String)obj2; //downcasting
    		out.print("zoom : " +str+ "<br/>"); //출력
    	%>
    	<br/>
    	
    	<%
    		out.println("==============================================<br/>");
    		
    		String sName;
    		String sValue;
    		
    		Enumeration<String> enumeration = session.getAttributeNames();
    		
    		//가져올 데이터가 있느냐?
    		while(enumeration.hasMoreElements()){
    			sName = enumeration.nextElement(); //있으면 가져와라
    			sValue = session.getAttribute(sName).toString();
    			
    			out.println("sName : " +sName+ "<br/>");
    			out.println("sValue : " +sValue+ "<br/>");
    		}
    		
    		out.println("==============================================<br/>");
    		
    		/* 
    			sessionId는 웹브라우저당 하나가 생기는 유니크한 값임.
    			당연히 서버에서 생성해준다.
    			
    		*/
    		String sessionId = session.getId();
    		out.println("sessionId : " +sessionId+ "<br/>");
    		
    		out.println("==============================================<br/>");
    		int sessionInterval = session.getMaxInactiveInterval();
    		out.println("세션 유효시간(초) : " +sessionInterval+ "<br/>");
    	
    		out.println("==============================================<br/>");
    		//gumi세션의 특정한 값을 삭제하는 코드
    		//session.removeAttribute("gumi");
    		
    		//세션의 모든값 삭제 (로그아웃에 활용)
    		session.invalidate();
    		
    		//유효한 세션id가 있는지 알아보는 코드
    		if(request.isRequestedSessionIdValid()){
    			out.println("session valid");
    		}
    		else {
    			out.println("session Invalid");
    		}
    		
    	%>
    </body>
    </html>


    세션을 이용한 로그인 예제

     

    session_login.html

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>로그인 페이지</title>
    </head>
    <body>
    	<h1>로그인 페이지입니다.</h1>
    	<form action="session_loginOk.jsp" method="post">
    		아이디 : <input type="text" name="id" size="12" required="required" /><br/>
    		비밀번호 : <input type="password" name="pw" size="12" required="required" /><br/>
    		
    		<input type="submit" value="로그인" />
    		<input type="reset" value="초기화" />
    	</form>
    </body>
    </html>

     

    session_loginOk.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>로그인 확인</title>
    </head>
    <body>
    	<%!
    		String id, pw;
    	%>
    	
    	<%	
    		request.setCharacterEncoding("UTF-8");
    		id = request.getParameter("id");
    		pw = request.getParameter("pw");
    		
    		/* 
    			지금은 DB를 설정하지 않아서 아래와 같이 코드 작성함.
    			추후 DB연동하고 난뒤 코드 볁경.
    		*/
    		if(id.equals("gumi") && pw.equals("202101")) {
    			
    			//세션으로 로그인정보 저장됨.
    			session.setAttribute("id", id);
    			System.out.println("session_loginOk.jsp 파일 지나감");
    			 
    			
    			//로그인 성공하면 sendRedirect() 이용하여 login_success.jsp파일로 이동. 
    			response.sendRedirect("session_login_success.jsp"); 
    		}
    		else {
    			//로그인 실패하면 sendRedirect() 이용하여 login_fail.jsp파일로 이동. 
    			response.sendRedirect("session_login_fail.jsp");
    		}
    	%>
    </body>
    </html>

     

    session_login_success.jsp

    <%@page import="java.util.Enumeration"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>로그인 성공</title>
    </head>
    <body>
    	<%
    		request.setCharacterEncoding("UTF-8");
    	
    		Enumeration<String> enumeration = session.getAttributeNames();
    		while(enumeration.hasMoreElements()){
    			String sName = enumeration.nextElement();
    			String sValue = (String)session.getAttribute(sName); //downcasting
    			
    			//DB연동이되면 직접 사용자와 비교하는 코드로 바꾸어야 한다.
    			if(sValue.equals("gumi")){
    				out.println(sValue +"님 안녕하세요!"+"<br/>");
    			}
    		}
    	%>
    	<h1>환영합니다.</h1>
    	<a href="session_logout.jsp">로그아웃</a>
    	
    	<script type="text/javascript">
    		alert("로그인 성공");
    	</script>
    </body>
    </html>

     

    session_login_fail.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>로그인 실패</title>
    </head>
    <body>
    	<!-- 자바스크립트 alert함수 이용해서 메시지 창 띄우고
    		 다시 login.html 파일로 이동시킴 -->
    	<script type="text/javascript">
    		alert("로그인 실패");
    		location.href="session_login.html";
    	</script>
    </body>
    </html>

     

    session_logout.jsp

    <%@page import="java.util.Enumeration"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>로그아웃</title>
    </head>
    <body>
    	<%
    		Enumeration<String> enumeration = session.getAttributeNames(); //현재 있는 세션 다 불러옴
    		while(enumeration.hasMoreElements()){
    			String sName = enumeration.nextElement();
    			String sValue = (String)session.getAttribute(sName);
    			
    			if(sValue.equals("gumi")){
    				out.print(sValue + "님이 로그아웃 하셨습니다." + "<br/>");
    				session.removeAttribute(sName);
    			}
    		}
    	%>
    	<br/><br/>
    	<a href="sessionCheck.jsp">세션 확인</a>
    </body>
    </html>

     

    sessionCheck.jsp

    <%@page import="java.util.Enumeration"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <!-- 
    	소결론 -- 쿠키와 세션의 차이점(중요)
    	
    	쿠기 : 보안에 취약(로컬 PC에 저장되기 때문에)
    	---------------------------------------------
    	세션 : 1)서버에 객체로 존재함.
    		   2)보안에 강함, JSP를 통해서만 접근 가능함.
    		   3)여러 클라이언트가 접속하므로
    		   	 한 클라이언트에 하나의 세션 생성하고 세션아이디를 부여함
    		   4)세션아이디로 어느 클라이언트에서 요청이 들어오는지
    		     서버는 구별할수 있게됨.
    		   5)현업에서 세션 많이 사용함.
     -->    
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>세션 확인</title>
    </head>
    <body>
    	<h1>세션 속성이 삭제된 것을 확인하는 sessionCheck.jsp페이지 입니다.</h1>
    	
    	<%
    		Enumeration<String> enumeration = session.getAttributeNames(); //현재 있는 세션 다 불러옴
    		
    		int i = 0;
    		while(enumeration.hasMoreElements()){
    			i++;
    			String sName = enumeration.nextElement();
    			String sValue = (String)session.getAttribute(sName);
    			
    			out.println("sName : " +sName+ "<br/>" );
    			out.println("sValue : " +sValue+ "<br/>" );
    		}
    		//세션의 값이 많을경우 invalidate() 사용
    		//session.invalidate();
    		
    		if(i==0){
    			out.println("해당 세션이 삭제되었습니다.");
    		}
    	%>
    </body>
    </html>


    예외 페이지

    page지시자를 이용한 예외 처리

    error_image.zip
    0.34MB

    exceptionTest.jsp

    <!-- 현재 이 페이지에서 예외가 발생하면 페이지 지시자에 있는 속성중 errorPage로 설정한 페이지로
    이동하라는 지시자의 내용이다.-->
    <%@ page errorPage="exceptionPage.jsp" %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>예외 테스트</title>
    </head>
    <body>
    	<%
    		//모든 수는 0으로 나눌수 없기에 Arithmetic 예외발생됨.
    		int i = 100 / 0;
    	%>
    </body>
    </html>

     

    exceptionPage.jsp

    <!-- 페이지 지시자 이용해서 isErrorPage속성을 true로 설정했다. 
    설정을 해줘야 exception객체를 참조하여 예외 메시지를 활용할수 있음.-->
    <%@ page isErrorPage="true" %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>예외 페이지</title>
    </head>
    <body>
    	<%	
    		/* 200이라는 값은 정상적인 페이지를 의미한다. 이와 같이 지정하지 않으면
    		컨테이너가 500으로 설정하는 경우가 있다.*/
    		response.setStatus(200);
    		response.setCharacterEncoding("UTF-8");
    	%>
    	<h1>죄송합니다. 서비스 실행 중 오류가 발생했습니다.</h1>
    	<h1>장시 후 다시 시도해 주세요.</h1>
    	<img alt="" src="image/error_image.png">
    	<%-- <%=exception.getMessage() %> --%>
    </body>
    </html>


     

    액션 태그?

    액션태그는 JSP페이지 내에서 어떤 동작을 하도록 지시하는 테그이다.(흐름 제어기능)

    예를 들면 이동, 페이지 include(포함) 등 이다.

    forward(이동), include(포함), param(데이터 넘김) 태그가 주로 사용된다.

    url은 그대로 유지 코드만 불러온다.

     

    액션 태그 예제

    main.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>메인 페이지</title>
    </head>
    <body>
    	<!-- h1태그 부분은 잠깐 출력은 될 것이다. 육안으로 확인 안된다. 
    	forword 액션 태그를 이용하여 sub.jsp페이지로 이동하라고 코딩했다. -->
    	<h1>main.jsp 페이지 입니다.</h1>
    	<%
    		System.out.println("sub.jsp페이지 이동하기 전 main.jsp페이지 입니다.");
    		//sendRedirect()는 URL 주소가 바뀐다.
    		//response.sendRedirect("sub.jsp");
    	%>
    	
    	<!-- forword 액션태그 : URL 주소는 main.jsp로 변하지 않고, 페이지 이동만 일어나서 
    	사용자에게 보여주는 페이지는 sub.jsp페이지가 된다. forword액션태그의 특징이다. -->
    	<jsp:forward page="sub.jsp"/>
    	
    </body>
    </html>

     

    sub.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>서브 페이지</title>
    </head>
    <body>
    	<h1>sub.jsp페이지 입니다.</h1>
    </body>
    </html>


    include 액션태그

    현재 페이지에 다른 페이지를 삽입할 때 사용 합니다, (포함)

    page속성 값은 현제 JSP페이지 내에 포함할 내용을 가진 외부 파일명이다.

    param 액션태그

    forward 액션 태그의 바디에 사용하는 액션 태그 프로그램 제어가 이동할 JSP 페이지에 값을 전달할 때 사용

     

    forward, param 액션 태그 예제

     

    forward_param.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>forward 태그, param 태그 테스트</title>
    </head>
    <body>
    	<h1>forward_param.jsp페이지 입니다.</h1>
    	
    	<%
    		System.out.println("sub.jsp페이지 이동하기 전 forward_param.jsp페이지 입니다.");
    	%>
    	
    	<!-- forward액션태그를 이용하고 그안에 다시 jsp:param액션태그를 이용하여 파라미터들을 전달하고 있음.
    	페이지 이동에 있어서 내부객체인 request객체는 서로 공유하기 때문에 forward_param_result.jsp
    	페이지에서 request를 이용하여 파라미터값을 참조하면 된다.-->
    	<jsp:forward page="forward_param_result.jsp">
    		<jsp:param value="gumi" name="id"/>
    		<jsp:param value="202101" name="pw"/>
    	</jsp:forward>
    </body>
    </html>

     

    forward_param_result.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>파라미터 확인</title>
    </head>
    <body>
    	<h1>forward_param_result.jsp페이지 입니다.</h1>
    	
    	<%!
    		String id, pw;
    	%>
    	
    	<%
    		id = request.getParameter("id");
    		pw = request.getParameter("pw");
    	%>
    	id값 : <%=id %><br/>
    	pw값 : <%=pw %><br/>
    </body>
    </html>


    폼태그와 포워드 예제

    forward_form.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>폼태그와 포워드</title>
    </head>
    <body>
    	<h1>포워드와 폼을 이용한 테스트입니다.</h1>
    	
    	<form action="forward_form_result01.jsp" method="post">
    		<!-- hidden 타입 : 사용자로부터 입력을 받지 않음. 특정값을 지정해 숨겨서 페이지로 값을 전달하는 타입이다. -->
    		<input type="hidden" name="forwardPage" value="forward_form_result02.jsp">
    		
    		<table border="1" bgcolor="yellow">
    			<tr>
    				<td>이름</td>
    				<td><input type="text" name="name"></td>
    			</tr>
    			<tr>
    				<td>나이</td>
    				<td><input type="number" name="age"></td>
    			</tr>
    			<tr>
    				<td>주소</td>
    				<td><input type="text" name="address"></td>
    			</tr>
    			<tr>
    				<td><input type="submit" value="전송하기"></td>
    			</tr>
    		</table>
    	</form>
    </body>
    </html>

     

    forward_form_result01.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>폼테그와 포워드 결과1</title>
    </head>
    <body>
    	<%
    		request.setCharacterEncoding("UTF-8");
    		System.out.println("forward_form_result01.jsp 지나감.");
    	%>
    	
    	<jsp:forward page='<%=request.getParameter("forwardPage") %>'>
    		<jsp:param value="000-0000-0000" name="tel"/>
    	</jsp:forward>
    	
    	<!-- forward액션태그 이용해서 앞 forward_form.jsp에서 form태그로 요청한 hidden속성을 저장한 값으로
    	페이지 이동 시킴, 추가로 param액션태그를 이용한 tel값을 같이 넘기고 있다.
    	여기서 넘어온 값을 가져가기 위한 것은 스크립트릿 양옆에 ''으로 감싸야 넘어온다.-->
    </body>
    </html>

     

    forward_form_result02.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>폼테그와 포워드 결과2</title>
    </head>
    <body>
    	<h1>포워드 된 페이지(forward_form_result02.jsp)</h1>
    	
    	<% request.setCharacterEncoding("UTF-8"); %>
    	
    	<!-- forward_form.jsp파일에서 입력받은 부분을 출력하고 있다. -->
    	<!-- 폼테그를 이용해서 데이터전송하면 URL이 바뀌고, forward액션태그는 URL이 바뀌지 않는다.
    	forward 액션태그는 제어권을 포워딩되는 페이지로 완전히 넘기고 그 페이지가 끝이 나면 모든
    	응답을 종료함. -->
    	<table border="1" bgcolor="yellow">
    		<tr>
    			<td>이름</td>
    			<td><%= request.getParameter("name") %></td>	
    		</tr>
    		<tr>
    			<td>나이</td>
    			<td><%= request.getParameter("age") %></td>	
    		</tr>
    		<tr>
    			<td>주소</td>
    			<td><%= request.getParameter("address") %></td>	
    		</tr>
    		<tr>
    			<!-- 전화번호의 경우는 forward_form_result01.jsp파일에서 param액션태그로 넘어온 값이다. -->
    			<td>전화번호</td>
    			<td><%= request.getParameter("tel") %></td>	
    		</tr>
    	</table>
    </body>
    </html>

     

     


    쿠키와 세션의 차이점(중요)

    쿠기 : 보안에 취약(로컬 PC에 저장되기 때문에)
    ------------------------------------------------------- 
    세션 : 1)서버에 객체로 존재함.
       2)보안에 강함, JSP를 통해서만 접근 가능함.
       3)여러 클라이언트가 접속하므로
         한 클라이언트에 하나의 세션 생성하고 세션아이디를 부여함
       4)세션아이디로 어느 클라이언트에서 요청이 들어오는지
         서버는 구별할수 있게됨.
       5)현업에서 세션 많이 사용함.

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading