posted by 구름너머 2006. 3. 29. 11:14
Cookie, Session, application, pageContext, page, exception 객체 | JSP2006/02/01 12:29
http://blog.naver.com/kmis9797/120021696379

▩ cookie 객체의 사용
- Tomcat 서버가 Client에 저장하는 텍스트 파일로 된 정보
- 쿠키는 국제 표준에 따라 작성되어야 합니다.
- 보안성이 없음으로 계정과 패스워드를 동시에 쿠키에 저장하면, 쿠키의 내용을 전부 편집기로 열어 볼 수 있음으로
보안에 문제가 될 수 있습니다.
- 4Kb까지 저장할 수 있다.
- 쿠키의 저장 폴더는 2000서버의 경우 "C:\Documents and Settings\각 계정(Administrator)\Cookies"가 지정됨
- 사용예 : 하루동안 이벤트창 오픈하기, ID자동으로 저장기능 등
- setMaxAge() : 쿠키의 생존 기간, 초 단위, 12시간의 경우 12*60*60, 생존 기간이 지나면 쿠키가 Servlet Container에 의해
인식이 되지 않습니다.
- Cookie cname = new Cookie("cname", "Java"); --> Cookie cname = new Cookie(쿠키 변수명, 쿠키 값)

------------------------------------------------------------------------------
>>>>> jcookieWrite.jsp, http://127.0.0.1:8081/jsp2030/jcookieWrite.jsp
------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR" %>

<%
//쿠키 변수 선언
Cookie cname= null;
Cookie ckuk = null;
Cookie ceng = null;
Cookie cmat = null;

cname = new Cookie("cname", "Java"); //cname이란 쿠키변수에 "Java"를 저장합니다.
cname.setMaxAge(20); //20초
response.addCookie(cname); //쿠키를 Client에 저장합니다.

ckuk = new Cookie("ckuk", "100");
ckuk.setMaxAge(20);
response.addCookie(ckuk);

ceng = new Cookie("ceng", "90");
ceng.setMaxAge(20);
response.addCookie(ceng);

cmat = new Cookie("cmat", "100");
cmat.setMaxAge(20);
response.addCookie(cmat);

%>

<html>
<head>
<title>쿠키 저장하기(Cookie객체의 사용)</title>
</head>
<body>
<p>성적을 쿠키로 저장 했습니다.</p>
<p><a href="jcookieRead.jsp">쿠키로 저장된 성적 읽어오기</p>
</body>
</html>


------------------------------------------------------------------------------
>>>>>>>>>> jcookieRead.jsp
------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR" %>

<html>
<head>
<title>쿠키 읽어 오기(Cookie객체의 사용)</title>
</head>
<body>
<%
//client안에 있는 모든 쿠키를 전부 읽어 옵니다.
Cookie[] cookies = request.getCookies();
Cookie cItem=null;

String name=null;
int kuk=0;
int eng=0;
int mat=0;

for (int i = 0; i < cookies.length; i++) {
//쿠키 변수를 각각 추출합니다.
cItem = cookies[i];

if (cItem.getName().equals("cname")) name = (String)(cItem.getValue());
if (cItem.getName().equals("ckuk")) kuk = Integer.parseInt(cItem.getValue());
if (cItem.getName().equals("ceng")) eng = Integer.parseInt(cItem.getValue());
if (cItem.getName().equals("cmat")) mat = Integer.parseInt(cItem.getValue());
}

out.println ("성명 : " + name + "<br><br>");
out.println ("국어 : " + kuk + "<br><br>");
out.println ("영어 : " + eng + "<br><br>");
out.println ("수학 : " + mat + "<br><br>");
out.println ("총점 : " + (kuk+eng+mat) + "<br><br>");
out.println ("평균 : " + (kuk+eng+mat)/3 + "<br><br>");
%>
</body>
</html>

http://127.0.0.1:8081/jsp2030/jcookieWrite.jsp

▩ session 객체의 사용
- javax.servlet.http.HttpSession Interface
- 서버의 메모리상에 저장되는 정보
- 보안성이 높으나 서버의 메모리를 사용함으로 비용이 많이 발생되어 사용을 최대한 줄여야 함
- 아이디, 패스워드, 쇼핑카트등 로그인 정보를 저장함
- 사용자가 웹사이트에 접속시 접속자별로 웹서버는 세션ID를 생성해 줌
- 서버상에서 세션의 유지시간은 초단위로 session.setMaxInactiveInterval(600); 로 지정합니다.
만약 사용자가 JSP페이지를 열어놓고 링크를 마우스 클릭등의 작업을 하지 않아도 session은 삭제됩니다.
- 서버상에 있는 세션 변수의 값을 삭제하려면 session.invalidate();을 이용합니다.
- Session ID는 서블릿컨테이너가 부여하는 것으로 접속자의 상태를 파악해서 일정 시간이 흐르면
session을 삭제할 것인지를 결정하게 됩니다. 개발자는 이 Session ID값을 읽어 올수만 있습니다.
- Session ID외에 개발자는 필요한 만큼 Session 변수를 만들어 사용할 수 있습니다.

- 페이지 흐름도 YES
ⓐ main.jsp -----> 로그인여부 판단 -----┬----> main.jsp -----> logout.jsp -----> ⓐ

│NO
└----> login.jsp -----> session.jsp -----> ⓐ


------------------------------------------------------------------------------
>>>>>>>>>> login.jsp
------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR" %>

