[JSP MVC2] 강의 정리 6 - 관리자 상품 수정 페이지

별의개발자커비·2023년 7월 6일
0

JSP

목록 보기
24/31
post-thumbnail

강좌 92 - 공지사항 등록을 위한 Controller/View 준비하기

1. 상품 수정 창 준비

- admin/product/edit.jsp 파일 준비

01. admin/product/EditController.jsp

package controller.admin.product;

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;

import entity.Product;
import service.ProductService;

/*
 * 여기서 처리할 것
 * 상품 등록 get
 * 등록창 반영 처리 post
 */

@WebServlet("/admin/product/reg")
public class RegController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	String id = request.getParameter("id");	
	
	ProductService productsService = new ProductService();
	Product product = productsService.getProduct(id);
	
	// redirect
	request.setAttribute("p", product);
	
	request.getRequestDispatcher("/WEB-INF/view/admin/product/reg.jsp").forward(request, response);	
	}

@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}
}

02 admin/product/edit.jsp

  • submit 등록버튼 : action="./processUpdateProduct.jsp"로 가는데 저 파일 수정 필요
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<link href="/resources/css/styles.css" rel="stylesheet" />
<link rel="stylesheet" href="/resources/css/bootstrap.min.css" />
<script
	src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="/resources/js/scripts.js"></script>
<title>상품 수정</title>
</head>
<body>
	<jsp:include page="../../../../menuAdmin.jsp" />
		<header class="bg-dark py-5" style="margin-bottom: 50px">
		<div class="container px-4 px-lg-5 my-5">
			<div class="text-center text-white">
				<h1 class="display-4 fw-bolder">상품수정</h1>
			</div>
		</div>
	</header>
	<div class="container">
		<div class="row">
			<div class="col-md-5">
				<img src="/img/${p.filename}" alt="image"
					style="width: 100%" />
			</div>
			<div class="col-md-7">
				<form name="newProduct" action="./processUpdateProduct.jsp"
					class="form-horizontal" method="post" enctype="multipart/form-data">
					<div class="form-group row">
						<label class="col-sm-2">상품 코드</label>
						<div class="col-sm-3">
							<input type="text" id="productId" name="productId"
								class="form-control" value='${p.productId }'>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">상품명</label>
						<div class="col-sm-3">
							<input type="text" id="name" name=name class="form-control"
								value="${p.pname }">
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">가격</label>
						<div class="col-sm-3">
							<input type="text" id="unitPrice" name="unitPrice"
								class="form-control" value="${p.unitPrice}">
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">상세 설명</label>
						<div class="col-sm-5">
							<textarea name="descriptions" cols="50" rows="2"
								class="form-control">${p.description}</textarea>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">제조사</label>
						<div class="col-sm-3">
							<input type="text" name="manufacturer" class="form-control"
								value="${p.manufacturer}">
						</div>
					</div>
					<%-- <div class="form-group row">
						<label class="col-sm-2">분류</label>
						<div class="col-sm-3">
							<input type="text" name="category" class="form-control"
								value="<%=rs.getString("category")%>">
						</div>
					</div> --%>
					
					<div class="form-group row">
						<label class="col-sm-2">분류</label>
						<div class="col-sm-5">
							<input type="radio" name="category" value="Phone "> 휴대폰 <input
								type="radio" name="category" value="Tab"> 태블릿PC <input
								type="radio" name="category" value="Notebook"> 노트북 <input
								type="radio" name="category" value="PC"> PC <input
								type="radio" name="category" value="Audio"> 음향 가전 <input
								type="radio" name="category" value="other"> 기타
						</div>
					</div>
					
					<div class="form-group row">
						<label class="col-sm-2">재고수</label>
						<div class="col-sm-3">
							<input type="text" id="unitsInStock" name="unitsInStock"
								class="form-control" value="${p.unitsInStock}">
						</div>
					</div>
					
					<div class="form-group row">
						<label class="col-sm-2">이미지</label>
						<div class="col-sm-5">
							<input type="file" name="filename" class="form-control">
						</div>
					</div>
					<div class="form-group row">
						<div class="col-sm-offset-2 col-sm-10 ">
							<input type="submit" class="btn btn-primary" value="등록">
						</div>
					</div>
				</form>

			</div>
		</div>
	</div>
</body>
</html>

- 결과

04. 이어서 수정 processUpdateProduct.jsp

- @ 여기는 강의 게시물 수정에서 보고 해야할듯

2. 상품 등록 창 준비

