Servlet을 사용하기 위한 세팅하고,
CookieGetServlet.java
/*
* Cookie
* 1. 상태정보(Status)를 클라이언트에 저장하는 메커니즘
* 2. 클라이언트에 저장하기 때문에 서버에 부하를 줄일 수는 있지만, 그만큼 보안에 취약하다.
* 3. 도메인당 300개까지 저장가능
* 4. 요새 대부분의 브라우저는 쿠키를 설정하지 못하도록 하는 제약이 있다.
* 5. 브라우저 메모리 혹은 OS 파일에 저장가능
* 6. 기본저장은 브라우저 메모리이기 때문에, 브라우저를 종료하면 자동으로 쿠키는 폐기됨
* 7. 쿠키만료시간을 지정하면 지정된 시간까지 OS 파일에 저장된다.
*
* Cookie 생성자
* javax.servlet.http.Cookie;
* public Cookie(java.lang.String name, java.lang.String value)
*
* 주요메소드
* 1) response.addCookie(cookie인스턴스);
* 2) request.getCookies()
* 3) setMaxAge(second)
* 4) getMaxAge()
* 5) setValue(value)
* 6) getValue()
* 7) getName()
* 8) length
*/
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CookieGetServlet extends HttpServlet{
/*@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException{
HttpServletRequest request = (HttpServletRequest)req;
if(request.getMethod().equalsIgnoreCase("POST")){
this.doPost((HttpServletRequest)req, (HttpServletResponse)res);
}else if(request.getMethod().equalsIgnoreCase("GET")){
this.doGet((HttpServletRequest)req, (HttpServletResponse)res);
}
}*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body>");
out.println("<h1>Cookie 추출</h1>");
Cookie [] array = req.getCookies();
if(array != null && array.length > 0){
out.println("<p>다음과 같은 쿠키 정보가 전달됐습니다.</p>");
out.println("<ul>");
for(int i = 0 ; i < array.length ; i++){
out.println("<li>Cookie Name : " + array[i].getName() + "</li>");
out.println("<li>Cookie Value : " + array[i].getValue() + "</li>");
}
out.println("</ul>");
}else{ //Cookie 가 없다면
out.println("<font color='red' size='6'>전달된 Cookie 가 없습니다.</font>");
}
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
this.doGet(req, resp);
}
}
CookieSetServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CookieSetServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
Cookie c1 = new Cookie("discount", "20");
Cookie c2 = new Cookie("item", "sports");
res.setContentType("text/html;charset=utf-8");
res.addCookie(c1);
c2.setMaxAge(60 * 60 * 3); //3시간
res.addCookie(c2);
PrintWriter out = res.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body>");
out.println("<h1>Cookie 추출완료</h1>");
out.println("</body></html>");
out.close();
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
this.doGet(req, res);
}
}
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<display-name>Welcome to 0613 Web Project </display-name>
<servlet>
<servlet-class>CookieGetServlet</servlet-class>
<servlet-name>CookieGet</servlet-name>
</servlet>
<servlet>
<servlet-class>CookieSetServlet</servlet-class>
<servlet-name>CookieSet</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>CookieGet</servlet-name>
<url-pattern>/servlet/CookieGet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CookieSet</servlet-name>
<url-pattern>/servlet/CookieSet</url-pattern>
</servlet-mapping>
</web-app>
브라우저켜서
http://localhost/0613/servlet/CookieGet 해서
http://localhost/0613/servlet/CookieSet 으로 쿠키를 셋 해주고
http://localhost/0613/servlet/CookieGet 다시 오면 두개의 쿠키정보가 나온다. 브라우저 종료 후,
http://localhost/0613/servlet/CookieGet 오면 쿠키가 하나사라진 것을 볼 수 있다.
이유는 c2에는 유효시간을 주어 유효시간동안 쿠키가 남아있지만, c1은 브라우저를 종료하면 사라진다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
쇼핑몰 쿠키
product.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>상품페이지</title>
</head>
<body>
<h1>상품 목록</h1>
<form action="/0613/servlet/CartSave" method="post">
<input type="radio" name="product" value="Computer">Computer<br />
<input type="radio" name="product" value="Sonata">Sonata<br />
<input type="radio" name="product" value="Keyboard">Keyboard<br />
<input type="radio" name="product" value="Book">Book<br />
<input type="submit" value="담기">
</form>
</body>
</html>
ShoppingCartCookiesServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShoppingCartCookieServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body>");
out.println("<h1>장바구니 리스트</h1>");
Cookie [] array = req.getCookies();
if(array != null && array.length > 0){ //Cookie 가 있다면
for(Cookie c : array)
out.println(c.getName() + " --> " + c.getValue() + "<br />");
}else{
out.println("<p style='color:red;font-size:1.5em;'>");
out.println("장바구니가 비었습니다.</div>");
}
out.println("<a href='/0613/product.html'>상품 선택 페이지</a>");
out.println("<a href='/0613/servlet/CartDelete'>장바구니 비우기</a>");
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
this.doGet(req, resp);
}
}
CartSaveServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CartSaveServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
String product = req.getParameter("product");
Cookie [] array = req.getCookies(); //기존의 쿠키
Cookie c = null;
if(array == null || array.length == 0){ //기존의 쿠키가 없다면
c = new Cookie("product", product);
}else{
c = new Cookie("product" + (array.length + 1), product);
}
resp.addCookie(c);
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body>");
out.println("<a href='/0613/servlet/ShoppingCartCookie'>");
out.println("장바구니 보기</a>");
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
this.doGet(req, resp);
}
}
CartDeleteServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CartDeleteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body>");
out.println("<h1>장바구니 비우기</h1>");
Cookie [] array = req.getCookies();
if(array != null){
for(Cookie c : array) {
c.setMaxAge(1); //1초
resp.addCookie(c);
}
}else{
out.println("<div style='color:red;font-size:1.5em;'>");
out.println("장바구니는 이미 비어있음</div>");
}
out.println("<a href='/0613/product.html'>상품선택페이지</a>");
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
this.doGet(req, resp);
}
}
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<display-name>Welcome to 0613 Web Project </display-name>
<servlet>
<servlet-class>CookieGetServlet</servlet-class>
<servlet-name>CookieGet</servlet-name>
</servlet>
<servlet>
<servlet-class>CookieSetServlet</servlet-class>
<servlet-name>CookieSet</servlet-name>
</servlet>
<servlet>
<servlet-class>ShoppingCartCookieServlet</servlet-class>
<servlet-name>ShoppingCartCookie</servlet-name>
</servlet>
<servlet>
<servlet-class>CartSaveServlet</servlet-class>
<servlet-name>CartSave</servlet-name>
</servlet>
<servlet>
<servlet-class>CartDeleteServlet</servlet-class>
<servlet-name>CartDelete</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>CookieGet</servlet-name>
<url-pattern>/servlet/CookieGet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CookieSet</servlet-name>
<url-pattern>/servlet/CookieSet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ShoppingCartCookie</servlet-name>
<url-pattern>/servlet/ShoppingCartCookie</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CartSave</servlet-name>
<url-pattern>/servlet/CartSave</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CartDelete</servlet-name>
<url-pattern>/servlet/CartDelete</url-pattern>
</servlet-mapping>
</web-app>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
SessionTestServlet.java
/*
* Session Tracking
*
* 1. http protocol은 stateless protocol 즉 상태를 저장하지 않는 프로토콜이다.
* 2. 클라이언트가 웹 서버에 요청하고 응답을 받으면 즉시 연결과 정보를 끊는 방식이다.
* 3. http 프로토콜의 문제점을 극복하기 위해서 사용자의 상태 정보를 관리하는 매커니즘이 필요
* 4. 세션트래킹(세션관리)의 방법
* 1)HttpSession 클래스를 이용한 세션 처리 방법
* 2)Cookie 를 이용한 쿠리 처리 방법
*
* 5. 세션이란?
* - 사용자의 상태정보를 웹 서버의 메모리에 저장하는 매커니즘을 의미
* - 세션 정보는 클라이언트가 웹 서버에 접근해서 종료할 때까지(브라우저를 종료할 때까지) 유지
* - 상태 정보를 서버에 저장하기 때문에 서버의 부하가 클 수 있다.
* - time-out 제한을 두어서 일정시간(기본 30분)동안 요청이 없으면, 서버는 세션 정보를 폐기
*
* 6. 주요 메소드
* 1)request.getSession(), request.getSession(true)
* - 만일 세션이 없으면 새로 생성하고, 있으면 생성된 세션을 참조
* - 일반적으로 세션을 처음 생성하는 서블릿에서 사용
* 2)request.getSession(false)
* - 만일 세션이 없으면 null 값을 리턴하고, 있으면 생성된 세션을 참조
* - 일반적으로 세션을 사용해야 하는 경우에 사용
* 3) session.getId()
* 4) session.setAttribute(key, value)
* 5) session.getAttribuet(key)
* 6) session.removeAttribute(key)
* 7) session.setMaxInactiveInterval(second)
* 8) session.getMaxInactiveInterval()
* 9) session.invalidate()
*
* 7. 세션을 제거하는 방법
* 1) time-out을 지정하는 방법
* - session.setMaxInactiveInterval(second)
* session.setMaxInactiveInterval(60 * 60 * 24); //24시간
* -web.xml 에서
* <web-app>
* <session-config> 단위는 분단위
* <session-timeout>60</session-timeout>
* </session-config>
* </web-app>
* 2) 즉시 제거하는 방법
* - invalidate()
* session.invalidate()
* 3) 세션에 특정 값만을 지울 때
* removeAttribute(key)
* session.removeAttribute(key)
*/
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 SessionTestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
HttpSession session = null;
String msg = null;
String param = req.getParameter("comm");
if(param.equals("create")){
session = req.getSession(); //req.getSession(true);
if(session.isNew()){
msg = "방금 세션이 생성됐습니다.";
}else{
msg = "이미 세션이 생성되어 있습니다.";
}
}else if(param.equals("destroy")){
session = req.getSession(false);
if(session != null) {
session.invalidate();
msg = "세션이 방금 삭제됐습니다.";
}else{
msg = "사용할 수 없는 명령입니다.";
}
}
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body>");
out.println("<h1>처리 결과 : " + msg + "</h1>");
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
this.doGet(req, res);
}
}
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<display-name>Welcome to 0613 Web Project </display-name>
<servlet>
<servlet-class>SessionTestServlet</servlet-class>
<servlet-name>SessionTest</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>SessionTest</servlet-name>
<url-pattern>/servlet/SessionTest</url-pattern>
</servlet-mapping>
</web-app>
//실행은 http://localhost/0613/servlet/SessionTest?comm=destroy 해보고
http://localhost/0613/servlet/SessionTest?comm=create 해보고
http://localhost/0613/servlet/SessionTest?comm=destroy 해봄.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
CountServlet.java
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 CountServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body>");
out.println("<h1>누적시킬 숫자를 입력하세요.</h1>");
out.println("<form method='post'>");
out.println("<p><input type='number' name='number'></p>");
out.println("<p><input type='submit' value='전송'></p>");
out.println("</form>");
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
HttpSession session = req.getSession();
if(session.isNew()){
session.setAttribute("number", new int[]{0});
}
int [] sum = (int [])session.getAttribute("number");
int su = Integer.parseInt(req.getParameter("number"));
sum[0] += su;
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body>");
out.println("<h3>누적된 값 : " + sum[0] + "</h3>");
out.println("Session ID : " + session.getId() + "<br />");
out.print("Session 생성시간 : ");
out.println(new java.util.Date(session.getCreationTime()) + "<br />");
out.println("<a href='/0613/servlet/Count'>이전페이지</a>");
out.println("</body></html>");
out.close();
}
}
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<display-name>Welcome to 0613 Web Project </display-name>
<servlet-class>CountServlet</servlet-class>
<servlet-name>Count</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>Count</servlet-name>
<url-pattern>/servlet/Count</url-pattern>
</servlet-mapping>
</web-app>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
session으로 쇼핑몰 .
product1.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>상품페이지</title>
</head>
<body>
<h1>상품 목록</h1>
<form action="/0613/servlet/CartSaveSession" method="post">
<input type="radio" name="product" value="Computer">Computer<br />
<input type="radio" name="product" value="Sonata">Sonata<br />
<input type="radio" name="product" value="Keyboard">Keyboard<br />
<input type="radio" name="product" value="Book">Book<br />
<input type="submit" value="담기">
</form>
</body>
</html>
ShoppingSaveSessionServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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 CartSaveSessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
String product = req.getParameter("product");
HttpSession session = req.getSession(true);
ArrayList<String> cart = (ArrayList<String>)session.getAttribute("product");
if(cart == null){
cart = new ArrayList<String>();
cart.add(product);
session.setAttribute("product", cart);
}else{
cart.add(product);
}
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body><h1>장바구니추가</h1>");
out.println("<a href='/0613/servlet/ShoppingCartSession'>");
out.println("장바구니 보기</a>");
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
this.doGet(req, resp);
}
}
ShoppingCartSessionServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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 ShoppingCartSessionServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body>");
out.println("<h1>장바구니 리스트</h1>");
HttpSession session = req.getSession(false);
session.setMaxInactiveInterval(60 * 15); //15분
if(session != null){
ArrayList<String> cart = (ArrayList<String>)session.getAttribute("product");
out.println("<ul>상품목록");
for(int i = 0 ; i < cart.size() ; i++){
out.println("<li>" + cart.get(i) + "</li>");
}
out.println("</ul>");
}else{
out.print("<div style='color:red;font-size:1.5em;'>");
out.println("세션이 없습니다.</div>");
}
out.println("<a href='/0613/product1.html'>상품 선택 페이지</a>");
out.println("<a href='/0613/servlet/CartDeleteSession'>장바구니 비우기</a>");
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
this.doGet(req, resp);
}
}
CartDeleteSessionServlet.java
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 CartDeleteSessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body>");
out.println("<h1>장바구니 비우기</h1>");
HttpSession sesson = req.getSession(false);
if(sesson != null) sesson.invalidate();
else{
out.println("<div style='color:red;font-size:1.5em;'>");
out.println("세션이 없습니다.</div>");
}
out.println("<a href='/0613/product1.html'>상품선택페이지</a>");
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
this.doGet(req, resp);
}
}
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<display-name>Welcome to 0613 Web Project </display-name>
<servlet>
<servlet-class>CookieGetServlet</servlet-class>
<servlet-name>CookieGet</servlet-name>
</servlet>
<servlet>
<servlet-class>CookieSetServlet</servlet-class>
<servlet-name>CookieSet</servlet-name>
</servlet>
<servlet>
<servlet-class>ShoppingCartCookieServlet</servlet-class>
<servlet-name>ShoppingCartCookie</servlet-name>
</servlet>
<servlet>
<servlet-class>ShoppingCartSessionServlet</servlet-class>
<servlet-name>ShoppingCartSession</servlet-name>
</servlet>
<servlet>
<servlet-class>CartSaveServlet</servlet-class>
<servlet-name>CartSave</servlet-name>
</servlet>
<servlet>
<servlet-class>CartSaveSessionServlet</servlet-class>
<servlet-name>CartSaveSession</servlet-name>
</servlet>
<servlet>
<servlet-class>CartDeleteServlet</servlet-class>
<servlet-name>CartDelete</servlet-name>
</servlet>
<servlet>
<servlet-class>CartDeleteSessionServlet</servlet-class>
<servlet-name>CartDeleteSession</servlet-name>
</servlet>
<servlet>
<servlet-class>SessionTestServlet</servlet-class>
<servlet-name>SessionTest</servlet-name>
</servlet>
<servlet>
<servlet-class>CountServlet</servlet-class>
<servlet-name>Count</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>Count</servlet-name>
<url-pattern>/servlet/Count</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SessionTest</servlet-name>
<url-pattern>/servlet/SessionTest</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CookieGet</servlet-name>
<url-pattern>/servlet/CookieGet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CookieSet</servlet-name>
<url-pattern>/servlet/CookieSet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ShoppingCartCookie</servlet-name>
<url-pattern>/servlet/ShoppingCartCookie</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ShoppingCartSession</servlet-name>
<url-pattern>/servlet/ShoppingCartSession</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CartSave</servlet-name>
<url-pattern>/servlet/CartSave</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CartSaveSession</servlet-name>
<url-pattern>/servlet/CartSaveSession</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CartDelete</servlet-name>
<url-pattern>/servlet/CartDelete</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CartDeleteSession</servlet-name>
<url-pattern>/servlet/CartDeleteSession</url-pattern>
</servlet-mapping>
</web-app>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
==========================================
forward vs redirect
ForwardDemoServlet.java
/*
* Request Dispatcher (요청재전송) --> Forwarding
* 1. 사용자의 요청을 받은 서블릿 혹은 JSP 에서 다른 컴포넌트(다른 서블릿, 다른 JSP, html)로
* 요청을 위임할 수 있는 방법
* 2. 사용이유는 1)보안, 2) 처리작업의 모듈화
* 3. 직접 요청을 받은 서블릿 혹은 JSP는 모든 작업을 직접 처리하지 않고 모듈화시킨 다른
* 컴포넌트로 요청을 위임하여 처리할 수 있는 방법
* 4. 재사용성이 높아지고, 유지보수가 쉬워짐
* 5. 일반적으로 MVC패턴에서 서블릿이 JSP 페이지로 포워딩할 때 주로 사용함.
* 6. 사용자로부터 요청을 받은 페이지와 사용자에게 응답을 처리하는 페이지를 구별할 수 있다.
* 7. 일반적으로 이러한 패턴을 FrontController 패턴이라고 한다.
* 8. 요청을 받는 페이지는 서블릿으로 구현하고, 응답을 처리하는 페이지는 JSP 로 구현할 수 있다.
* 9. Model2(MVC) 의 핵심기능이다.
* 10. 요청한 자원의 포워딩 방법 2가지
* 1) RequestDispatcher의 forward() 메소드
* 2) ServletResponse 의 sendRedirect() 메소드
*/
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ForwardDemoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
ServletContext context = this.getServletContext();
RequestDispatcher rd =
context.getRequestDispatcher("/product.html");
rd.forward(req, res);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
this.doGet(req, res);
}
}
VisitServlet.java
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.Date;
import java.text.SimpleDateFormat;
public class VisitServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
out.println("<!DOCTYPE html><html lang=\"ko\">");
out.println("<head><title>Welcome Hello Servlet!</title>");
out.println("<meta charset='utf-8'>");
out.println("<style>");
out.println("body { background-color:yellow;font-size:1.5em;}");
out.println("div { color:blue;font-weight:900; }");
out.println("span {color:red;}");
out.println("</style></head><body>");
out.println("<div>");
String pattern = "귀하가 방문한 날짜와 시간은 Y년 M월 d일 H시 m분 s초 입니다.";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String str = sdf.format(new Date());
out.println("<span>" + str + "</span></div>");
out.println("</body></html>");
out.close();
}
}
-----------------------
ForwardTestServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ForwardTestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body bgcolor='red'>");
out.println("<h1>이 페이지는 절대로 보여지지 않아야 합니다.</h1>");
out.println("</body></html>");
ServletContext context = this.getServletContext();
RequestDispatcher rd =
context.getRequestDispatcher("/servlet/ForwardTest1");
rd.forward(req, res);
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
this.doGet(req, res);
}
}
ForwardTestServlet1.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ForwardTestServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body bgcolor='yellow'>");
out.println("<h1>나는 ForwardTestServlet1페이지입니다.</h1>");
out.println("<a href='/0613/servlet/ForwardTest'>원래 페이지</a>");
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
this.doGet(req, res);
}
}
-------------------------------
RedirectDemoServlet.java
/*
* Redirect
* 1. Forward와 마찬가지로 다른 웹 컴포넌트에게 페이지를 위임하는 방법
* 2. 차이점은 응답을 먼저하고 클라이언트의 브라우저가 다시 재요청하기 때문에,
* 브라우저의 URL 과 새로 응답하는 페이지가 같다.
* 3. response.sendRedirect(target)
* 4. target은 동일 컨텍스트의 서브릿, 혹은 JSP, 혹은 Html, 다른 컨텍스트, 다른 도메인,
* 다른 웹 서버도 가능
*
*/
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;
public class RedirectDemoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body bgcolor='red'>");
//res.sendRedirect("http://www.javaexpert.co.kr"); 1. 첫번째 방법
out.println("<script>"); //2. 두번째 방법
out.println("location.href = 'http://www.naver.com';");
out.println("</script>");
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
this.doGet(req, res);
}
}
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<display-name>Welcome to 0613 Web Project </display-name>
<servlet>
<servlet-class>CookieGetServlet</servlet-class>
<servlet-name>CookieGet</servlet-name>
</servlet>
<servlet>
<servlet-class>ForwardDemoServlet</servlet-class>
<servlet-name>ForwardDemo</servlet-name>
</servlet>
<servlet>
<servlet-class>CookieSetServlet</servlet-class>
<servlet-name>CookieSet</servlet-name>
</servlet>
<servlet>
<servlet-class>ShoppingCartCookieServlet</servlet-class>
<servlet-name>ShoppingCartCookie</servlet-name>
</servlet>
<servlet>
<servlet-class>ShoppingCartSessionServlet</servlet-class>
<servlet-name>ShoppingCartSession</servlet-name>
</servlet>
<servlet>
<servlet-class>CartSaveServlet</servlet-class>
<servlet-name>CartSave</servlet-name>
</servlet>
<servlet>
<servlet-class>CartSaveSessionServlet</servlet-class>
<servlet-name>CartSaveSession</servlet-name>
</servlet>
<servlet>
<servlet-class>CartDeleteServlet</servlet-class>
<servlet-name>CartDelete</servlet-name>
</servlet>
<servlet>
<servlet-class>CartDeleteSessionServlet</servlet-class>
<servlet-name>CartDeleteSession</servlet-name>
</servlet>
<servlet>
<servlet-class>SessionTestServlet</servlet-class>
<servlet-name>SessionTest</servlet-name>
</servlet>
<servlet>
<servlet-class>CountServlet</servlet-class>
<servlet-name>Count</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>ForwardDemo</servlet-name>
<url-pattern>/servlet/ForwardDemo</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Count</servlet-name>
<url-pattern>/servlet/Count</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SessionTest</servlet-name>
<url-pattern>/servlet/SessionTest</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CookieGet</servlet-name>
<url-pattern>/servlet/CookieGet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CookieSet</servlet-name>
<url-pattern>/servlet/CookieSet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ShoppingCartCookie</servlet-name>
<url-pattern>/servlet/ShoppingCartCookie</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ShoppingCartSession</servlet-name>
<url-pattern>/servlet/ShoppingCartSession</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CartSave</servlet-name>
<url-pattern>/servlet/CartSave</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CartSaveSession</servlet-name>
<url-pattern>/servlet/CartSaveSession</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CartDelete</servlet-name>
<url-pattern>/servlet/CartDelete</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CartDeleteSession</servlet-name>
<url-pattern>/servlet/CartDeleteSession</url-pattern>
</servlet-mapping>
</web-app>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
include
myimage.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<h1 style='text-align:center'>여신</h1>
<div style='text-align:center'><img src="/0613/images/jimin.jpg"></div>
</body>
</html>
IncludeDemoServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class IncludeDemoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
res.setContentType("text/html;charset=utf-8");
PrintWriter out = res.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<body bgcolor='red'>");
ServletContext context = this.getServletContext();
RequestDispatcher rd =
context.getRequestDispatcher("/myimage.html");
rd.include(req, res);
out.println("<hr>");
rd = context.getRequestDispatcher("/servlet/Visit");
rd.include(req, res);
out.println("</body></html>");
out.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
this.doGet(req, res);
}
}
web.xml
<servlet>
<servlet-class>IncludeDemoServlet</servlet-class>
<servlet-name>IncludeDemo</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>IncludeDemo</servlet-name>
<url-pattern>/servlet/IncludeDemo</url-pattern>
</servlet-mapping>
//이렇게 두개의 페이지를 붙이면 close가 두번 일어나므로, 포함되는 페이지는 close 하면 안된다. 그래서 위의 VisitServlet.java 에서 out.close(); 를 삭제한다.