본문 바로가기
강의/JSP 강의 정리

JSP 강의 정리 10일차

by 리드민 2022. 7. 19.
반응형

[1] 테스트 환경

hardware
cpu : intel i7-7700, gpu : intel hd 630, ram : ddr4 16GB, mainboard : samsung DB400S7A-Z51, secondary storage : 256GB SSD, 1TB HDD
OS
windows pro 64bits
software
jdk version 1.8.0_301
eclipse version 2021-09 (4.21.0)
apache-tomcat version 9.0.54

 

[2] 강의 정리

 

() 세션

  http 프로토콜은 연결되면 요청/응답 후에 바로 연결이 종료된다. 그래서 클라이언트와 서버의 연결을 유지시켜주기 위해서 세션을 사용한다. 쿠키와 비슷하지만 쿠키와 다르게 서버에 저장되기 때문에 보안성이 뛰어나다.

 

() 세션 예제코드

sessionSet.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>
	
	<%
		session.setAttribute("sessionName", "sessionValue");
		session.setAttribute("sessionNumber", 12345);
		
		// 세션객체는 생성하지 않아도 쓸 수 있는 내장객체이다.
		// setAttribute("세션이름", 세션 값);
		// 이름은 String 타입이고 value는 Object 이다.
		
	%>
	
	<p>세션이 생성되었습니다.</p>
	
	<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>Insert title here</title>
</head>
<body>
	
	<%
		Object obj1 = session.getAttribute("sessionName");
		// getAttribute 의 반환타입은 Object 이다.
		
		String sessionNameValue = (String)obj1;
		// Object 타입이므로 캐스팅 해줘야 한다.
		
		out.print("sessionName의 값 : " + sessionNameValue + "<br>");
		
		Object obj2 = session.getAttribute("sessionNumber");
		
		int sessionNumberValue = (Integer)obj2;
		
		out.print("sessionNumber의 값 : " + sessionNumberValue + "<br>");
		
		out.print("------------------------------------------<br>");
		
		String sName;
		String sValue;
		
		Enumeration<String> e = session.getAttributeNames();
		// sesseion에 저장된 이름의 목록을 Enumeration<String> 타입으로 반환
		
		while(e.hasMoreElements()){
			// 요소(데이터)가 있다면 true, 없다면 false 반환
			
			sName = e.nextElement();
			// 다음 요소를 얻는다.
			
			sValue = session.getAttribute(sName).toString();
			
			out.print("세션이름 : " + sName + "<br>");
			out.print("세션 값 : " + sValue + "<br>");
			
		}
		out.print("------------------------------------------<br>");
		
		
		String sessionID = session.getId();
		// 한 브라우저당 고유한 아이디가 생성이 된다.
		// 브라우저별로 생성되어진 세션을 구분할 수 있다.
		out.print("세션 아이디 : " + sessionID + "<br>");
		
		int sessionInter = session.getMaxInactiveInterval(); 
		// 세션의 유효시간 (기본30분)
		out.print("세션의 유효시간 : " + sessionInter + "<br>");
		out.print("------------------------------------------<br>");
		
		session.removeAttribute("sessionName");
		// 세션데이터 삭제 : removeAttribute("세션이름");
		
		e = session.getAttributeNames();
		// Enumeration은 1회성이다. 필요하면 객체를 다시 얻어와야 한다.
		
		while(e.hasMoreElements()){
			
			sName = e.nextElement();
			
			sValue = session.getAttribute(sName).toString();
			
			out.print("세션이름 : " + sName + "<br>");
			out.print("세션 값 : " + sValue + "<br>");
			
		}
		out.print("------------------------------------------<br>");
		
		session.invalidate();
		// invalidate : 세션 무효화
		// 세션의 데이터를 모두 삭제한다.
		
		if(request.isRequestedSessionIdValid()){
			// 유효한 세션이 있으면 true, 없으면 false 반환
			out.print("유효한 세션이 있음<br>");	
		}else{
			out.print("유효한 세션이 없음<br>");
		}
		
		
		
	%>
	
</body>
</html>

 

() 세션 예제코드

sessionLogin.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<!-- 
		로그인폼 만들기 (아이디, 비밀번호)
		sessionLoginCheck.jsp로 전송하기
	 -->
	
	<form action="sessionLoginCheck.jsp" method="post">
	
		아이디 : <input type="text" name="id" size="10"><br>
		비밀번호 : <input type="password" name="pw" size="10"><br>
		<input type="submit" value="로그인">
		
	</form>
	
</body>
</html>

 

sessionLoginCheck.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>
	
	<%--
		넘어온 데이터 받기
		아이디가 sung이고 비밀번호가 1111 이라면 
		session객체에 아이디값으로 세션값 설정하기 ("id", id); 
		리다이렉트로 sessionMain.jsp로 이동시키기
		아이디, 비밀번호가 틀리다면 리다이렉트로 sessionLogin.html로 이동하기
	 --%>
	
	<%
		
		request.setCharacterEncoding("UTF-8");
		
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		
		if(id.equals("sung") && pw.equals("1111")){
			
			session.setAttribute("id", id);
			response.sendRedirect("sessionMain.jsp");
			
		}else{
			response.sendRedirect("sessionLogin.html");
		}
		
	%>
	
