본문 바로가기
코딩수업/AWS 클라우드환경 네이티브

10/27 웹 제작 - 쿠키 / 세션 / 에러처리

by 인생즐겜러 2022. 11. 16.
728x90
반응형

AWS 클라우드환경 네이티브 수업 109 일차

 

 

 

진행

1. 쿠키

2. 세션

3. 에러처리

 

 

 

요약

1. 쿠키 전송

2. 쿠키 유효시간 설정

3. 세션 사용

4. 세션을 이용한 회원가입

5. 에러 처리(구)

6. 에러 처리(신)

7. 페이지 지시자로 에러페이지를 설정하지 않고 에러페이지를 넘기는 방법

 

 

 

 

 


 

 

 

 

 

쿠키 전송

 

reponse 단에 쿠키를 달아서 클라이언트에게 보낸다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% response.addCookie(new Cookie("AGE", "28")); %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>ModifyCookie.jsp</title>
</head>
<body>
	<h1>쿠키 데이터 수정하기</h1>
	<h2>AGE 쿠키에 새로운 값이 저장되었습니다.</h2>
</body>
</html>

 

 

 

 

 

쿠키 유효시간 설정

 

쿠키 수명을 설정

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	Cookie cookie = new Cookie("GENDER", "");
	// cookie.setMaxAge(3600); 쿠키의 최대 수명 지정(초 단위)
	// cookie.setMaxAge(-1);
    // 웹브라우저가 끝날 때 쿠키가 삭제되도록 만듦
    // 설정을 하지 않아도 음수로 지정 됨.
	cookie.setMaxAge(0);	// 쿠키를 바로 삭제하도록 만듦
	response.addCookie(cookie);
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>DeleteCookie.jsp</title>
</head>
<body>
	<h1>쿠키 삭제하기</h1>
	<h2>GENDER 쿠키가 삭제되었습니다.</h2>
</body>
</html>

 

 

 

 

 


 

 

 

 

 

세션 사용

 

1번 페이지는 jsp로 만든 음식을 묻는 페이지

2번 페이지는 1번 페이지 결과를 세션에 저장(setSession) 후 jsp로 만든 첫 페이지 처럼 동물을 묻는 페이지 제작

3번 페이지는 세션에 저장한 음식을 받아오고(getSession) 2번의 결과 파라미터를 받아서 종합 결과 출력 

 

<!-- Food.html -->

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Food.html</title>
</head>
<body>
	<h1>좋아하는 음식은?</h1>
	<form action="/animal">
		<input type="text" name="FOOD"/><hr/>
		<input type="submit" value="확인"/>
	</form>
</body>
</html>
// AnimalServlet.java

package ch04;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//=================================================================================
// public class AnimalServlet extends HttpServlet
//=================================================================================

public class AnimalServlet extends HttpServlet {

	@Override
	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		req.setCharacterEncoding("UTF-8");
		
		String food = req.getParameter("FOOD");
		
		HttpSession session = req.getSession();
		session.setAttribute("FOOD", food);
		
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out = resp.getWriter();
		
		out.println("<html>");
			out.println("<head>");
				out.println("<title>좋아하는 동물과 음식은?</title>");
			out.println("</head>");
			out.println("<body>");
				out.println("<h1>좋아하는 동물은 무엇입니까?</h>");
				out.println("<form action='/result'>");
					out.println("<input type='text' name='ANIMAL'/>");
					out.println("<input type='submit' value='확인'/>");
				out.println("</form>");
			out.println("</body>");
		out.println("</html>");
		
	}	// End - public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

	
	
}	// End - public class AnimalServlet extends HttpServlet
// ResultServlet.java

