반응형
[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>
<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 |