</body>
</html>

 

sessionMain.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>Insert title here</title>
</head>
<body>
	
	<%--
		세션의 모든 이름의 목록들을 Enumeration 객체로 얻기
		세션이름을 얻고 세션이름으로 세션값을 얻기
		세션값이 sung 과 같다면 웹 브라우저에 성춘향님 안녕하세요 출력하기
		a 태그로 로그아웃(sessionLogout.jsp), 세션확인하는 링크걸기
	 --%>
	
	<%
		Enumeration<String> e = session.getAttributeNames();
	
		while(e.hasMoreElements()){
			
			String sName = e.nextElement();
			String sValue = session.getAttribute(sName).toString();
			
			if(sValue.equals("sung")){
				
				out.print("<h1>성춘향님 안녕하세요</h1>");
				
			}
			
		}
	
	%>
	
	
	<a href="sessionLogout.jsp">로그아웃</a>
	
	&nbsp;&nbsp;&nbsp;
	
	<a href="sessionTest.jsp">세션확인</a>
	
</body>
</html>

 

sessionLogout.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>
	
	<%--
		세션의 모든 데이터 삭제하기 
		a 태그로 세션확인(sessionTest.jsp)하는 링크걸기
	 --%>
	
	<%
		session.invalidate();
	%>
	
	<h2>로그아웃 되었습니다.</h2>
	
	<a href="sessionTest.jsp">세션확인</a>
	
</body>
</html>

 

sessionTest.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>Insert title here</title>
</head>
<body>
	
	<%--
		세션에 있는 데이터의 이름과 값을 모두 웹브라우저에 출력하기
		만약에 세션에 데이터가 없다면 해당 세션이 삭제되었습니다 < 출력하기 
	 --%>
	
	<%
		
		Enumeration<String> e = session.getAttributeNames();
		
		int count = 0;
	
		while(e.hasMoreElements()){
			count++;	
			String sName = e.nextElement();
			String sValue = session.getAttribute(sName).toString();
			
			out.print("세션 이름 : " + sName + "<br>");
			out.print("세션 값 : " + sValue + "<br>");
			
		}
		
		if(count == 0){
		
	%>
			<h2>해당 세션이 삭제되었습니다.</h2>
		
	<%
		}
	%>
	
</body>
</html>

 

() 팝업

  

() 팝업 예제코드

main.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>
	
	<%!
		boolean cookieCheck = false;
	%>
	
	<%--
		쿠키이름 > popUp, 쿠키값 > notShow
		쿠키가 있으면 cookieCheck 변수를 true로 설정한다.
		
		cookieCheck값이 false일때 팝업창 띄우기 
		
	 --%>
	
	<%
		Cookie[] cookies = request.getCookies();
	
		if(cookies != null){
			
			cookieCheck = false;
			
			for(int i = 0; i < cookies.length; i++){
				
				String cName = cookies[i].getName();
				String cValue = cookies[i].getValue();
				
				if(cName.equals("popUp") && 
						cValue.equals("notShow")){
					
					cookieCheck = true;
					
				}
				
			}
			
		}
		
		if(cookieCheck == false){
	%>
	
			<script>
				window.open('popUp.jsp', 'pop', 'width=500, height=750');
				
				// window.open(); : 새창으로 팝업을 만들때 사용한다.
				// open('팝업주소', '팝업창 이름', '팝업 속성 설정');
			</script>
	<%
		}
	%>
</body>
</html>

 

popUp.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>
	
	<%
		// 만약에 넘어온 파라미터가 있다면 데이터를 받아서 
		// 그 파라미터의 이름이 popUp 파라미터의 값이 notShow 라면 
		// 쿠키객체 생성하기 Cookie("popUp", "notShow");
		// 24시간의 유효시간 설정하기 
		
		if(request.getParameter("popUp") != null){
			
			String popUpNotShow = request.getParameter("popUp");
			
			if(popUpNotShow.equals("notShow")){
				
				Cookie cookie = new Cookie("popUp", "notShow");
				cookie.setPath("/");
				cookie.setMaxAge(60 * 60 * 24);
				response.addCookie(cookie);
				
				out.print("<script>");
				out.print("window.close()");
				out.print("</script>");
				
			}
			
		}
		
	%>
	
	
	<h3>공지사항 입니다.</h3>
	<br><br><br><br><br><br><br><br><br><br><br>
	
	<form action="popUp.jsp" method="post">
		
		오늘은 더이상 공지사항 안보기
		<input type="checkbox" name="popUp" value="notShow">
		
		<input type="submit" value="확인">
		
	</form>
	
</body>
</html>
반응형

'강의 > JSP 강의 정리' 카테고리의 다른 글

JSP 강의 정리 12일차  (0) 2022.07.21
JSP 강의 정리 11일차  (0) 2022.07.20
JSP 강의 정리 9일차  (0) 2022.07.18
JSP 강의 정리 8일차  (0) 2022.07.15
JSP 강의 정리 7일차  (0) 2022.07.14