- admin/product/add.jsp (+controller)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    
<!DOCTYPE html>
<html>
<head>
<link href="/resources/css/styles.css" rel="stylesheet" />
<link rel="stylesheet" href="/resources/css/bootstrap.min.css" />
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="/resources/js/scripts.js"></script>
<meta charset="UTF-8">
<title>상품등록</title>
</head>
<body>
	<fmt:setLocale value='<%=request.getParameter("language")%>' />
		<fmt:bundle basename="bundle.message">
			<jsp:include page="../../../../menuAdmin.jsp" />
	
			<header class="bg-dark py-5" style="margin-bottom: 50px">
				<div class="container px-4 px-lg-5 my-5">
					<div class="text-center text-white">
						<h1 class="display-4 fw-bolder">상품등록</h1>
					</div>
				</div>
			</header>
			<div class="container">
				<div class="text-right">
					<a href="?language=ko">Korean</a>|<a href="?language=en">English</a>
					<!--로그아웃 일단 주석 <a href="logout.jsp" class="btn btn-sm btn-success pull-right">logout</a> -->
				</div> 
				<form name="newProduct" action="./processAddProduct.jsp"
					class="form-horizontal" method="post" enctype="multipart/form-data">
					<div class="form-group row">
						<label class="col-sm-2"><fmt:message key="productId" /></label>
						<div class="col-sm-3">
							<input type="text" id="productId" name="productId"
								class="form-control">
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2"><fmt:message key="pname" /></label>
						<div class="col-sm-3">
							<input type="text" id="name" name="name" class="form-control">
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2"><fmt:message key="unitPrice" /></label>
						<div class="col-sm-3">
							<input type="text" id="unitPrice" name="unitPrice"
								class="form-control">
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2"><fmt:message key="description" /></label>
						<div class="col-sm-5">
							<textarea name="description" cols="50" rows="2"
								class="form-control"></textarea>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2"><fmt:message key="manufacturer" /></label>
						<div class="col-sm-3">
							<input type="text" name="manufacturer" class="form-control">
						</div>
					</div>
	
					<div class="form-group row">
						<label class="col-sm-2"><fmt:message key="category" /></label>
						<div class="col-sm-8">
							<input type="radio" name="category" value="Phone "> Phone
							<input type="radio" name="category" value="Tab"
								style="margin-left: 10px"> Tab <input type="radio"
								name="category" value="Notebook" style="margin-left: 10px">
							Notebook <input type="radio" name="category" value="PC"
								style="margin-left: 10px"> PC <input type="radio"
								name="category" value="Audio" style="margin-left: 10px">
							Audio <input type="radio" name="category" value="Other"
								style="margin-left: 10px"> Other
						</div>
					</div>
	
					<div class="form-group row">
						<label class="col-sm-2"><fmt:message key="unitsInStock" /></label>
						<div class="col-sm-3">
							<input type="text" id="unitsInStock" name="unitsInStock"
								class="form-control">
						</div>
					</div>
	
	
	
					<div class="form-group row">
						<label class="col-sm-2"><fmt:message key="productImage" /></label>
						<div class="col-sm-5">
							<input type="file" name="productImage" class="form-control">
						</div>
					</div>
					<div class="form-group row">
						<div class="col-sm-offset-2 col-sm-10 ">
							<input type="submit" class="btn btn-primary"
								value="<fmt:message key="button" />">
							<!-- onclick="CheckAddProduct()" -->
						</div>
					</div>
				</form>
			</div>
		 </fmt:bundle> 
</body>
</html>

결과


화면출력: printWirter 있었지

PrintWriter out = response.getWriter();
	out.printf("name: %s ", pname);
    

한글 깨짐 오류

강좌 93 - pub 컬럼 추가에 대한 변경사항 처리

  • pub: 공개여부

0-1. 한글 입력 문제

  • 한글은 한 글자에 2byte, 영어는 한글자에 1byte -> 2바이트 1글자로 보냈는데 1바이트 1글자로 받으니까 깨짐

  • 해결방법: 받는 쪽에서 setChatacterEncoding("UTF-8") 로 받기

0-2. 서블릿 필터

방법 1: web.xml

package filter;

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;

public class CharacterEncodingFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request
			, ServletResponse response
			, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		System.out.println(1234);
		chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub

	}

}

방법2: @webfilter("*/")

package filter;

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;

@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request
			, ServletResponse response
			, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub

	}

}

0-3. 근데 PrintWriter out = response.getWriter()로 깨지는 건 다른 해결방법

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
  • 결과

1. entity 객체 Product 속성 추가

  • 변수, 생성자, toString, getter, setter

2. db view 추가

  • db column 자체에는 이전에 추가했음

3. ProductView 속성에 추가

4. ProductServie에 추가

  • DB에서 pub라는 column 하나 추가했더니 해야하는 일이 이렇게나 많음

강좌 94 - 공지사항 등록하기

1. insertProduct(Product product) 메소드 만들기

2. AddController

package controller.admin.product;

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

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 com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;

import entity.Product;
import service.ProductService;

// post가 필요하려나?: o -> 상품 등록 처리해야하니까
// get은 그냥 처음 등록창 보여주는 거고

@WebServlet("/admin/product/add")
public class AddController extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/WEB-INF/view/admin/product/add.jsp").forward(request, response);	
	}
	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		
		String productId = request.getParameter("productId");	 
		String pname= request.getParameter("pname");	 	 
		Integer unitPrice= Integer.parseInt(request.getParameter("unitPrice"))  ;	 
		String description= request.getParameter("description");	 
		String manufacturer= request.getParameter("manufacturer");	 
		String category= request.getParameter("category");	 	 
		long unitsInStock= Long.parseLong(request.getParameter("unitPrice"))   ;
		//String filename= request.getParameter("productImage");	 
		String isOpen= request.getParameter("open");	// true or null
		Boolean pub = false;
		if(isOpen != null)
			pub = true;
		
		Product product = new Product();
			product.setCategory(category);
			product.setDescription(description);
			product.setManufacturer(manufacturer);
			product.setPname(pname);
			product.setProductId(productId);
			product.setUnitPrice(unitPrice);
			product.setUnitsInStock(unitsInStock);
			product.setPub(pub);
		
		ProductService productService = new ProductService();
		productService.insertProduct(product);
		
		response.sendRedirect("list");
	}
	

}

결과

강좌 95 - 관리자 공지사항 자세한 페이지 추가

강좌92에서 한 일

@ 등록일 나중에 추가해야할듯

profile
비전공자 독학러. 일단 쌔린다. 개발 공부👊

0개의 댓글