https://creamilk88.tistory.com/99?category=872953에서 이어지는 포스팅으로,
실제 DB에 연동되어 web에서 작업이 이루어지는 것을 보여주는 포스팅이다.
(MockDAO 가 아닌 ProductDAO로 실제 DB와 연동되는 차이가 있다.)
[ 프로그램 설계 순서 ]
1. error.jsp - 에러 페이지 생성
2. DispatcherServlet.java : 모든 클라이언트가 FrontContorller인 DispatcherServlet으로 요청한다
* FrontController Pattern : 모든 클라이언트의 요청을 하나의 진입점으로 집중시켜 일괄적으로 처리하기 위한 디자인 패턴
2_1. handleRequest() method만 생성해둠
2_2. doGet()과 doPost() method 각각에서 handleRequest() method가 호출되도록 기입
-- handleRequest()의 공통 방침--
- 에러 정책
- 에러 방생 시, 클라이언트에게 error.jsp를 제공하고,
- 에러메세지는 서버상의 콘솔에서만 보여준다. - client가 보낸 command를 받아온다.
- 실제 controller logic 구현은 개별 controller 객체를
객체 생성을 전담하는 HandlerMapping에게 의뢰해서 컨트롤러 객체를 반환받는다. - 개별 컨트롤러 객체의 구체적인 수행 내용을 알 필요없이
Controller 인터페이스의 추성 메서드인 execute(request, response) 메서드를 호출하여
개별 컨트롤러 로직을 실행시킨다. - 실행 후 반환되는 url 정보를 기반으로,
클라이언트에게 응답하기 위한 view로 이동할 방식을 선택해서 이동시킨다.
2_3. handleRequest() method에서 1단계 (에러정책) 구현
3. Controller.java : Controller interface 생성
Controller interface를 구현받을 하위 구현체들이 사용할 execute 메서드를 생성한다.
4. HandlerMapping.java : 컨트롤러 객체의 생성을 전담하는 Factory 클래스 - singleton pattern을 적용시킨다.
* 시스템 상에서 하나면 존재하면 되므로, Singleton Pattern을 적용해,
단 한번 생성되고, 이를 여러 곳에서 공유해서 사용할 수 있도록 ( getInstance() method를 통해) 한다.
5. DispatcherServlet.java 로 넘어와서, handleRequest() method 2~5단계 구현하여 완성
6. ProductVO.java / ProductDAO.java : MVC의 Model부분 (DAO class와 VO class 설계) 생성
* 1 ~ 6 단계까지는 한 번만 구현 및 생성해두면 두고두고 사용 가능하다!
기능을 추가/수정할때는 이 이후 단계에서 작업하면 된다.
-- 1번째 기능 추가
7. index.jsp : 1번째 service기능인 '전체 상품 수 조회' 링크 추가
<a href="front?command=totalCount">
* front : DispatcherServlet의 urlpattern
- DispatcherServlet에서 요청 처리 (TotalCountController) 후, (count-view.jsp)에서 응답
8. count-view.jsp : '전체 상품 수 조회' 결과 페이지 생성
9. HandlerMapping.java에서 create() method에 command 경우의 수 추가
: command에 들어오는 경우가 1번째 서비스(전체 상품 수 조회)인 경우 TotalProductCountContoller 생성하도록 구현
10. TotalProductCountContoller.java 생성 :
step1) model과 연동 - DAO
step2) 연동 결과를 view와 공유하기 위해 request.setAttribute(name, value)
step3) 응답 방식 및 응답 url을 반환
-- 2번째 기능 추가
11. index.jsp : 2번 service 기능인 '상품 검색' 링크 추가 (상품 아이디로 상품 정보 검색하기)
<a href = "find-product-form.jsp">
12. find-product-form.jsp : '상품 검색' form 페이지 생성
form.jsp -- request -- front(DispatcherSevlet) <-> HandlerMapping <-> Controller <-> ProductDAO
ㅣ forward
ㅣ
ㅣ find-fail.jsp or find-ok.jsp
<hidden> command = findproductbyid
13. find-fail.jsp : 일치하는 아이디가 없는 경우 이동하는 jsp 페이지 생성
--> java script 이용
1) alert 으로 경고 띄우고,
2) find-product-form.jsp로 이동
14. find-ok.jsp: 일치하는 아이디가 있는 경우 이동하는 jsp 페이지 생성
13. HandlerMapping.java에서 create() method에 command 경우의 수 추가
: command가 findproductbyid로 들어올 경우 ->2번째 서비스(상품 아이디로 상품 정보 검색하기)인 경우
FindProductByIdController 를 생성하도록 구현
14. FindProductByIdController.java 생성 :
step1) 클라이언트가 전달한 상품 아이디를 반환받는다.
step2) 모델과 연동 (productDAO의 findProductById(id) 이용)
step3) 연동 결과에 의해 상품 정보가 존재하지 않으면
-> find-fail.jsp로 이동 시킨다.(forward 방식)
step4) 연동 결과에 의해 상품 정보가 존재하면
-> request에 연동 결과를 공유하고 find-ok로 이동시킨다. (forward 방식)
15. find-ok.jsp에 반환값 수정 : FindProductByIdController에 따라 반환값을 받아올 수 있게끔 수정해준다.
-- 3번째 기능 : 전체 상품 리스트 table로 조회 (id와 name만)
위 방식과 동일하게 구현하면 된다 !
-- 4번째 기능 : 제조사 리스트 조회 + 제조사 리스트를 radio 버튼으로 만들어서 제조사 상품 정보 조회
(1번째 기능과 3번째 기능이 합쳐진 기능이다)
index.jsp에 새로운 기능 추가
maker-form.jsp 생성
HandlerMapping에 index.jsp에서 보낸 command(getmakerlist) 추가
기능을 수행할 Cotroller 생성 -> maker-form.jsp 로 보여주기
maker-form.jsp에 + submit 버튼 추가 + form에 action으로 다시 front(DispatcherServlet.java)로 넘어가게끔 설정+ input=hidden으로 command값으로 findproductlistbymaker주게끔 설정
HandlerMapping에 index.jsp에서 보낸 command (findproductlistbymaker)추가
기능을 수행할 Cotroller 생성
-> ProductDAO에 이 기능을 수행할 함수가 없다면 새로 생성해주기 (메이커로 상품정보 찾기)
productbymaker-list.jsp 에서 결과값 보여주기
[ 전체 구현 코드 ]
DB Table
Model
/ProductVO.java
package org.kosta.model;
public class ProductVO {
private String id;
private String name;
private String maker;
private int price;
public ProductVO() {
super();
}
public ProductVO(String id, String name, String maker, int price) {
super();
this.id = id;
this.name = name;
this.maker = maker;
this.price = price;
}
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;
}
@Override
public String toString() {
return "ProductVO [id=" + id + ", name=" + name + ", maker=" + maker + ", price=" + price + "]";
}
}
/ProductDAO.java
package org.kosta.model;
/* DB와 연동하여 기능하는 DAO class*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
/*
* Singleton Design Pattern 적용
* 1. private 생성자
* 2. private static 변수에 자신의 객체를 생성
* 3. public static method(getInstance())로 공유
*/
public class ProductDAO {
private static ProductDAO instance = new ProductDAO();
private String driver = "oracle.jdbc.OracleDriver";
private String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
private String username = "scott";
private String userpass = "tiger";
private ProductDAO() {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static ProductDAO getInstance() {
return instance;
}
public void closeAll(ResultSet rs, PreparedStatement pstmt, Connection con) throws SQLException {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
}
/*
* getTotalProductCount method()
* 1번 기능 -- 전체 상품 수 조회 기능
*/
public int getTotalProductCount() throws SQLException {
int count = 0;
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection(url, username, userpass);
String sql = "select count(*) from web_product";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
if (rs.next())
count = rs.getInt(1);
} finally {
closeAll(rs, pstmt, con);
}
return count;
}
/*
* findProductById method()
* 2번 기능 -- id를 통해 상품 정보 조회 기능
*/
public ProductVO findProductById(String id) throws SQLException {
ProductVO vo = null;
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection(url, username, userpass);
String sql = "select name,maker,price from web_product where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if (rs.next()) {
vo = new ProductVO(id, rs.getString(1), rs.getString(2), rs.getInt(3));
}
} finally {
closeAll(rs, pstmt, con);
}
return vo;
}
/*
* getAllProductList method()
* 3번 기능 -- DB에 있는 모든 Product의 정보 조회하는 기능
*/
public ArrayList<ProductVO> getAllProductList() throws SQLException {
ArrayList<ProductVO> list = new ArrayList<ProductVO>();
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection(url, username, userpass);
String sql = "select id,name from web_product order by id desc";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
ProductVO vo = new ProductVO();
vo.setId(rs.getString(1));
vo.setName(rs.getString(2));
list.add(vo);
}
} finally {
closeAll(rs, pstmt, con);
}
return list;
}
/*
* getMakerList method()
* 4번 기능 -- Maker 종류를 종회해서 리스트로 반환
*/
public ArrayList<String> getMakerList() throws SQLException {
ArrayList<String> list = new ArrayList<String>();
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection(url, username, userpass);
String sql = "SELECT DISTINCT(MAKER) FROM web_product";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
list.add(rs.getString(1));
}
} finally {
closeAll(rs, pstmt, con);
}
return list;
}
public static void main(String[] args) {
try {
ProductDAO.getInstance().getMakerList();
} catch (SQLException e) {
e.printStackTrace();
}
}
/*
* findProductByMaker method()
* 4_1번 기능 -- maker를 통해 상품 정보 조회 기능
*/
public ArrayList<ProductVO> findProductByMaker(String maker) throws SQLException {
ArrayList<ProductVO> list = new ArrayList<ProductVO>();
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection(url, username, userpass);
String sql = "select id,name,maker,price from web_product where maker=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, maker);
rs = pstmt.executeQuery();
while (rs.next()) {
ProductVO vo = new ProductVO(rs.getString(1), rs.getString(2),
rs.getString(3), rs.getInt(4));
list.add(vo);
}
} finally {
closeAll(rs, pstmt, con);
}
return list;
}
}
View
/index.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>
<h4>Model2 (MVC + FrontController) 상품관리</h4>
<ul>
<%--- DispatcherServlet에서 요청 처리
(TotalCountController) 후,
(count-view.jsp)에서 응답 --%>
<li><a href="front?command=totalCount">전체 상품수 조회</a></li>
<li><a href="find-product-form.jsp">상품 검색</a></li>
<li><a href="front?command=totalProduct">전체 상품 정보 조회</a></li>
<%--
command = getmakerlist --> MakerKindController <--> DAO
ㅣ
forward
ㅣ
maker-form.jsp
(제조사를 라디오 버튼으로 보여준다.)
--%>
<li><a href="front?command=getmakerlist">제조사 리스트 조회</a></li>
</ul>
</body>
</html>
/error.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>
<marquee>
시스템 에러가 발생했습니다. 콘솔을 확인하세요!<br>
<br> <img src="error.jpg">
</marquee>
</body>
</html>
-- 1번 기능 : 전체 상품 수 조회 결과 페이지
/count-view.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>
전체 상품 수: <%=request.getAttribute("totalCount") %>
</body>
</html>
-- 2번 기능 : 아이디로 상품 검색 페이지
/find-product-form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상품 검색</title>
</head>
<%--
form.jsp -- request -- front(DispatcherSevlet) <-> HandlerMapping <-> Controller <-> ProductDAO
ㅣ forward
ㅣ
ㅣ find-fail.jsp or find-ok.jsp
<hidden> command = findproductbyid
--%>
<body>
<form action="front">
<input type="hidden" name="command" value="findproductbyid">
상품 아이디 <input type="text" name="productId">
<input type="submit" value="검색">
</form>
</body>
</html>
/find-ok.jsp
<%@page import="org.kosta.model.ProductVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상품 상세 정보 페이지</title>
</head>
<body>
<% ProductVO vo = (ProductVO) request.getAttribute("vo"); %>
검색 결과 <br>
아이디 : <%=vo.getId() %><br>
제품명 : <%=vo.getName() %><br>
제조사 : <%=vo.getMaker() %><br>
가격 : <%=vo.getPrice() %><br>
</body>
</html>
/find-fail.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>
<script type="text/javascript">
alert("아이디에 대한 상품 정보가 존재하지 않습니다")
location.href = "find-product-form.jsp";
</script>
</body>
</html>
-- 3번 기능 : 전체 상품 리스트 조회 페이지
/product-view.jsp
<%@page import="org.kosta.model.ProductVO"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<link type="text/css" rel="stylesheet" href="css/mystyle.css">
<meta charset="UTF-8">
<title>전체 상품 정보 조회</title>
</head>
<body>
<%
@SuppressWarnings("unchecked")
ArrayList<ProductVO> list
= (ArrayList<ProductVO>) request.getAttribute("list");
%>
<table>
<thead>
<tr>
<th>ID</th>
<th>NAME</th>
</tr>
</thead>
<% for (ProductVO vo:list) { %>
<tr>
<td><%=vo.getId() %></td>
<td><%=vo.getName() %></td>
</tr>
<% } %>
<tbody>
</tbody>
</table>
</body>
</html>
-- 4번 기능 : 상품의 전체 메이커 종류 조회(라디오 버튼) + 메이커 별 상품 정보 조회
/maker-form.jsp
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>제조사 목록 조회</title>
</head>
<body>
<%
@SuppressWarnings("unchecked")
ArrayList<String> list = (ArrayList<String>) request.getAttribute("list");
%>
<form action="front">
<input type="hidden" name="command" value="findproductlistbymaker">
<%-- DB web_product table에 저장된 maker 종류를
아래의 radio button으로 제공 --%>
전체 상품 제조사 목록<br>
<%
for (int i = 0; i < list.size(); i++) {
%>
<input type="radio" name="maker" value="<%=list.get(i)%>"
required="required">
<%=list.get(i)%><br>
<%
}
%>
<input type="submit" value="maker별 검색">
</form>
</body>
</html>
/productbymaker-list.jsp
<%@page import="org.kosta.model.ProductVO"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>제조사 별 상품 상세 정보</title>
</head>
<body>
<%
@SuppressWarnings("unchecked")
ArrayList<ProductVO> list
= (ArrayList<ProductVO>) request.getAttribute("list");
%>
<table>
<thead>
<tr>
<th>ID</th>
<th>NAME</th>
<th>MAKER</th>
<th>PRICE</th>
</tr>
</thead>
<% for (ProductVO vo:list) { %>
<tr>
<td><%=vo.getId() %></td>
<td><%=vo.getName() %></td>
<td><%=vo.getMaker() %></td>
<td><%=vo.getPrice() %></td>
</tr>
<% } %>
<tbody>
</tbody>
</table>
</body>
</html>
Controller
/DispatcherServlet.java
package org.kosta.controller;
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;
/**
* FrontController의 역할
*
*/
@WebServlet("/front")
public class DispatcherServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// doGet method
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.handleRequest(request, response);
}
// doPost method
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Post방식에서 필요한 utf-8 인코딩 처리
request.setCharacterEncoding("utf-8");
this.handleRequest(request, response);
}
/*
* 1. 에러 정책
* - 에러 방생 시, 클라이언트에게 error.jsp를 제공하고,
* - 에러메세지는 서버상의 콘솔에서만 보여준다.
* 2. client가 보낸 command를 받아온다.
* 3. 실제 controller logic 구현은 개별 controller 객체를
* 객체 생성을 전담하는 HandlerMapping에게 의뢰해서 컨트롤러 객체를 반환받는다.
* 4. 개별 컨트롤러 객체의 구체적인 수행 내용을 알 필요없이
* Controller 인터페이스의 추성 메서드인 execute(request, response) 메서드를 호출하여
* 개별 컨트롤러 로직을 실행시킨다.
* 5. 실행 후 반환되는 url 정보를 기반으로,
* 클라이언트에게 응답하기 위한 view로 이동할 방식을 선택해서 이동시킨다.
*/
// handleRequest method
protected void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// 2. client가 보낸 command 받아오기
String command = request.getParameter("command");
//3. HandlerMapping를 통해 2에서 받은 command에 맞는 controller 생성
Controller controller = HandlerMapping.getInstance().create(command);
//4. 3에서 만든 controller에서 execute로 실행
//(trim으로 여백제거하여 url정의)
String url = controller.execute(request, response).trim();
//5. 4에서 반환된 url정보를 기반으로, view로 이동
//url이 redirect로 시작되면, redirect방식으로 보내기
if (url.startsWith("redirect:")) {
response.sendRedirect(url.substring(9));
} else { //아니면 forward 방식으로 보내기
request.getRequestDispatcher(url).forward(request, response);
}
} catch(Exception e) {
//1. 에러 정책
e.printStackTrace();
response.sendRedirect("error.jsp");
}
}
}
/ HandlerMapping.java
package org.kosta.controller;
/*
* 컨트롤러 객체의 생성을 전담하는 Factory 클래스 - singleton pattern을 적용시킨다.
* 시스템 상에서 하나면 존재하면 되므로, Singleton Pattern을 적용해,
* 단 한번 생성되고, 이를 여러 곳에서 공유해서 사용할 수 있도록 한다.
*/
public class HandlerMapping {
// Singleton 적용
private static HandlerMapping instance = new HandlerMapping();
private HandlerMapping() { }
public static HandlerMapping getInstance() {
return instance;
}
//create method 생성
public Controller create(String command) {
Controller controller = null;
if (command.contentEquals("totalCount"))
controller = new TotalProductCountContoller();
else if (command.contentEquals("findproductbyid"))
controller = new FindProductByIdController();
else if (command.contentEquals("totalProduct"))
controller = new TotalProductListController();
else if (command.contentEquals("getmakerlist"))
controller = new MakerKindController();
else if (command.contentEquals("findproductlistbymaker"))
controller = new FindProductListByMakerController();
return controller;
}
}
/controller.java
package org.kosta.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Controller {
//execute 메서드 생성
public String execute(HttpServletRequest request,
HttpServletResponse response) throws Exception;
}
-- 1번 기능 : 전체 상품 수 조회 기능 controller
/TotalProductCountContoller.java
package org.kosta.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.kosta.model.ProductDAO;
public class TotalProductCountContoller implements Controller {
//Controller의 execute method Overriding하여 구현
@Override
public String execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
/*
* step1) model과 연동 - DAO
* step2) 연동 결과를 view와 공유하기 위해 request.setAttribute(name, value)
* step3) 응답 방식 및 응답 url을 반환
*/
int totalCount = ProductDAO.getInstance().getTotalProductCount();
request.setAttribute("totalCount", totalCount);
//forward 방식으로 url 반환
return "count-view.jsp";
}
}
-- 2번 기능 : 아이디로 상품 정보 조회 기능 controller
/FindProductByIdController.java
package org.kosta.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.kosta.model.ProductDAO;
import org.kosta.model.ProductVO;
public class FindProductByIdController implements Controller {
@Override
public String execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
/* step1) 클라이언트가 전달한 상품 아이디를 반환받는다.
* step2) 모델과 연동 (productDAO의 findProductById(id) 이용)
* step3) 연동 결과에 의해 상품 정보가 존재하지 않으면
* -> find-fail.jsp로 이동 시킨다.(forward 방식)
* step4) 연동 결과에 의해 상품 정보가 존재하면
* -> request에 연동 결과를 공유하고 find-ok로 이동시킨다. (forward 방식)
*/
String id = request.getParameter("productId");
ProductVO vo = ProductDAO.getInstance().findProductById(id);
String url = null;
if (vo == null) { //상품 정보가 없으면
url = "find-fail.jsp";
} else { //상품 정보가 있으면
request.setAttribute("vo", vo);
url = "find-ok.jsp";
}
return url;
}
}
-- 3번 기능 : 전체 상품 리스트로 조회 기능 controller
/TotalProductListController.java
package org.kosta.controller;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.kosta.model.ProductDAO;
import org.kosta.model.ProductVO;
public class TotalProductListController implements Controller {
@Override
public String execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
/* step1) model과 연동 - DAO
* step2) 연동 결과를 view와 공유하기 위해 request.setAttribute(name, value)
* step3) 응답 방식 및 응답 url을 반환
*/
ArrayList<ProductVO> list = ProductDAO.getInstance().getAllProductList();
request.setAttribute("list", list);
return "product-view.jsp";
}
}
-- 4번 기능 : 전체 메이커 라디오 버튼으로 조회 기능 controller
+ 각 메이커 라디오 버튼 클릭 했을 때, 메이커 별 상풍 정보 조회 controller
/MakerKindController.java
package org.kosta.controller;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.kosta.model.ProductDAO;
public class MakerKindController implements Controller {
@Override
public String execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
ArrayList<String> list = ProductDAO.getInstance().getMakerList();
request.setAttribute("list", list);
return "maker-form.jsp";
}
}
/FindProductListByMakerController.java
package org.kosta.controller;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.kosta.model.ProductDAO;
import org.kosta.model.ProductVO;
public class FindProductListByMakerController implements Controller {
@Override
public String execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
String maker = request.getParameter("maker");
ArrayList<ProductVO> list = ProductDAO.getInstance().findProductByMaker(maker);
request.setAttribute("list", list);
return "productbymaker-list.jsp";
}
}
브라우저 결과 화면