Servlet구매하기1 : 기초

`web.xml’에 코드 추가

  • web.xml 코드 수정 후 꼭 서버 실행 후 주소창에 test.bo해서 흰 화면이 뜨는지 확인하고 코딩할 것
  • 흰화면이 안뜨면 web.xml 설정이 잘못되었다는 의미임.
1
2
3
4
5
6
7
8
9
<!-- Model2 구매하기 -->
<servlet>
<servlet-name>OrderFrontController</servlet-name>
<servlet-class>com.itwillbs.order.action.OrderFrontController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OrderFrontController</servlet-name>
<url-pattern>*.or</url-pattern>
</servlet-mapping>




OrderFrontController.java의 doProcess()의 주소비교 후 처리부분에 코드 추가

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
public class OrderFrontController extends HttpServlet {
// 일반 클래스를 서블릿을 상속해서 컨트롤러 역활 할수있도록 설정
protected void doProcess(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("doProcess() 호출 (페이지 GET/POST방식 모두 사용호출)");
// 주소 비교 (주소 매핑)
System.out.println("--------------@ 주소 계산 @-------------");
// 프로젝트명 + 주소
String requestURI = request.getRequestURI();
System.out.println(" requestURI : " + requestURI);
// 프로젝트명
String contextPath = request.getContextPath();
System.out.println(" contextPath : " + contextPath);
// 가상주소
String command = requestURI.substring(contextPath.length());
System.out.println(" command(가상주소) : " + command);


System.out.println("--------------@ 주소 비교후 처리 @-------------");
Action action = null;
ActionForward forward = null;
// 주소에 따른 처리 구분 (주소 매핑후 이동)



System.out.println("-----------------@ 페이지 이동 @--------------");
if(forward != null){ // 이동할 정보가 있다
if(forward.isRedirect()){ // true - sendRedirect()
// 가상주소(.bo -> .bo), 화면전환(주소변경,화면 변경)
System.out.println("C : "+forward.getPath()+"주소로 이동(Redirect)");
response.sendRedirect(forward.getPath());
}else{ // false - forward()
System.out.println("C : "+forward.getPath()+"주소로 이동(forward)");
// 가상주소 -> 실제페이지 (.bo -> .jsp) + reqeust 객체 정보를 가지고 이동
RequestDispatcher dis =
request.getRequestDispatcher(forward.getPath());
dis.forward(request, response);
}
}//end of 페이지이동

}//end of doProcess

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doGet() 호출 (페이지 GET방식 호출)");
doProcess(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doPost() 호출 (페이지 POST방식 호출)");
doProcess(req, resp);
}
}




Action.java 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
public interface Action {

// 상수,추상메서드

// 추상메서드 -> 서브클래스들 한태 강제성 부여
// => 개발 형식의 통일(틀이 정해짐)
// => 객체간의 관계가 약화됨 => 각각의 객체가 해당 동작만 처리/제어

// Action 페이지의 동작을 미리 선언해서 사용
public ActionForward execute(HttpServletRequest request,
HttpServletResponse response) throws Exception;

}




ActionForward.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
public class ActionForward {

//1.외부접근 못하도록 이동할 페이지와 이동할 방식 멤버변수 생성
private String path;
private boolean isRedirect;
// true면 sendRedirect방식으로 이동
//사용처: 주소와 화면의 전환이 동시에 일어날때 (가상주소 -> 가상주소로 )
// false면 forward방식으로 이동
//사용처: 주소는 그대로인데 화면이 바뀔때 (가상주소에서 jsp보여줌)
//2. getter setter생성
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public boolean isRedirect() {
return isRedirect;
}
public void setRedirect(boolean isRedirect) {
this.isRedirect = isRedirect;
}

//3.toString
@Override
public String toString() {
return "ActionForward [path=" + path + ", isRedirect=" + isRedirect + "]";
}
}




OrderDTO.java생성

  • DB테이블을 생성후 DTO를 아래 코드와 같이 생성한다

DB테이블 생성시 주의사항 : 테이블명 order 불가능

  • why? order by랑 비슷해서 테이블명이 아닌 명령어로 처리하려하기 때문.
  • 그럼 실무에선 주로 어떻게 쓸까?
  • tbl_order : 실무에서 자주 사용함
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
public class OrderDTO {
private int o_num;
private String o_trade_num;
private int o_g_num;
private String o_g_name;
private int o_g_amount;

private String o_g_size;
private String o_g_color;
private String o_m_id;
private String o_receive_name;
private String o_receive_addr1;

private String o_receive_addr2;
private String o_receive_phone;
private String o_receive_memo;
private int o_sum_money;
private String o_trade_type;

private String o_trade_payer;
private Date o_trade_date;
private String o_trans_num;
private Date o_date;
private String o_status;
public int getO_num() {
return o_num;
}
public void setO_num(int o_num) {
this.o_num = o_num;
}
public String getO_trade_num() {
return o_trade_num;
}

(중략)
}




OrderDAO.java 생성

  • DB연결메서드 생성
  • 자원해제 메서드 생성
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
public class OrderDAO {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "";

// 디비 연결
private void getCon() throws Exception{
// 커넥션 풀
Context init = new InitialContext();
DataSource ds = (DataSource) init.lookup("java:comp/env/jdbc/model2DB");
con = ds.getConnection();
System.out.println("DAO : 디비연결 완료 "+con);
}//end of getCon()

// 디비 자원해제
public void closeDB(){
try {
if(rs != null) {rs.close(); }
if(pstmt != null) {pstmt.close(); }
if(con != null) {con.close(); }
}
catch (SQLException e) {
e.printStackTrace();
}
}//end of closeDB()
}