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
    
  • 쿠키는 지우는건 없고 그냥 지속시간을 짧게 주면 된다.

  • 쿠키 저장 절차

    1. 먼저 쿠키를 생성한다
    2. 쿠키에 필요한 설정을 한다(지속시간, 도메인,패스)
    3. 웹브라우저에 생성된 쿠키를 전송한다(response.addCookie)
  • 쿠키 가져오는 절차

    1. 웹브라우저의 요청으로 쿠키를 가져온다
    2. 쿠키이름을 통해 해당 쿠키에 저장된 값을 추출한다
<%@ 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(); 
    
  • 메서드

    1. 세션에 추가 : setAttribute(name,value)
    2. 세션에 저장된 정보를 삭제 : removeAttribute(name)
    3. 현재 브라우저에 저장된 모든 세션 삭제 : invalidate()
    4. 유지시간 설정 : setMaxInactiveInterval(sec)
    5. 설정된 유지시간 얻기 : getMaxInactiveInterval();
    6. 세션 생성시간 알아내기 : getCreationTime() -> 리턴타입이 long임 (정확한 시간을 알려면 Date로 형변환필요)
    7. 세션에 할당된 고유 아이디를 문자열 타입으로 받기 : 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>

###

Categories:

Updated:

Comments