package ch02;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ResultServlet extends HttpServlet {

	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		
		HttpSession session = req.getSession();
		String food = (String) session.getAttribute("FOOD");
		String animal = req.getParameter("ANIMAL");
		
//		session.invalidate();	// 세션을 삭제한다. 새로고침을 할 경우 이전 페이지에서 작성한 데이터가 삭제됨(food)
		
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out = resp.getWriter();
		
		out.println("<html>");
			out.println("<head>");
				out.println("<title>좋아하는 동물과 음식은?</title>");
			out.println("</head>");
			out.println("<body>");
				out.println("<h2>결과</h><hr/>");
				out.printf("<h2>당신이 좋아하는 음식은 %s이고 %s를 좋아합니다.", food, animal);
			out.println("</body>");
		out.println("</html>");
		
	}	// End - doGet
	
}	// End - public class ResultServlet extends HttpServlet
web.xml 파일에 코드 추가

<servlet>
  	<servlet-name>animal-servlet</servlet-name>
  	<servlet-class>ch04.AnimalServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>animal-servlet</servlet-name>
  	<url-pattern>/animal</url-pattern>
  </servlet-mapping>
  
  <servlet>
  	<servlet-name>food-servlet</servlet-name>
  	<servlet-class>ch02.ResultServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>food-servlet</servlet-name>
  	<url-pattern>/result</url-pattern>
  </servlet-mapping>

 

 

 

 

 

 

세션을 이용한 회원가입

 

<!-- PersonalInfo.html -->

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>PersonalInfo.html</title>
</head>
<body>
	<h1>개인 정보를 입력해주세요.</h1>
	<form action=Agreement.jsp method=post>
		아이디 : <input type="text" name="ID"/><br/>
		비밀번호 : <input type="password" name="PASSWORD"/><br/>
		이름 : <input type="text" name="NAME"/><br/>
		<input type="submit" value="확인"/>
	</form>
</body>
</html>
<!-- Agreement.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("UTF-8");
	String id = request.getParameter("ID");
	String password = request.getParameter("PASSWORD");
	String name = request.getParameter("NAME");
	session.setAttribute("ID", id);
	session.setAttribute("PASSWORD", password);
	session.setAttribute("NAME", name);
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Agreement.jsp</title>
</head>
<body>
	<h3>회원가입 약관</h3>
	<hr/>
	<pre>
		1. 회원 정보는 웹 사이트의 운영을 위해서만 사용됩니다.
		2. 웹 사이트의 건전한 운영을 방해하는 회원은 탈퇴처리됩니다.
	</pre><hr/>
	<form action="Subscribe.jsp" method="post">
		위의 약관에 동의하십니까?
		<input type="radio" name="AGREE" value="YES">동의함
		<input type="radio" name="AGREE" value="NO">동의하지 않음
		<hr/>
		<input type="hidden" name="HIDDENDATA" value="hidden"/>
		<input type="submit" value="확인"/>
	</form>
</body>
</html>
<!-- 정보를 처리하고 다른 페이지로 전달하는 jsp 파일 Subscribe.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*" %>
<%
	String agree = request.getParameter("AGREE");
	String hidden = request.getParameter("HIDDENDATA");
	String result = null;
	
	if(agree.equals("YES")) {	// 약관에 동의함
		String id = (String) session.getAttribute("ID");
		String password = (String) session.getAttribute("PASSWORD");
		String name = (String) session.getAttribute("NAME");
		PrintWriter writer = null;
		
		try {
			String filePath = application.getRealPath("WEB-INF/" + id + ".txt");
			writer = new PrintWriter(filePath);
			writer.println("아이디 : " + id);
			writer.println("비밀번호 : " + password);
			writer.println("이름 : " + name);
			
			result = "SUCCESS";
			
		} catch (IOException ioe) {
			result = "FAIL";
		} finally {
			try {
				writer.flush();
				writer.close();
			} catch (Exception e) {
				
			}
		}
	} else {	// 약관에 동의하지 않음
		result="FAIL";
	}
	session.invalidate();
	response.sendRedirect("Result.jsp?RESULT=" + result);
%>
<!-- Result.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% String result = request.getParameter("RESULT"); %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Result.jsp</title>
</head>
<body>
	<h3>회원 가입 결과</h3>
	<%
		if(result.equals("SUCCESS"))
			out.println("가입이 완료되었습니다.");
		else
			out.println("가입이 취소되었습니다.");	
	%>
