JSP

JSP (서블릿, 세션, 장바구니)

code2772 2022. 11. 21. 08:35
728x90
반응형

✔ 서블릿

✔ 서블릿(Servlet)
      - Dynamic Web Page를 만들 때 사용되는 자바 기반의 웹 어플리케이션 프로그래밍 기술
      - 웹 요청과 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해주는 기술

      🔏 서블릿의 특징
      - 클라이언트의 Request에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
      - HTML을 사용하여 Response를 함
      - Java의 스레드를 이용하여 동작
      - MVC 패턴에서 컨트롤러로 이용  (Model/View/Controller)
      - HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpSevelt 클래스를 상속
      - HTML 변경시 Servelt을 재 컴파일해야 하는 단점

      🔏 서블릿 컨테이너
      - 서블릿을 담고 관리해주는 컨테이너

      - HttpServletRequest
      request 정보를 서블릿에게 전달하기 위한 목적으로 사용하며 헤더정보, 피라미터, 쿠키,
      URI, URL등의 정보를 읽어 들이는 메소드와 Body의 Stream을 읽어 들이는 메서드를
      가지고 있음

      - HttpServletResponse
      WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한
      HttpServletResponse 객체를 생성하여 서블릿에게 전달하고 이 객체를 활용하여
      content type, 응답코드, 응답메세지등을 전송

      🔏 서블릿의 동작 과정
      1. Servlet Request, Servlet Response 객체를 생성
      2. 설정 파일을 참고하여 매핑할 Servlet을 확인
      3. 해당 서블릿 인스턴스 존재의 유무를 확인하여 없으면 init() 메소드를 호출하여 생성
      4. Servlet Container에 스레드를 생성하고 service를 실행
      5. 응답을 처리했다면 distory() 메소드를 실행하여 Servlet Request, Servlet Response 객체를 소멸
   
   

 

✔ 서블릿 예제

<%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Servlet 테스트</title>
</head>
<body>
<h2>Servlet 테스트</h2>
<form method ="post"  action="Login">
<!-- action 의 Login은 @WebServlet("/Login")과 동일해야 한다 -->
      아이디: <input type ="text" name ="userid">
<button>로그인</button>
</form>

</body>
</html>

 

✔ 서블릿이용한 로그인

<%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
<%
      String userid = null;
      if(session.getAttribute("userid") != null){
      userid = (String)session.getAttribute("userid");
      }
      %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>서블릿 세션으로 구현한 로그인</title>

</head>
<body>
<h2>서블릿  세션으로 구현한 로그인</h2>

<%
      if(userid ==null){
      %>

<form method ="post" action="Login">
<p>아이디 : <input type ="text" name ="userid"></p>
<p>비밀번호 : <input type ="password" name ="userpw"></p>
<p><button>login</button></p>
</form>

<%
      }else{
      %>

<h3><%=userid %>님 환영합니다.</h3>
<p>
<a href ="Logout">로그아웃</a></p>
<!-- 기존에 같은 값으로 덮어씌우면 쿠키값을 없는것처럼 할 수 있고 아니면 시간을 0 또는 마이너스로 -->
<%
      }
      %>

</body>
</html>

 

✔ 서블릿이용한 로그인

package com.koreait;

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

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

/**
 * Servlet implementation class Login
 */
@WebServlet("/Login")
public class Login extends HttpServlet {
   private static final long serialVersionUID = 1L;

   /**
    * @see HttpServlet#HttpServlet()
    */
   public Login() {
      super();
      // TODO Auto-generated constructor stub
   }

   /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
    *      response)
    */
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
      /* System.out.println("doGet 메소드 호출!"); */
   }

   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
    *      response)
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter writer = response.getWriter();
      HttpSession session = request.getSession();

      String userid = request.getParameter("userid");
      String userpw = request.getParameter("userpw");
      System.out.println(userid);
      System.out.println(userpw);

      if (userid.equals("apple") && userpw.equals("1234")) {
         session.setAttribute("userid", userid);
         writer.println("<script>alert('로그인되었습니다.'); location.href='9_login.jsp';</script>");
//       response.sendRedirect("9_login.jsp");
      } else {
         writer.println("<script>alert('아이디 비번 확인.'); location.href='9_login.jsp';</script>");
//       response.sendRedirect("9_login.jsp");
      }
   }
}

 

