course 2021/JDBC\DB

servlet03 - 07, 08, 09

코딩하는토끼 2021. 12. 2. 02:24

servlet07 → servlet06 혼자서 해보기

S04MainServlet

(서블릿 다른 폴더라도 같은 이름으로 생성하면 충돌 일어남)

package servlet07;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class S04MainServlet
 */
@WebServlet("/S04MainServlet")
public class S04MainServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public S04MainServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @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);
	}

}

doGet 메소드

response.getWriter().append("Served at: ").append(request.getContextPath());

 

 

s01main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">

<title>Insert title here</title>
</head>
<body>


<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>

 

S05AddServlet

package servlet07;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class S05AddServlet
 */
@WebServlet("/S05AddServlet")
public class S05AddServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public S05AddServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @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);
	}

}

또 doGet 에 

response.getWriter().append("Served at: ").append(request.getContextPath());

작성됨

 

s02add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">

<title>Insert title here</title>
</head>
<body>


<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>

 

 

S06ListServlet

package servlet07;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class S06ListServlet
 */
@WebServlet("/S06ListServlet")
public class S06ListServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public S06ListServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @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);
	}

}

마찬가지 doGet

 

s03list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">

<title>Insert title here</title>
</head>
<body>


<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>

마찬가지 내용없음


servlet08

S01BookMainServlet

package servlet08;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class S01BookMainServlet
 */
@WebServlet("/servlet08/main")
public class S01BookMainServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public S01BookMainServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String path = "/WEB-INF/view/servlet08/main.jsp";
		request.getRequestDispatcher(path).forward(request, response);
	}

	/**
	 * @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);
	}

}

doGet 에서 main.jsp 로 포워딩

 

S02BookAddServlet

package servlet08;

import java.io.IOException;
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;

import sample03javabean.Bean06;

/**
 * Servlet implementation class S02BookAddServlet
 */
@WebServlet("/servlet08/add")
public class S02BookAddServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public S02BookAddServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String path = "/WEB-INF/view/servlet08/add.jsp";
		request.getRequestDispatcher(path).forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 한글 인코딩
		// request.setCharacterEncoding("utf-8");
		
		// 0. 사전 작업
		HttpSession session = request.getSession();
		
		List<Bean06> list = (List<Bean06>) session.getAttribute("books");
		if (list == null) {
			list = new ArrayList<>();
			session.setAttribute("books", list);
		}
		
		// 2. 파라미터 분석/가공
		String title = request.getParameter("title");
		String writer = request.getParameter("writer");
		String priceStr = request.getParameter("price");
		String publisher = request.getParameter("publisher");
		String stockStr = request.getParameter("stock");
		
		int price = Integer.parseInt(priceStr);
		int stock = Integer.parseInt(stockStr);
		
		Bean06 book = new Bean06(title, writer, price, publisher, stock);
		
		// 3. 책 추가 - business logic
		list.add(book);
		
		// 4. 데이터를 attribute에 추가
		
		// 5. forward or redirect
		String location = request.getContextPath() + "/servlet08/list";
		response.sendRedirect(location);
	}

}

doGet 에서 add.jsp 로 포워딩

doPost 에서 리스트 생성, 값 전달받아 저장, 리스트에 추가, S03BookListServlet 으로 리디렉트

 

S03BookListServlet

package servlet08;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class S03BookListServlet
 */