<html>
<head>
<title>session객체 사용하기</title>
</head>
<body>
<center>

<form method="post" action="session.jsp">

<table border=1 cellspacing=1 cellpadding=0>
<tr>
<th>ID</th>
<td><input type="text" name="id" value='java'></td>
</tr><tr>
<th>Password</th>
<td><input type="password" name="passwd" value='1234'></td>
</tr><tr>
<td colspan="2" align="center"><input type="submit" value="Login"></td>
</tr>
</table>

</form>

* 인증을 위한 ID는 java, Password는 1234입니다.

</center>
</body>
</html>


------------------------------------------------------------------------------
>>>>>>>>>> session.jsp
------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR" %>

<html>
<head>
<title>session처리 페이지</title>
</head>
<body>

<%
String inid = request.getParameter("id");
String inpasswd = request.getParameter("passwd");

//System.out.println("id : " + inid+ " passwd:" + inpasswd);

String id = "java";
String passwd = "1234";

//== : 참조값 비교
if (!id.equals(inid)){
%>
<script Language="JavaScript">
alert("등록된 아이디가 아닙니다.");
history.back();
</Script>

<%}

if (!passwd.equals(inpasswd)){
%>
<script Language="JavaScript">
alert("비밀번호가 잘못되었습니다.");
history.back();
</Script>

<%}

if (id.equals(inid) && passwd.equals(inpasswd)) {
//session 변수 생성
session.setAttribute("user", id);
response.sendRedirect("main.jsp");
}
%>
</body>
</html>


------------------------------------------------------------------------------
>>>>>>>>>> main.jsp
------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR" import="java.util.*"%>
<% session.setMaxInactiveInterval(600); %>
<html>
<head>
<title>회원 전용 메인 페이지</title>
</head>
<body>
<font size=5>
<%
try {
if (session.getAttribute("user")!=null){
%>
<p>로그인 된 아이디 : <%=session.getAttribute("user")%><p>
<p>현재 session ID : <%= session.getId() %></p>

<%
Date dd = new Date(session.getCreationTime());

Calendar rightNow = Calendar.getInstance();

rightNow.setTime(dd);

int year = rightNow.get(Calendar.YEAR);
int month = rightNow.get(Calendar.MONTH)+1;
int day = rightNow.get(Calendar.DATE);

int hour = rightNow.get(Calendar.HOUR);
int min = rightNow.get(Calendar.MINUTE);
int sec = rightNow.get(Calendar.SECOND);

String sd = year + "년 " + month + "월 " + day + "일 ";
sd += hour + "시 " + min + "분 " + sec + "초 ";

%>
<p>session이 만들어진 시각 : <%=sd%></p>
<p>설정된 session Timeout 시간 : <%= session.getMaxInactiveInterval() %></p>
<p><a href="logout.jsp">로그 아웃하기</a></p>
<%}else{%>
<p>회원만 이 페이지에 접속할 수 있습니다.</p>
<Script Language='JavaScript'>
alert("로그인을 해주세요......");
location.href='login.jsp';
</Script>
<%}
} catch(NullPointerException e) {
System.out.println("에러가 발생했습니다. 원인: "+e.toString());
}
%>
</font>
</body>
</html>


------------------------------------------------------------------------------
>>>>> logout.jsp
------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR" %>

<html>
<head>
<title>로그 아웃</title>
</head>
<body>
<%
session.invalidate();
//response.sendRedirect("main.jsp");
%>
<p>로그아웃 되었습니다. 이용하여 주셔서 감사합니다.</p>
<a href='main.jsp'>메인화면으로 가기</a>
</body>
</html>


http://127.0.0.1:8081/jsp2030/main.jsp

▩ application 객체
- javax.servlet.ServletContext Interface

1. 서블릿 또는 어플리케이션의 외부 환경 정보(Context) 제공
------------------------------------------------------------------------------
>>>>> application.jsp
------------------------------------------------------------------------------
<%@ page contentType="text/html;charset=EUC-KR"%>
<%
String serverInfo = application.getServerInfo();
String mimeType = application.getMimeType("test.html");
String realPath = application.getRealPath("/");
application.log("application 내부 객체 로그 테스트");
%>
<h1>application.jsp</h1>
서블릿 컨테이너의 이름과 버전 : <%=serverInfo%><p>
test.html의 MIME Type : <%=mimeType%><p>
로컬 파일 시스템 경로 : <%=realPath%>

▩ exception 객체
- java.lang.Throwable

1. 에러 처리 페이지에 에러를 전달하는 역활을 함

------------------------------------------------------------------------------
>>>>> errorStart.jsp
------------------------------------------------------------------------------
<%@ page contentType="text/html;charset=EUC-KR" errorPage="error.jsp"%>
<%
int one = 1;
int zero = 0;
%>
<h1>errorStart.jsp</h1>
one / zero = <%=one/zero%><p>

------------------------------------------------------------------------------
>>>>> error.jsp
------------------------------------------------------------------------------
<%@ page contentType="text/html;charset=EUC-KR" isErrorPage="true"%>
<%
String message = exception.getMessage();
String objectMessage = exception.toString();
%>
<h1>error.jsp</h1>
에러 메세지 : <b><%=message%></b><p>
에러 실체의 클래스명과 에러 메세지 : <b><%=objectMessage%></b><p>

http://127.0.0.1:8081/jsp2030/errorStart.jsp