✔ 서블릿이용한 로그인

package com.koreait;

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

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

/**
 * Servlet implementation class Logout
 */
@WebServlet("/Logout")
public class Logout extends HttpServlet {
   private static final long serialVersionUID = 1L;

   /**
    * @see HttpServlet#HttpServlet()
    */
   public Logout() {
      super();
      // TODO Auto-generated constructor stub
   }

   /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter writer = response.getWriter();
      HttpSession session = request.getSession();
      session.invalidate();
      writer.println("<script>alert('로그아웃되었습니다.'); location.href='9_login.jsp'; </script>");
//    response.sendRedirect("9_login.jsp");

   }// 서블릿으로 로그아웃 한 경우 URL을 타고 오기 때문에 get으로 온다

   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub
      doGet(request, response);
   }

}

 

✔ 서블릿을 활용한 장바구니 구현 과제

과제.
      JSP 세션을 이용한 장바구니 예제를 "서블릿을 이용한 장바구니" 로 변경

 

✔ 서블릿을 활용한 장바구니 구현1

<%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
<%@ page import ="java.util.List" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>서블릿으로 구현한 장바구니</title>
<script>
   function payment(){
         alert('결제페이지로 이동합니다.');
         location.href ='basket_payment';
         }
</script>
</head>
<body>
<h2>서블릿으로  구현한 장바구니</h2>
<form method = "post" action="basket_ok">
<p>구입할 물건을 선택하세요:
<select name ="product">
<option value ="그래픽 카드">그래픽 카드</option>
<option value ="닌텐도">닌텐도</option>
<option value ="멕북">멕북</option>
<option value ="모니터">모니터</option>
<option value ="페라리">페라리</option>
<option value ="집">집</option>
</select>
</p>
<p><input type = "submit" value ="담기"> | <input type ="button" value="결제" onclick ="payment()"></p>
</form>
<hr>
<p>
<%
      List<String> list = (List)session.getAttribute("productList");
      if(list != null){
      for(String product : list){
      out.print(product + "! ");
      }
      }
      %>
</p>
</body>
</html>

 

✔ 서블릿을 활용한 장바구니 구현2

package com.song;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

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

/**
 * Servlet implementation class basket_ok
 */
@WebServlet("/basket_ok")
public class basket_ok extends HttpServlet {
   private static final long serialVersionUID = 1L;

   /**
    * @see HttpServlet#HttpServlet()
    */
   public basket_ok() {
      super();
      // TODO Auto-generated constructor stub
   }

   /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

   }

   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      response.setContentType("text/html;charset=UTF-8");
      request.setCharacterEncoding("UTF-8");
      PrintWriter writer = response.getWriter();
      HttpSession session = request.getSession();

      String product = request.getParameter("product") == null ?
            "" : request.getParameter("product");

      List list = (List)session.getAttribute("productList");
      if(list == null){
         list = new ArrayList();
      }

      list.add(product);
      session.setAttribute("productList", list);

      writer.println("<script>alert('"+ product + "장바구니에 추가되었습니다.'); location.href='10_basket.jsp';</script>");

   }

}

 

✔ 서블릿을 활용한 장바구니 구현3

package com.song;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

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

/**
 * Servlet implementation class basket_payment
 */
@WebServlet("/basket_payment")
public class basket_payment extends HttpServlet {
   private static final long serialVersionUID = 1L;

   /**
    * @see HttpServlet#HttpServlet()
    */
   public basket_payment() {
      super();
      // TODO Auto-generated constructor stub
   }

   /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      response.setContentType("text/html;charset=UTF-8");
      request.setCharacterEncoding("UTF-8");
      PrintWriter writer = response.getWriter();
      HttpSession session = request.getSession();
      int sum =0;
      List<String> list = (List)session.getAttribute("productList");

