이렇게 생긴 PRODUCTS 테이블을 가지고 지난번과 같은 형식의 페이지들을 만들어 볼 것임.
1. index.jsp 페이지 만들기
- 제목이랑 a태그로 /select.do 로 연결되는 링크 만들기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<hr width="50%" color="blue">
<h3>Products 테이블 메인 페이지</h3>
<hr width="50%" color="blue">
<br> <br>
<a href="<%=request.getContextPath() %>/select.do">[제품 전체 목록]</a>
</div>
</body>
</html>
|
cs |
2. ProductDTO.java 클래스 만들기
-테이블의 데이터를 넣어 관리할 DTO 생성.
-PRODUCTS 테이블의 각 컬럼들을 private 변수로 잡아준다. (status는 그냥 입력할 거라 뺐음.)
-그 후 각각의 get, set 메서드 작성.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
package com.product.model;
public class ProductDTO {
private int pnum;
private String category_fk;
private String products_name;
private String ep_code_fk;
private int input_price;
private int output_price;
private int trans_cost;
private int mileage;
private String company;
public int getPnum() {
return pnum;
}
public void setPnum(int pnum) {
this.pnum = pnum;
}
public String getCategory_fk() {
return category_fk;
}
public void setCategory_fk(String category_fk) {
this.category_fk = category_fk;
}
public String getProducts_name() {
return products_name;
}
public void setProducts_name(String products_name) {
this.products_name = products_name;
}
public String getEp_code_fk() {
return ep_code_fk;
}
public void setEp_code_fk(String ep_code_fk) {
this.ep_code_fk = ep_code_fk;
}
public int getInput_price() {
return input_price;
}
public void setInput_price(int input_price) {
this.input_price = input_price;
}
public int getOutput_price() {
return output_price;
}
public void setOutput_price(int output_price) {
this.output_price = output_price;
}
public int getTrans_cost() {
return trans_cost;
}
public void setTrans_cost(int trans_cost) {
this.trans_cost = trans_cost;
}
public int getMileage() {
return mileage;
}
public void setMileage(int mileage) {
this.mileage = mileage;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
}
|
cs |
3. ProductDAO.java 클래스 작성
-DB와 연동을 하고 DB에서 데이터를 가져오고 내보내기 위한 클래스.
-제품목록 전체조회, 상품 상세정보, 제품 추가, 상세정보 수정, 제품 삭제를 위한 메서드를 작성.
-**DAO 객체를 계속 생성하지 않기 위하여 싱글턴 방식을 사용했음.
-이걸 만들면서 전체를 다 구상해서 미리 메서드를 다 만들긴 힘들고 다른 view page들을 만들면서 필요한 걸 생각해서 메서드를 작성했음.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
|
package com.product.model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class ProductDAO {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
//싱글톤 방식으로 ProductDAO 만들기
//1단계: 싱글톤 방식으로 객체를 만들기 위해서는 기본 생성자의 접근 제어자를 private으로 해주어야 함.
//2단계: ProductDAO 객체를 static 멤버로 선언해야 함.
private static ProductDAO instance = null;
private ProductDAO() { }
//3단계: 기본 생성자 대신에 싱글턴 객체를 return 해주는 getInstance()
public static ProductDAO getinstance() {
if(instance == null) {
instance = new ProductDAO();
}
return instance;
}
//DB를 연동
public void openConn() {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "web";
String password = "1234";
try {
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public List<ProductDTO> getProductList() {
List<ProductDTO> list = new ArrayList<ProductDTO>();
//오라클 DB 연동
openConn();
try {
sql = "select * from products order by pnum desc";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
ProductDTO dto = new ProductDTO();
dto.setPnum(rs.getInt("pnum"));
dto.setCategory_fk(rs.getString("category_fk"));
dto.setProducts_name(rs.getString("products_name"));
dto.setEp_code_fk(rs.getNString("ep_code_fk"));
dto.setInput_price(rs.getInt("input_price"));
dto.setOutput_price(rs.getInt("output_price"));
dto.setTrans_cost(rs.getInt("trans_cost"));
dto.setMileage(rs.getInt("mileage"));
dto.setCompany(rs.getString("company"));
list.add(dto);
}
rs.close(); pstmt.close(); con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
//category 테이블에서 카테고리 전체 리스트를 조회
public List<CategoryDTO> getCategoryList() {
List<CategoryDTO> list = new ArrayList<CategoryDTO>();
openConn();
try {
sql = "select * from category order by category_code";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
CategoryDTO dto = new CategoryDTO();
dto.setCnum(rs.getInt("cnum"));
dto.setCategory_code(rs.getString("category_code"));
dto.setCategory_name(rs.getString("category_name"));
list.add(dto);
}
rs.close(); pstmt.close(); con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
public int insertProduct(ProductDTO dto) {
int result = 0;
int count = 0;
openConn();
try {
sql = "select max(pnum) from products";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next()) {
count = rs.getInt(1) + 1;
}
sql = "insert into products values(?, ?, ?, ?, ?, ?, ?, ?, ?, 1)";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, count);
pstmt.setString(2, dto.getCategory_fk());
pstmt.setString(3, dto.getProducts_name());
pstmt.setString(4, dto.getEp_code_fk());
pstmt.setInt(5, dto.getInput_price());
pstmt.setInt(6, dto.getOutput_price());
pstmt.setInt(7, dto.getTrans_cost());
pstmt.setInt(8, dto.getMileage());
pstmt.setString(9, dto.getCompany());
result = pstmt.executeUpdate();
rs.close(); pstmt.close(); con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
public ProductDTO getContentProduct(int num) {
ProductDTO dto = new ProductDTO();
openConn();
try {
sql = "select * from products where pnum = ?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);
rs = pstmt.executeQuery();
while(rs.next()) {
dto.setPnum(rs.getInt("pnum"));
dto.setCategory_fk(rs.getString("category_fk"));
dto.setProducts_name(rs.getString("products_name"));
dto.setEp_code_fk(rs.getNString("ep_code_fk"));
dto.setInput_price(rs.getInt("input_price"));
dto.setOutput_price(rs.getInt("output_price"));
dto.setTrans_cost(rs.getInt("trans_cost"));
dto.setMileage(rs.getInt("mileage"));
dto.setCompany(rs.getString("company"));
}
rs.close(); pstmt.close(); con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return dto;
}
public int updateProduct(ProductDTO dto) {
int result=0;
openConn();
try {
sql = "update products set input_price=?, output_price=?, "
+ "trans_cost=?, mileage=?, company=? where pnum = ?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(6, dto.getPnum());
pstmt.setInt(1, dto.getInput_price());
pstmt.setInt(2, dto.getOutput_price());
pstmt.setInt(3, dto.getTrans_cost());
pstmt.setInt(4, dto.getMileage());
pstmt.setString(5, dto.getCompany());
result = pstmt.executeUpdate();
pstmt.close(); con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
public int deleteProduct(int num) {
int result = 0;
openConn();
try {
sql = "delete from products where pnum=?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);
result = pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
public void updateCount(int num) {
openConn();
try {
sql = "update products set pnum = pnum-1 where pnum > ?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);
pstmt.executeUpdate();
pstmt.close(); con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
|
cs |
4. SelectServlet.java 서블릿 만들기
-URL매핑은 /select.do 로 해야함.
-ProductDAO 객체를 생성하여 테이블 전체 목록을 가져오는 메서드를 이용할 것임.
-목록을 출력한 후 product_list.jsp 페이지로 가져온 데이터를 넘겨줄 것임.
-DAO에 getProductList() 라는 메서드를 만들어서 전체 데이터를 가져올 것임.
-request.setAttribute를 사용하여 product_list.jsp 페이지로 데이터를 넘겨주어 출력할 것임.
-RequestDispatcher 객체의 forward() 메서드를 이용할 것임.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
package com.product.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
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.product.model.ProductDAO;
import com.product.model.ProductDTO;
/**
* Servlet implementation class SelectServlet
*/
@WebServlet("/select.do")
public class SelectServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SelectServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 제품 전체 목록 요청에 대한 응답.
// DB에서 products 테이블의 제품 전체 목록을 조회하여
// 제품전체목록을 받은 후 view page로 페이지 이동작업을 진행
ProductDAO dao = ProductDAO.getinstance();
//전체 리스트 가져오는 메서드 호출
List<ProductDTO> productList = dao.getProductList();
//view page로 해당 데이터를 이동시키기
request.setAttribute("pList", productList);
//page이동작업
RequestDispatcher rd = request.getRequestDispatcher("view/product_list.jsp");
rd.forward(request, response);
}
}
|
cs |
5. product_list.jsp 작성하기
-WebContent 하위에 view 폴더를 만들고 그 아래에 product_list.jsp 생성
-먼저 SelectServlet에서 보낸 데이터를 받기 위해 스크립틀릿 사용하여 받아옴.
-html 부분에 테이블 형식으로 각 컬럼의 데이터 중 제품번호, 카테고리 코드, 제품명, 제조사를 출력.
-제품명을 눌렀을 때 /content.do 서블릿으로 넘어가는 링크걸기.
-제조사는 null인 경우 공백을 출력하도록 작성.
-SelectServlet에서 보낸 데이터가 없는 경우엔 "검색된 제품 목록이 없습니다" html로 출력.
-테이블 최하단에는 제품등록 버튼을 만들고 누르면 /insert.do로 연결되도록 함.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
<%@page import="com.product.model.ProductDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
List<ProductDTO> list = (List<ProductDTO>)request.getAttribute("pList");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<hr width="50%" color="red">
<h3>Product 테이블 전체 출력</h3>
<hr width="50%" color="red">
<form>
<table border="1" cellspacing="0" width="600">
<tr>
<th>제품No.</th> <th>카테고리 코드</th> <th>제품명</th> <th>제조사</th>
</tr>
<%
if(list.size() != 0) {
for(int i=0; i<list.size(); i++) {
ProductDTO dto = list.get(i);
%>
<tr>
<td> <%=dto.getPnum() %> </td>
<td> <%=dto.getCategory_fk() %> </td>
<td>
<a href="<%=request.getContextPath() %>/content.do?num=<%=dto.getPnum() %>">
<%=dto.getProducts_name() %> </a>
</td>
<%
if(dto.getCompany() == null) {
%>
<td> </td>
<% }else { %>
<td> <%=dto.getCompany() %> </td>
<% } %>
</tr>
<% }
}else {
%>
<tr>
<td colspan="4" align="center">
<h3>검색된 제품 목록이 없습니다...</h3>
</td>
</tr>
<% } %>
<tr>
<td colspan="4" align="right">
<input type="button" value="제품등록"
onclick="location.href='insert.do'">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
|
cs |
6. InsertServlet.java 작성하기
-urlmapping => /insert.do
-제품 등록 폼 페이지에서 카테고리 코드 입력을 실수하지 않도록 하기 위해서
-존재하는 카테고리 코드를 셀렉트 형태로 보여주기 위해 그 데이터를 받아서 폼에 보내주기 위한 서블릿.
-dao 생성하고 dao에 getCategoryList() 메서드 작성 후 사용.
-setAttribute와 RequestDispatcher 이용하여 product_insert.jsp에 전달.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package com.product.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
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.product.model.CategoryDTO;
import com.product.model.ProductDAO;
/**
* Servlet implementation class InsertServlet
*/
@WebServlet("/insert.do")
public class InsertServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public InsertServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// DB에서 카테고리 테이블의 전체 리스트를 조회하여 전체 리스트를 제품 등록 폼 페이지로 이동시키는 작업.
ProductDAO dao = ProductDAO.getinstance();
System.out.println("제품 등록 시 dao 주소값 >>> " + dao);
List<CategoryDTO> categoryList = dao.getCategoryList();
request.setAttribute("cList", categoryList);
RequestDispatcher rd = request.getRequestDispatcher("view/product_insert.jsp");
rd.forward(request, response);
}
}
|
cs |
6-1. CategoryDTO.java 클래스 작성.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package com.product.model;
public class CategoryDTO {
private int cnum;
private String category_code;
private String category_name;
public int getCnum() {
return cnum;
}
public void setCnum(int cnum) {
this.cnum = cnum;
}
public String getCategory_code() {
return category_code;
}
public void setCategory_code(String category_code) {
this.category_code = category_code;
}
public String getCategory_name() {
return category_name;
}
public void setCategory_name(String category_name) {
this.category_name = category_name;
}
}
|
cs |
7. product_insert.jsp 작성
-제품 등록 폼 페이지
-스크립틀릿으로 InsertServlet에서 보낸 categoryList를 getAttribute로 받기.
-테이블의 카테고리 코드만 받아온 데이터를 가지고 옵션으로 선택.
-나머지는 input으로 텍스트 형태로 입력.
-최하단에 제품등록, 다시작성 버튼 만들기.
-폼에 입력한 데이터는 /insertOk.do 로 urlmapping한 InsertOkServlet으로 보냄.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
<%@page import="com.product.model.CategoryDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
List<CategoryDTO> list = (List<CategoryDTO>)request.getAttribute("cList");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<hr width="50%" color="gray">
<h3>products 테이블 제품 등록 폼</h3>
<hr width="50%" color="gray">
<br><br>
<form method = "post" action="<%=request.getContextPath() %>/insertOk.do">
<table border="1" cellspacing="0" width="600">
<tr>
<th>카테고리 코드</th>
<td>
<select name="product_category">
<%
if(list.size() == 0) {
%>
<option value="">:::카테고리 없음:::</option>
<%
}else {
// 카테고리 코드가 있는 경우.
// 전체 카테고리 리스트를 반복하여 출력.
for(int i=0; i<list.size(); i++) {
CategoryDTO dto = list.get(i);
%>
<option value="<%=dto.getCategory_code() %>">
<%=dto.getCategory_name() %>[<%=dto.getCategory_code() %>]
</option>
<%
}
}
%>
</select>
</tr>
<tr>
<th>제품명</th>
<td> <input type="text" name="product_name"> </td>
</tr>
<tr>
<th>제품코드</th>
<td> <input type="text" name="product_code"> </td>
</tr>
<tr>
<th>제품 입고가</th>
<td> <input type="text" name="product_input"> </td>
</tr>
<tr>
<th>제품 출고가</th>
<td> <input type="text" name="product_output"> </td>
</tr>
<tr>
<th>제품 배송비</th>
<td> <input type="text" name="product_trans"> </td>
</tr>
<tr>
<th>제품 마일리지</th>
<td> <input type="text" name="product_mileage"> </td>
</tr>
<tr>
<th>제품 제조사</th>
<td> <input type="text" name="product_company"> </td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="제품등록">
<input type="reset" value="다시작성">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
|
cs |
8. InsertOkServlet.java 작성
-제품등록 폼 페이지에서 넘어온 데이터를 DB의 PRODUCTS 테이블에 저장하는 서블릿.
-한글 안깨지도록 request, response UTF-8 인코딩 처리
-폼 페이지의 name 값으로 getParameter 메서드로 가져오기.
-가져올 때 trim()을 활용하여 앞뒤 공백 제거해 주기.
-dto 객체 생성하여 받은 값들 저장.
-dao 객체 생성후 insertProduct(dto) 메서드로 DB에 제품 추가.
-PrintWriter 객체와 getWriter 메서드 이용하여 자바스크립트 코드로 제품등록 성공 or 실패 알림창 메세지 출력.
-등록 성공 후 select.do로 다시 제품 전체 목록 출력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
package com.product.controller;
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 com.product.model.ProductDAO;
import com.product.model.ProductDTO;
/**
* Servlet implementation class InsertOkServlet
*/
@WebServlet("/insertOk.do")
public class InsertOkServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public InsertOkServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 제품등록 요청에 대하여 제품 등록 응답.
// 제품 등록 폼 페이지에서 넘어온 데이터를 DB의 products 테이블에 저장.
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
String product_category = request.getParameter("product_category").trim();
String product_name = request.getParameter("product_name").trim();
String product_code = request.getParameter("product_code").trim();
int product_input = Integer.parseInt(request.getParameter("product_input").trim());
int product_output = Integer.parseInt(request.getParameter("product_output").trim());
int product_trans = Integer.parseInt(request.getParameter("product_trans").trim());
int product_mileage = Integer.parseInt(request.getParameter("product_mileage").trim());
String product_company = request.getParameter("product_company").trim();
ProductDTO dto = new ProductDTO();
dto.setCategory_fk(product_category);
dto.setProducts_name(product_name);
dto.setEp_code_fk(product_code);
dto.setInput_price(product_input);
dto.setOutput_price(product_output);
dto.setTrans_cost(product_trans);
dto.setMileage(product_mileage);
dto.setCompany(product_company);
ProductDAO dao = ProductDAO.getinstance();
int res = dao.insertProduct(dto);
PrintWriter out = response.getWriter();
if(res > 0) {
out.println("<script>");
out.println("alert('제품 등록 성공')");
out.println("location.href='select.do'");
out.println("</script>");
}else {
out.println("<script>");
out.println("alert('제품 등록 실패')");
out.println("history.back()");
out.println("</script>");
}
}
}
|
cs |
9. ContentServlet.java
-/content.do?num 이라는 get 방식으로 넘어온 제품 번호에 해당하는 제품 정보를 조회한 후 그 데이터를 content_list.jsp로 넘겨줌.
-dao에 getContentProduct(pNum) 메서드를 작성하여 사용.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package com.product.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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.product.model.ProductDAO;
import com.product.model.ProductDTO;
/**
* Servlet implementation class ContentServlet
*/
@WebServlet("/content.do")
public class ContentServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ContentServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// get 방식으로 넘어 온 제품 번호에 해당하는 제품에 대한 정보를 조회 후 회원 상세 정보 view page로 이동.
int pNum = Integer.parseInt(request.getParameter("num"));
ProductDAO dao = ProductDAO.getinstance();
ProductDTO cont = dao.getContentProduct(pNum);
request.setAttribute("content", cont);
RequestDispatcher rd = request.getRequestDispatcher("view/content_list.jsp");
rd.forward(request, response);
}
}
|
cs |
10. content_list.jsp
- ContentServlet에서 넘어온 데이터를 getAttribute()로 받기.
- 받아온 정보를 <%= %>의 표현식 형태로 출력.
- 제조사가 null 경우는 공백처리.
- 테이블 최하단에 제품수정, 제품삭제, 제품목록 버튼 생성.
- 제품수정 버튼은 update.do?num=<%=dto.getPnum() %>으로 제품번호를 같이 넘겨줌.
- 제품삭제 버튼도 delete.do?num=<%=dto.getPnum() %>이용.
- 삭제는 confirm() 이용하여 확인 시 실행.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
<%@page import="com.product.model.ProductDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
ProductDTO dto = (ProductDTO)request.getAttribute("content");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<hr width="50%" color="blue">
<h3>Products 테이블 제품 상세 정보</h3>
<hr width="50%" color="blue">
<br><br>
<table border="1" cellspacing="0" width="600">
<tr>
<th>제품 번호</th>
<td> <%=dto.getPnum() %> </td>
</tr>
<tr>
<th>제품 카테고리 코드</th>
<td> <%=dto.getCategory_fk() %> </td>
</tr>
<tr>
<th>제품 이름</th>
<td> <%=dto.getProducts_name() %> </td>
</tr>
<tr>
<th>제품 코드</th>
<td> <%=dto.getEp_code_fk() %> </td>
</tr>
<tr>
<th>제품 입고가</th>
<td> <%=dto.getInput_price() %> </td>
</tr>
<tr>
<th>제품 출고가</th>
<td> <%=dto.getOutput_price() %> </td>
</tr>
<tr>
<th>제품 배송비</th>
<td> <%=dto.getTrans_cost() %> </td>
</tr>
<tr>
<th>제품 마일리지</th>
<td> <%=dto.getMileage() %> </td>
</tr>
<tr>
<th>제품 제조사</th>
<% if(dto.getCompany() == "null") { %>
<td> </td>
<% }else { %>
<td> <%=dto.getCompany() %> </td>
<% }%>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="제품수정"
onclick="location.href='update.do?num=<%=dto.getPnum() %>'">
<input type="submit" value="제품삭제"
onclick="if(confirm('제품을 삭제하시겠습니까?')){
location.href='delete.do?num=<%=dto.getPnum() %>'
}else {return;}">
<input type="submit" value="제품목록"
onclick="location.href='select.do'">
</td>
</tr>
</table>
</div>
</body>
</html>
|
cs |
11. UpdateServlet.java
-받아 온 상품 번호로 getContentProduct(pNum) 메소드 사용하여 제품 상세 정보 dto에 저장.
-상품수정도 상품등록과 마찬가지로 카테고리는 골라서 입력할 수 있도록 List<CategoryDTO>를 넘겨줌.
-데이터를 받아서 product_update.jsp 페이지로 전달.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
javapackage com.product.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
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.product.model.CategoryDTO;
import com.product.model.ProductDAO;
import com.product.model.ProductDTO;
/**
* Servlet implementation class UpdateServlet
*/
@WebServlet("/update.do")
public class UpdateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UpdateServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 상품 번호를 가지고 와서 상품 수정 폼 페이지로 이동시킴.
int pNum = Integer.parseInt(request.getParameter("num"));
ProductDAO dao = ProductDAO.getinstance();
ProductDTO dto = dao.getContentProduct(pNum);
List<CategoryDTO> list = dao.getCategoryList();
request.setAttribute("List", list);
request.setAttribute("modify", dto);
RequestDispatcher rd = request.getRequestDispatcher("view/product_update.jsp");
rd.forward(request, response);
}
}
|
cs |
12. product_update.jsp
- 제품수정 폼 페이지 제작.
- 서블릿에서 넘어온 제품 상세 정보 출력을 위한 dto와 카테고리 선택을 위한 list 넘겨받기.
- 폼 태그를 통해 입력받은 데이터는 /updateOk.do 로 전달.
- 이 때, 제품 번호는 input type="hidden"으로 처리하여 숨김.
- 카테고리 코드의 경우 카테고리 코드가 없으면 공백이 입력되고, 있을 때는 products테입블의 category_fk 값과 category 테이블의 category_code 값을 비교하여 일치할 시 입력값을 선택한 채로 전달하고 불일치 할 시 전달하지 않도록 설계
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
<%@page import="com.product.model.CategoryDTO"%>
<%@page import="java.util.List"%>
<%@page import="com.product.model.ProductDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
ProductDTO dto = (ProductDTO)request.getAttribute("modify");
List<CategoryDTO> list = (List<CategoryDTO>)request.getAttribute("List");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<hr width="50%" color="aqua">
<h3>products 테이블 제품 수정 폼</h3>
<hr width="50%" color="aqua">
<br><br>
<form method="post" action="<%=request.getContextPath() %>/updateOk.do">
<input type="hidden" name="num" value="<%=dto.getPnum() %>">
<table border="1" cellspacing="0" width="600">
<tr>
<th>카테고리 코드</th>
<td>
<select name="product_category">
<%
//select 코드를 readonly 시키는 방법
if(list.size() == 0) {
%>
<option value="">:::카테고리 코드 없음:::</option>
<% }else {
for(int i=0; i<list.size(); i++) {
CategoryDTO cdto = list.get(i);
if(dto.getCategory_fk().equals(cdto.getCategory_code())) {
%>
<option value="<%=cdto.getCategory_code() %>" selected>
<%=cdto.getCategory_name() %>[<%=cdto.getCategory_code() %>]
<% }else { %>
<option value="<%=cdto.getCategory_code() %>" disabled>
<%=cdto.getCategory_name() %>[<%=cdto.getCategory_code() %>]
<% }
}
}
%>
</select>
</td>
</tr>
<tr>
<th>제품명</th>
<td> <input type="text" name="product_name"
value="<%=dto.getProducts_name() %>" readonly> </td>
</tr>
<tr>
<th>제품코드</th>
<td> <input type="text" name="product_code"
value="<%=dto.getEp_code_fk() %>" readonly> </td>
</tr>
<tr>
<th>제품 입고가</th>
<td> <input type="text" name="product_input"
value="<%=dto.getInput_price()%>"> </td>
</tr>
<tr>
<th>제품 출고가</th>
<td> <input type="text" name="product_output"
value="<%=dto.getOutput_price() %>"> </td>
</tr>
<tr>
<th>제품 배송비</th>
<td> <input type="text" name="product_trans"
value="<%=dto.getTrans_cost() %>"> </td>
</tr>
<tr>
<th>제품 마일리지</th>
<td> <input type="text" name="product_mileage"
value="<%=dto.getMileage() %>"> </td>
</tr>
<tr>
<th>제품 제조사</th>
<td> <input type="text" name="product_company"
value="<%=dto.getCompany() %>"> </td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="제품수정">
<input type="reset" value="다시작성">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
|
cs |
13. UpdateOkServlet.java
-제품 수정 폼 페이지에서 입력 받은 데이터를 DB에 넘겨주는 작업을 처리하는 서블릿.
-폼 페이지의 데이터를 trim()을 이용하여 앞뒤 공백 없이 받기.
- dto 객체 생성하여 받은 값 저장 후 dao에 updateProduct(dto) 작성 후 호출.
- PrintWriter 이용하여 제품 정보 수정 성공 / 실패 알림창 띄우기
- 성공하면 제품 상세 정보 페이지로 이동.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
package com.product.controller;
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 com.product.model.ProductDAO;
import com.product.model.ProductDTO;
/**
* Servlet implementation class UpdateOkServlet
*/
@WebServlet("/updateOk.do")
public class UpdateOkServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UpdateOkServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
int pNum = Integer.parseInt(request.getParameter("num").trim());
String category_code = request.getParameter("category_code").trim();
String product_name = request.getParameter("product_name").trim();
String product_code = request.getParameter("product_code").trim();
int product_input = Integer.parseInt(request.getParameter("product_input").trim());
int product_output = Integer.parseInt(request.getParameter("product_output").trim());
int product_trans = Integer.parseInt(request.getParameter("product_trans").trim());
int product_mileage = Integer.parseInt(request.getParameter("product_mileage").trim());
String product_company = request.getParameter("product_company").trim();
ProductDTO dto = new ProductDTO();
dto.setPnum(pNum);
dto.setCategory_fk(category_code);
dto.setProducts_name(product_name);
dto.setEp_code_fk(product_code);
dto.setInput_price(product_input);
dto.setOutput_price(product_output);
dto.setTrans_cost(product_trans);
dto.setMileage(product_mileage);
dto.setCompany(product_company);
ProductDAO dao = ProductDAO.getinstance();
int res = dao.updateProduct(dto);
PrintWriter out = response.getWriter();
if(res > 0) {
out.println("<script>");
out.println("alert('제품 정보 수정 성공')");
out.println("location.href='content.do?num="+dto.getPnum()+"'");
out.println("</script>");
}else {
out.println("<script>");
out.println("alert('제품 정보 수정 실패')");
out.println("history.back()");
out.println("</script>");
}
}
}
|
cs |
14. DeleteServlet.java
- 제품 상세 페이지의 삭제 버튼을 누르면 /delete.do로 연결됨.
- getParameter("num")으로 제품번호 받기.
- dao에 deleteProduct(pNum)메서드 작성하여 이용.
- 이 때, 중간의 데이터를 삭제하면 그 제품의 번호보다 큰 데이터들의 제품번호를 -1 해주는 메서드를 updateCount(pNum)으로 따로 작성하여 이용.
- 제품 성공 삭제 시 제품목록 페이지로 이동 / 실패 시 이전 페이지로 이동.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package com.product.controller;
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 com.product.model.ProductDAO;
/**
* Servlet implementation class DeleteServlet
*/
@WebServlet("/delete.do")
public class DeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DeleteServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
int pNum = Integer.parseInt(request.getParameter("num"));
ProductDAO dao = ProductDAO.getinstance();
int res = dao.deleteProduct(pNum);
dao.updateCount(pNum);
PrintWriter out = response.getWriter();
if(res > 0) {
out.println("<script>");
out.println("alert('제품 정보 삭제 성공!!!')");
out.println("location.href='select.do'");
out.println("</script>");
}else {
out.println("<script>");
out.println("alert('제품 정보 삭제 실패...')");
out.println("history.back()");
out.println("</script>");
}
}
}
|
cs |
복습하는데도... 오래걸리네... 몇 번 더 해야 안보고 할 수 있을 듯...
'국기훈련과정 > JSP' 카테고리의 다른 글
05. JSP와 JDBC 연동하기 (0) | 2021.10.19 |
---|---|
04. 쿠키와 세션 (0) | 2021.10.18 |
03. JSP_02 (0) | 2021.10.15 |
02. JSP_01 (0) | 2021.10.15 |
01. 웹 프로그래밍 (0) | 2021.10.14 |