JSP 3일차 : Include File, 쿠키와 세션
Include File
-
공유데이타나 변수를 여러 jsp페이지에서 공유하고자 할 경우 많이 사용
<%@ include file = "파일명" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String bcolor1 = "PeachPuff";
String bcolor2 = "Peru";
String bcolor3 = "Pink";
String bcolor4 = "Plum";
String bcolor5 = "PowderBlue";
String bcolor6 = "PapayaWhip";
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file ="MyColor.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Include File 연습</title>
</head>
<body>
<div style="background:<%=bcolor1 %>; width:200px; height:200px; "></div>
<div style="background:<%=bcolor2 %>; width:200px; height:200px; "></div>
<div style="background:<%=bcolor3 %>; width:200px; height:200px; "></div>
<div style="background:<%=bcolor4 %>; width:200px; height:200px; "></div>
<div style="background:<%=bcolor5 %>; width:200px; height:200px; "></div>
<div style="background:<%=bcolor6 %>; width:200px; height:200px; "></div>
</body>
</html>
쿠키
-
클라이언트쪽에 저장되는 정보
-
포털에서 검색을 하거나 할 때 그 정보가 쿠키로 저장이 된다. 특정 웹사이트에 접속할 때 생성되는 정보를 담은 임시파일로, 크기는 4kb이하로 생성됨.
Cookie 변수명 = new Cookie("이름", "값");
-
쿠키 추가
response.addCookie(name); 변수명.setValue(value);
-
컴퓨터에 저장된 쿠키 가져오기
Cookie 변수명[] = request.getCookies();
이 때 저장된 쿠키가 없으면 null값이 반환됨
-
쿠키지속시간
[쿠키변수명].setMaxAge([초]) // 주로 계산하지 않고 식 그대로 준다.(읽기 좋게) // 예) 1시간 : 60*60, 일주일: 60*60*24*7
-
쿠키는 지우는건 없고 그냥 지속시간을 짧게 주면 된다.
-
쿠키 저장 절차
-
- 먼저 쿠키를 생성한다
- 쿠키에 필요한 설정을 한다(지속시간, 도메인,패스)
- 웹브라우저에 생성된 쿠키를 전송한다(response.addCookie)
-
쿠키 가져오는 절차
-
- 웹브라우저의 요청으로 쿠키를 가져온다
- 쿠키이름을 통해 해당 쿠키에 저장된 값을 추출한다
<%@ 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>
<%
//쿠키생성
Cookie cookie1 = new Cookie("id","angel1");
Cookie cookie2 = new Cookie("msg","msgmsg");//쿠키값에 절대 공백주지 말것!!!!
//쿠키 유지 시간 설정
cookie1.setMaxAge(60*60*24); //24시간동안 유지되도록
cookie2.setMaxAge(60*60*24*7); //일주일동안 유지
//패스 지정
cookie1.setPath("/");
cookie2.setPath("/");
//웹브라우저에 저장
response.addCookie(cookie1);
response.addCookie(cookie2);
%>
<h2>현재 프로젝트에 저장되어있는 쿠키를 가져와보자~</h2>
<%
Cookie cookies[] = request.getCookies();
//저장된 쿠키가 없을땐 null값이 들어가므로
if(cookies!=null){
for(int i=0 ; i<cookies.length ; i++){
String cookieName = cookies[i].getName();
String cookieValue = cookies[i].getValue();
int sec = cookies[i].getMaxAge();
%>
<pre>
<%=i %>번째의...
쿠키이름 : <%=cookieName %>
쿠키값 : <%=cookieValue %>
유지시간 : <%=sec %>
</pre>
<%
}
}else{
%>
<p>저장된 쿠키가 없습니다.</p>
<%
}
%>
</body>
</html>
실습문제
아이디로 로그인을 하면 모든 기사내용을 볼수 있고
로그인을 안한상태에서 기사를 클릭을 하면 “ 먼저 로그인을 해주세요” 메세지가 나오게 하려고 한다
loginForm.jsp
<b>아이디로 로그인하세요</b>
<form action="Ex3_loginaction.jsp" method="post">
<input type="text" name="id" size="6">
<input type="submit" value="로그인">
</form>
loginAction.jsp
<%
//아이디 읽기
String id=request.getParameter("id");
//쿠키에 아이디 저장,loginok 쿠키저장
Cookie c1=new Cookie("id",id);
Cookie c2=new Cookie("loginok","yes");
//쿠키 유지시간,패스 저장
c1.setMaxAge(10);
c2.setMaxAge(10);
c1.setPath("/");
c2.setPath("/");
//웹브라우저에 쿠키 추가
response.addCookie(c1);
response.addCookie(c2);
//메인파일로 이동
response.sendRedirect("Ex3_loginmain.jsp");
%>
logoutForm.jsp
<%
//현재 도메인에 저장된 쿠키값중 id 를 얻어서 출력
Cookie []cookies=request.getCookies();
String id="";
if(cookies!=null)
{
for(Cookie c:cookies)
{
if(c.getName().equals("id"))
id=c.getValue();
}
}
%>
<pre>
<b><%=id%>님이 로그인중입니다</b> <input type="button" value="로그아웃"
onclick="location.href='Ex3_logoutaction.jsp'">
</pre>
logoutAction.jsp
<%
//쿠키중 loginok 를 찾아서 삭제후 메인파일로 이동
Cookie []cookies=request.getCookies();
if(cookies!=null)
{
for(Cookie c:cookies)
{
if(c.getName().equals("loginok"))
{
//삭제하기 위해서 유지시간을 1초로 설정
c.setMaxAge(1);
c.setPath("/"); //삭제시에는 반드시 경로도 같이 줘야한다.
//브라우저에 수정된 쿠키 추가
response.addCookie(c);
}
}
}
//메인으로 이동
response.sendRedirect("Ex3_loginmain.jsp");
%>
loginMain.jsp
<%
Cookie []cookies=request.getCookies();
boolean isLogin=false;
if(cookies!=null)
{
for(Cookie c:cookies)
{
if(c.getName().equals("loginok"))
{
String value=c.getValue();
if(value!=null && value.equals("yes"))
isLogin=true;
}
}
}
//로그인상태면 로그아웃 페이지를 include
//아닐경우 로그인 페이지를 include
if(isLogin)
{
%>
<jsp:include page="Ex3_logoutform.jsp"/>
<%
}else
{
%>
<jsp:include page="Ex3_loginform.jsp"/>
<%
}
%>
<hr size="5" color="pink">
<h2>오늘의 주요 기사</h2>
<jsp:include page="Ex3_paper.jsp"/>
paper.jsp
<ol type="1">
<li><a href="Ex3_gisa1.jsp">기사1 제목</a></li>
<li><a href="Ex3_gisa2.jsp">기사2 제목</a></li>
<li><a href="Ex3_gisa3.jsp">기사3 제목</a></li>
</ol>
gisa1.jsp
<%
Cookie []cookies=request.getCookies();
boolean isLogin=false;
//쿠키중 loginok 의 값이 yes 면 isLogin을 true 로 변경
if(cookies!=null)
{
for(Cookie c:cookies)
{
if(c.getName().equals("loginok") && c.getValue().equals("yes"))
isLogin=true;
}
}
//로그인상태라면 기사내용을 보여주고, 아닐경우 경고메세지후 돌아가도록 설정
if(isLogin)
{
%>
<pre>
기사내용을 넣으세요
<a href="Ex3_loginmain.jsp">다시 메인으로</a>
</pre>
<%
}else
{
%>
<script type="text/javascript">
alert("먼저 로그인을 해주세요");
history.back();
</script>
<%
}
%>
gisa2.jsp, gisa3.jsp 도 비슷하게 만들어주면 된다.
세션
-
JSP 내장객체 (서블릿에서는 선언할것)
-
- 세션은 웹서버쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장(웹서버쪽에 저장됨)
- 서버와 관련된 정보를 노출시키지 않기 위해서 쿠키를 사용하는 것보다 더욱 효율적이다.
- 세션은 웹 브라우저당 한개만 부여된다.
- 그래서 여러개의 웹브라우저가 열려있다면 같은 세션을 공유한다.
-
HttpSession 변수명 = request.getSession();
-
메서드
-
- 세션에 추가 : setAttribute(name,value)
- 세션에 저장된 정보를 삭제 : removeAttribute(name)
- 현재 브라우저에 저장된 모든 세션 삭제 : invalidate()
- 유지시간 설정 : setMaxInactiveInterval(sec)
- 설정된 유지시간 얻기 : getMaxInactiveInterval();
- 세션 생성시간 알아내기 : getCreationTime() -> 리턴타입이 long임 (정확한 시간을 알려면 Date로 형변환필요)
- 세션에 할당된 고유 아이디를 문자열 타입으로 받기 : getId()
<%@page import="java.util.Date"%>
<%@ 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("name","diva");
session.setAttribute("id","DVA");
//유지시간 설정하기
session.setMaxInactiveInterval(60); //세션은 어차피 하나밖에 없어서 개별적으로 시간 설정이 안됨.
%>
<h2>세션에 저장된 값과 유지시간, 고유 아이디, 생성시간을 얻어보아요 </h2>
<ol type="i">
<li>생성시간: <%=new Date(session.getCreationTime()) %></li><!-- 롱타입으로 나오기때문에 날짜타입으로 변환해야 한당 -->
<li>유지시간: <%=session.getMaxInactiveInterval() %></li>
<li>고유아이디: <%=session.getId() %></li><!-- 세션마다 부여되는 고유의 아이디 -->
<li>이름: <%=session.getAttribute("name") %></li>
<li>아이디: <%=session.getAttribute("id") %></li>
</ol>
<%
//삭제해보기
session.removeAttribute("name");
%>
<h2>이름 삭제후! </h2>
<ol type="i">
<li>이름: <%=session.getAttribute("name") %></li>
<li>아이디: <%=session.getAttribute("id") %></li>
</ol>
<%
//세션의 모든 데이타 삭제
session.invalidate();
%>
</body>
</html>
###
Comments