      if(list != null){
         for(String product : list){
            if("그래픽 카드".equals(product)){
               sum+=1300000;
            }else if("닌텐도".equals(product)){
               sum+=400000;
            }else if("모니터".equals(product)){
               sum+=500000;
            }else if("멕북".equals(product)){
               sum+=3800000;
            }else if("페라리".equals(product)){
               sum+=320000000;
            }else if("집".equals(product)){
               sum+=800000000;
            }
         }


         writer.println("<script>if(confirm('"+ sum +"원을 결제하시겠습니까?'))"
               + "{alert('결제가 성공적으로 완료되었습니다.\\n 장바구니를 초기화합니다.');"
               + " location.href='basket_invalid';}else{alert('돈이 없군요....'); history.back();}</script>");
      }else {
         writer.println("<script>alert('상품X');history.back();</script>");
      }
   }

   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {



   }
}

 

✔ 서블릿을 활용한 장바구니 구현4

package com.song;

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

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

/**
 * Servlet implementation class basket_invalid
 */
@WebServlet("/basket_invalid")
public class basket_invalid extends HttpServlet {
   private static final long serialVersionUID = 1L;

   /**
    * @see HttpServlet#HttpServlet()
    */
   public basket_invalid() {
      super();
      // TODO Auto-generated constructor stub
   }

   /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      response.setContentType("text/html;charset=UTF-8");
      request.setCharacterEncoding("UTF-8");
      PrintWriter writer = response.getWriter();
      HttpSession session = request.getSession();

      session.invalidate();
      response.sendRedirect("10_basket.jsp");

      writer.println("location.href='10_basket.jsp';");
   }

   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {



   }

}

 

✔ 세션을 활용한 장바구니 구현 1

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
<%@ page import ="java.util.List" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션으로 구현한 장바구니</title>
<script>
   function payment(){
         alert('결제페이지로 이동합니다.');
         location.href ='7_basket_payment.jsp';
         }
</script>
</head>
<body>
<h2>세션으로  구현한 장바구니</h2>
<form method = "post" action="7_basket_ok.jsp">
<p>구입할 물건을 선택하세요:
<select name ="product">
<option value ="그래픽 카드">그래픽 카드</option>
<option value ="닌텐도">닌텐도</option>
<option value ="맥북">맥북</option>
<option value ="모니터">모니터</option>
<option value ="페라리">페라리</option>
<option value ="집">집</option>
</select>
</p>
<p><input type = "submit" value ="담기"> | <input type ="button" value="결제" onclick ="payment()"></p>
</form>
<hr>
<p>
<%
      List<String> list = (List)session.getAttribute("productList");
      if(list != null){
      for(String product : list){
      out.print(product + "! ");
      }
      }
      %>
</p>
</body>
</html>

✔  장바구니 구현 2

<%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
<%@ page import ="java.util.List"%>
<%
      int sum =0;
      List<String> list = (List)session.getAttribute("productList");

      if(list != null){
      for(String product : list){
      if("그래픽 카드".equals(product)){
      sum+=1300000;
      }else if("닌텐도".equals(product)){
      sum+=400000;
      }else if("모니터".equals(product)){
      sum+=500000;
      }else if("멕북".equals(product)){
      sum+=3800000;
      }else if("페라리".equals(product)){
      sum+=320000000;
      }else if("집".equals(product)){
      sum+=800000000;
      }
      }
      %>
<script>
   if(confirm('<%=sum%>원을 결제하시겠습니까?')){
         alert('결제가 성공적으로 완료되었습니다.\n 장바구니를 초기화합니다.');
         location.href='7_basket_invalid.jsp';
         }else{
         alert('돈이 없군요....');
         history.back();
         }
</script>

<%
      }else{
      %>
<script>
alert('상품이 없습니다.....');
      history.back();
</script>
<%
      }
      %>

 

✔  장바구니 구현 3

<%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
<%@ page import ="java.util.List" %>
<%@ page import = "java.util.ArrayList" %>
<%
      request.setCharacterEncoding("UTF-8");
      /* String product = request.getParameter("product"); */
      String product = request.getParameter("product") == null ?
      "" : request.getParameter("product");

      List list = (List)session.getAttribute("productList");
      if(list == null){
      list = new ArrayList();
      }

      list.add(product);
      session.setAttribute("productList", list);
      %>
<script>
    alert('<%=product%> 상품이 장바구니에 추가되었습니다.');
         location.href='7_basket.jsp';
</script>

 

✔  장바구니 구현 4

<%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
<%

      session.invalidate();
      response.sendRedirect("7_basket.jsp");
      %>

<!-- <script>
   location.href ="7_basket.jsp";
</script> -->
반응형