@WebServlet("/servlet08/list")
public class S03BookListServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public S03BookListServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 3. business logic (db에서 책 목록 읽기)
		
		// 4. request attribute 추가
		
		// 5. forward
		String path = "/WEB-INF/view/servlet08/list.jsp";
		request.getRequestDispatcher(path).forward(request, response);
	}

	/**
	 * @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);
	}

}

doGet 에서 list.jsp 로 포워딩

 

add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<link rel="stylesheet" href="<%=request.getContextPath()%>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">

<title>Insert title here</title>
</head>
<body>
  <!-- .container>.row>.col-2+.col-10 -->
  <div class="container">
    <div class="row">
      <div class="col-2">
        <%-- side menu --%>
        <!-- ul.nav.flex-column>li.nav-item*3>a.nav-link -->
        <ul class="nav flex-column">
          <li class="nav-item">
            <a href="${pageContext.request.contextPath }/servlet08/main" class="nav-link">MAIN</a>
          </li>
          <li class="nav-item">
            <a href="${pageContext.request.contextPath }/servlet08/add" class="nav-link">ADD</a>
          </li>
          <li class="nav-item">
            <a href="${pageContext.request.contextPath }/servlet08/list" class="nav-link">LIST</a>
          </li>
        </ul>
      </div>
      <div class="col-10">
        <%-- main contents --%>
        <h1>책 추가</h1>
        <form method="post">
          <!-- .form-group*5>label+input.form-control -->
          <div class="form-group">
          	<label>제목</label>
          	<input type="text" class="form-control" name="title">
          </div>
          <div class="form-group">
          	<label>저자</label>
          	<input type="text" class="form-control" name="writer">
          </div>
          <div class="form-group">
          	<label>가격</label>
          	<input type="number" class="form-control" name="price">
          </div>
          <div class="form-group">
          	<label>출판사</label>
          	<input type="text" class="form-control" name="publisher">
          </div>
          <div class="form-group">
          	<label>재고</label>
          	<input type="number" class="form-control" name="stock">
          </div>
          <input type="submit" value="등록" class="btn btn-primary">
        </form>
      </div>
    </div>
  </div>


  <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>

main, add, list 링크걸고, 책추가 form - 제목, 저자, 가격, 출판사, 재고 - post 방식으로 전달

 

list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<link rel="stylesheet" href="<%=request.getContextPath()%>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">

<title>Insert title here</title>
</head>
<body>
  <!-- .container>.row>.col-2+.col-10 -->
  <div class="container">
    <div class="row">
      <div class="col-2">
        <%-- side menu --%>
        <!-- ul.nav.flex-column>li.nav-item*3>a.nav-link -->
        <ul class="nav flex-column">
          <li class="nav-item">
            <a href="${pageContext.request.contextPath }/servlet08/main" class="nav-link">MAIN</a>
          </li>
          <li class="nav-item">
            <a href="${pageContext.request.contextPath }/servlet08/add" class="nav-link">ADD</a>
          </li>
          <li class="nav-item">
            <a href="${pageContext.request.contextPath }/servlet08/list" class="nav-link">LIST</a>
          </li>
        </ul>
      </div>
      <div class="col-10">
        <%-- 메인 컨텐츠 - 책 목록 --%>
        <h1>책 목록</h1>
        <!-- table.table>thead>tr>th*6^^tbody -->
        <table class="table">
          <thead>
            <tr>
              <th>#</th>
              <th>제목</th>
              <th>저자</th>
              <th>가격</th>
              <th>출판사</th>
              <th>재고</th>
              <th>삭제</th>
              <th>수정</th>
            </tr>
          </thead>
          <tbody>
            <c:forEach items="${books }" var="book" varStatus="status">
              <tr>
                <td>${status.count }</td>
                <td>${book.title }</td>
                <td>${book.writer }</td>
                <td>${book.price }</td>
                <td>${book.publisher }</td>
                <td>${book.stock }</td>
                <td>
                  <c:url value="/servlet08/remove" var="removeUrl">
                    <c:param name="id" value="${status.index }" />
                  </c:url>
                  <!-- button.btn.btn-danger>i.fas.fa-trash -->
                  <button class="btn btn-danger removeBtn" data-toggle="modal" data-target="#confirmModal1" data-link="${removeUrl }">
                    <i class="fas fa-trash"></i>
                  </button>
                </td>
                <td>
                  <c:url value="/servlet08/modify" var="modifyUrl" >
                    <c:param name="id" value="${status.index }" />
                  </c:url>
                  <!-- a.btn.btn-warning>i.fas.fa-pencil -->
                  <a href="${modifyUrl }" class="btn btn-warning">
                  	<i class="fas fa-edit"></i>
                  </a>
                </td>
              </tr>
            </c:forEach>
          </tbody>
        </table>
      </div>
    </div>
  </div>

  <!-- Modal -->
  <div class="modal fade" id="confirmModal1" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title" id="exampleModalLabel">삭제 확인</h5>
          <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
          </button>
        </div>
        <div class="modal-body">삭제하시겠습니까?</div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
          <a id="removeModalBtn1" href="" type="button" class="btn btn-primary">확인</a>
        </div>
      </div>
    </div>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
  
  <script>
  	$(document).ready(function() {
  	  $(".removeBtn").click(function() {
  	    let link = $(this).attr("data-link");
  	    $("#removeModalBtn1").attr("href", link);
  	  });
  	});
  </script>
</body>
</html>

main, add, list 서블릿 링크 걸어둠

책목록 테이블로 출력

remove, modify url 걸어둠

 

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<link rel="stylesheet" href="<%=request.getContextPath()%>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">

<title>Insert title here</title>
</head>
<body>

  <!-- .container>.row>.col-2+.col-10 -->
  <div class="container">
    <div class="row">
      <div class="col-2">
        <%-- side menu --%>
        <!-- ul.nav.flex-column>li.nav-item*3>a.nav-link -->
        <ul class="nav flex-column">
        	<li class="nav-item">
        		<a href="${pageContext.request.contextPath }/servlet08/main" class="nav-link">MAIN</a>
        	</li>
        	<li class="nav-item">
        		<a href="${pageContext.request.contextPath }/servlet08/add" class="nav-link">ADD</a>
        	</li>
        	<li class="nav-item">
        		<a href="${pageContext.request.contextPath }/servlet08/list" class="nav-link">LIST</a>
        	</li>
        </ul>
      </div>
      <div class="col-10">
        <%-- main contents --%>
        <h1>책 관리 APP</h1>
      </div>
    </div>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>

main, add, list 서블릿 링크 걸어둠

책관리 app

 

modify.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<link rel="stylesheet" href="<%=request.getContextPath()%>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">

<title>Insert title here</title>
</head>
<body>
  <!-- .container>.row>.col-2+.col-10 -->
  <div class="container">
    <div class="row">
      <div class="col-2">
        <%-- side menu --%>
        <!-- ul.nav.flex-column>li.nav-item*3>a.nav-link -->
        <ul class="nav flex-column">
          <li class="nav-item">
            <a href="${pageContext.request.contextPath }/servlet08/main" class="nav-link">MAIN</a>
          </li>
          <li class="nav-item">
            <a href="${pageContext.request.contextPath }/servlet08/add" class="nav-link">ADD</a>
          </li>
          <li class="nav-item">
            <a href="${pageContext.request.contextPath }/servlet08/list" class="nav-link">LIST</a>
          </li>
        </ul>
      </div>
      <div class="col-10">
        <%-- main contents --%>
        <h1>책 수정</h1>
        <form method="post">
          <input type="hidden" name="index" value="${index }">
          <!-- .form-group*5>label+input.form-control -->
          <div class="form-group">
            <label>제목</label>
            <input type="text" class="form-control" name="title" value="${book.title }">
          </div>
          <div class="form-group">
            <label>저자</label>
            <input type="text" class="form-control" name="writer" value="${book.writer }">
          </div>
          <div class="form-group">
            <label>가격</label>
            <input type="number" class="form-control" name="price" value="${book.price }">
          </div>
          <div class="form-group">
            <label>출판사</label>
            <input type="text" class="form-control" name="publisher" value="${book.publisher }">
          </div>
          <div class="form-group">
            <label>재고</label>
            <input type="number" class="form-control" name="stock" value="${book.stock }">
          </div>
          <input type="submit" value="수정" class="btn btn-primary">
        </form>
      </div>
    </div>
  </div>


  <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>

책 수정 form

 

servlet09→ servlet08 혼자서 해보기~!

S04BookMainServlet

S05BookAddServlet

S06BookListServlet

 

+ 그리고 나중에 servlet8 에 추가된 세가지

S01BookCharEncodingFilter

package servlet08;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

/**
 * Servlet Filter implementation class S01BookCharEncodingFilter
 */