</body>
</html>

 

 

 

 

 


 

 

 

 

 

에러처리 (구)

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	int num1 = 0, num2 = 0, result = 0;
	try {
		String str1 = request.getParameter("NUM1");
		String str2 = request.getParameter("NUM2");
		num1 = Integer.parseInt(str1);
		num2 = Integer.parseInt(str2);
		result = num1 + num2;
	} catch (NumberFormatException e) {
		RequestDispatcher dispatcher = request.getRequestDispatcher("DataError_Old.jsp");
		dispatcher.forward(request, response);
	}
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Adder.jsp</title>
</head>
<body>
	<%=result %>
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>DataError_Old.jsp</title>
</head>
<body>
	<h1>잘못된 형식의 데이터를 입력하셨습니다.</h1>
</body>
</html>

 

 

 

 

 

에러 처리 (신)

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page errorPage="New_DataError.jsp" %>
<%
		String str1 = request.getParameter("NUM1");
		String str2 = request.getParameter("NUM2");
		int num1 = Integer.parseInt(str1);
		int num2 = Integer.parseInt(str2);
		int result = num1 + num2;
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>New_Adder.jsp</title>
</head>
<body>
	<%=num1 %> + <%=num2 %> = <%=result %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<% response.setStatus(200); %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>New_DataError.jsp</title>
</head>
<body>
	<h1>잘못된 형식의 데이터를 입력하셨습니다.</h1>
	<h2>상세 에러 메시지 : <%=exception.getMessage() %></h2>
</body>
</html>

 

 

 

 

 

페이지 지시자로 에러페이지를 설정하지 않고 에러페이지를 넘기는 방법

 

 

<!-- Multiply.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
		String str1 = request.getParameter("NUM1");
		String str2 = request.getParameter("NUM2");
		int num1 = Integer.parseInt(str1);
		int num2 = Integer.parseInt(str2);
		int result = num1 * num2;
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Multiply.jsp</title>
</head>
<body>
	<%=num1 %> * <%=num2 %> = <%=result %>
</body>
</html>
<!-- Divide.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
		String str1 = request.getParameter("NUM1");
		String str2 = request.getParameter("NUM2");
		int num1 = Integer.parseInt(str1);
		int num2 = Integer.parseInt(str2);
		int result = num1 / num2;
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Divide.jsp</title>
</head>
<body>
	<%=num1 %> / <%=num2 %> = <%=result %>
</body>
</html>

 

<!-- NumberFormatError.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page isErrorPage="true"%>
<% response.setStatus(200); %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>NumberFormatError.jsp</title>
</head>
<body>
	<h1>Number Format Exception</h1>
	<h2>숫자 형식이 잘못되었습니다.</h2>
	<h2>상세 에러 메시지 : <%=exception.getMessage() %></h2>
</body>
</html>
<!-- ArithmeticError.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page isErrorPage="true"%>
<% response.setStatus(200); %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>ArithmeticError.jsp</title>
</head>
<body>
	<h1>ArithmeticException Exception</h1>
	<h2>산술 형식이 잘못되었습니다.</h2>
	<h2>상세 에러 메시지 : <%=exception.getMessage() %></h2>
</body>
</html>

 

 에러를 나타내주는 jsp파일경로를 web.xml 파일에 추가
 
 <error-page>
  	<exception-type>java.lang.NumberFormatException</exception-type>
  	<location>/ch05/NumberFormatError.jsp</location>
  </error-page>
  
  <error-page>
  	<exception-type>java.lang.ArithmeticException</exception-type>
  	<location>/ch05/ArithmeticError.jsp</location>
  </error-page>
728x90
반응형

'코딩수업 > AWS 클라우드환경 네이티브' 카테고리의 다른 글

10/31 웹 제작 - 에러 페이지, EL, jsp 표준 액션  (0) 2022.11.16
10/28  (0) 2022.11.16
11/15 웹 제작 - 파일 업로드 만들기  (0) 2022.11.15
10/26 JSP  (0) 2022.10.27
10/25 JSP  (0) 2022.10.26

댓글