Cute Blinking Unicorn

서버/JSP

247p 고급 컨트롤러 서블릿 구현

민밥통 2023. 12. 5. 17:26

뷰구현: productList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    
<!DOCTYPE html>
<html>
<head> 
<meta charset="UTF-8">
<title>상품 목록</title>
</head>
<body>
<h2>상품 목록</h2>
<hr>
<table border="1">
<tr>
<th>번호</th>
<th>상품명</th>
<th>가격</th>
<th>구입일</th>
</tr>
<c:forEach var="p" varStatus="i" items="${products}">
	<tr>
	<td>${i.count}</td>
	<td><a href="/jwbook/pcontrol?action=info&id=${p.id}">${p.name}</a></td>
	<td>${p.price}</td>
	<td>${p.date}</td>
	</tr>
</c:forEach>
</table>
</body>
</html>

상품 정보를 출력하는 화면을 만들기 위해 [ch08]에 파일 추가

productInfo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상품정보 조회</title>
</head>
<body>
<h2>상품정보 조회</h2>
<hr>
<ul>
	<li>상품코드: ${p.id}</li>
	<li>상품명: ${p.name}</li>
	<li>제조사: ${p.maker}</li>
	<li>가격: ${p.price}</li>
	<li>등록일: ${p.date}</li>
</ul>
</body>
</html>

 

이제 자바에 ch08패키지에 product 클래스 생성

package ch08;

public class Product {
	private String id;
	private String name;
	private String maker;
	private int price;
	private String date;
	
	
	public Product(String id, String name, String maker, int price, String date) {
		this.id = id;
		this.name = name;
		this.maker = maker;
		this.price = price;
		this.date = date;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getMaker() {
		return maker;
	}
	public void setMaker(String maker) {
		this.maker = maker;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public String getDate() {
		return date;
	}
	public void setDate(String date) {
		this.date = date;
	}
}

ProductService

이것도 추가

package ch08;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ProductService {
	Map<String, Product> products = new HashMap<>();
	
	public ProductService() {
		/*
		 * Product p = new Product("101","애플사과폰 12","애플전자",1200000,"2020.12.12");
		 * products.put("101", p); p = new
		 * Product("102","삼전우주폰 21","삼전전자",1300000,"2021.2.2"); products.put("102", p);
		 * p = new Product("103","엘스듀얼폰","엘스전자",1500000,"2021.3.2"); products.put("103",
		 * p);
		 */
		
		
		//객체 배열의 선언과 동시에 할당
		//인덱스를 이용한 초기화(5명을 보관할 수 있는 객체 배열 선언)
		Product[] p = new Product[5];
		
		p[0] = new Product("101","애플사과폰 12","애플전자",1200000,"2020.12.12");
		p[1] = new Product("102","삼전우주폰 21","삼전전자",1300000,"2021.2.2");		
		p[2] = new Product("103","엘스듀얼폰","엘스전자",1500000,"2021.3.2");	
		p[3] = new Product("104","민지폰 21","애플전자",1800000,"2021.2.10");	
		p[4] = new Product("105","민지옛날폰 21","애플전자",1300000,"2018.2.2");	
		
		//각 개체의 멤버에 접근 이름을 products.put로 추가하여서 출력
		for (int i = 0; i < p.length; i++) {
			products.put(p[i].getId(),p[i]);
		}
	}
	
	public List<Product> findAll() {
		return new ArrayList<>(products.values());
	}
	
	public Product find(String id) {
		return products.get(id);
	}
}

이제

컨트롤러 구현을 한다

(이것도 서블릿 추가로 해야하는데 체크박스 유심히 살펴보기 252 페이지 참고)

package ch08;

import java.io.IOException;

import javax.servlet.ServletConfig;
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 ProductController
 */
@WebServlet("/pcontrol")
public class ProductController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	ProductService service;
	
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
    	service = new ProductService();
	}

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String action = request.getParameter("action");
		String view = "";

		if(action == null) {
			getServletContext().getRequestDispatcher("/pcontrol?action=list").forward(request, response);
		} else {
			switch(action) {
			case "list": view = list(request, response);break;
			case "info": view = info(request, response);break;
			}
			getServletContext().getRequestDispatcher("/ch08/"+view).forward(request, response);			
		}
	}

	private String info(HttpServletRequest request, HttpServletResponse response) {
		request.setAttribute("p", service.find(request.getParameter("id")));
		return "productInfo.jsp";
	}

	private String list(HttpServletRequest request, HttpServletResponse response) {
		request.setAttribute("products", service.findAll());
		return "productList.jsp";
	}
}

jsp

 

jsp
컨트롤러

'서버 > JSP' 카테고리의 다른 글

JSTL (c: )  (0) 2023.12.07
html로 컨트롤러 들어가기  (1) 2023.12.07
243p 컨트롤러 계산기 구현  (0) 2023.12.05
h2 설치 및 활용  (1) 2023.12.05
MVC패턴  (1) 2023.12.05