// @WebFilter("/S01BookCharEncodingFilter")
public class S01BookCharEncodingFilter implements Filter {

    /**
     * Default constructor. 
     */
    public S01BookCharEncodingFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here
		System.out.println("북차엔코딩필터!!");
		request.setCharacterEncoding("utf-8");
		
		// pass the request along the filter chain
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

filter - 다음 게시글에서 자세히 

 

S04BookRemoveServlet

package servlet08;

import java.io.IOException;
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;

import sample03javabean.Bean06;

/**
 * Servlet implementation class S04BookRemoveServlet
 */
@WebServlet("/servlet08/remove")
public class S04BookRemoveServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public S04BookRemoveServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 0. 사전 작업
		HttpSession session = request.getSession();
		List<Bean06> books = (List<Bean06>) session.getAttribute("books");
		
		// 2. 요청 처리(파라미터 수집/가공)
		String indexStr = request.getParameter("id");
		int index = Integer.parseInt(indexStr);
		
		// 3. business 로직 
		books.remove(index);
		
		// 4. data를 attribute에 추가
		
		
		// 5. forward / redirect
		String location = request.getContextPath() + "/servlet08/list";
		response.sendRedirect(location);
	}

	/**
	 * @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);
	}

}

doGet 만 작성됨 - list 서블릿으로 리디렉트 

 

S05BookModifyServlet 

package servlet08;

import java.io.IOException;
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;

import sample03javabean.Bean06;

/**
 * Servlet implementation class S05BookModifyServlet
 */
@WebServlet("/servlet08/modify")
public class S05BookModifyServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public S05BookModifyServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 0. 사전작업
		HttpSession session = request.getSession();
		List<Bean06> list = (List<Bean06>) session.getAttribute("books");
		
		// 2. request 분석/가공
		String idStr = request.getParameter("id");
		int index = Integer.parseInt(idStr);
		
		// 3. 비지니스 로직
		Bean06 book = list.get(index);
		
		// 4. attribute 추가
		request.setAttribute("index", index);
		request.setAttribute("book", book);
		
		// 5. forward/redirect
		String path = "/WEB-INF/view/servlet08/modify.jsp";
		request.getRequestDispatcher(path).forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 0. 사전작업
		HttpSession session = request.getSession();
		List<Bean06> list = (List<Bean06>) session.getAttribute("books");
		
		// request.setCharacterEncoding("utf-8");
		
		// 2. request 분석/가공
		String indexStr = request.getParameter("index");
		String title = request.getParameter("title");
		String writer = request.getParameter("writer");
		String priceStr = request.getParameter("price");
		String publisher = request.getParameter("publisher");
		String stockStr = request.getParameter("stock");
		
		int index = Integer.parseInt(indexStr);
		int price = Integer.parseInt(priceStr);
		int stock = Integer.parseInt(stockStr);
		
		// 3. 비지니스 로직
		Bean06 book = list.get(index);
		book.setTitle(title);
		book.setWriter(writer);
		book.setPrice(price);
		book.setPublisher(publisher);
		book.setStock(stock);
		
		// 4. attribute
		
		// 5. forward/redirect
		String location = request.getContextPath() + "/servlet08/list";
		response.sendRedirect(location);
	}

}

doGet - 뭐라고 작성된 후 modify.jsp 로 포워딩됨

doPost - 뭐라고 작성된 후 list 서블릿으로 리디렉트됨