Servlet장바구니1 : 기초

`web.xml’에 코드 추가

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




BasketFrontController.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 BasketFrontController 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 + "]";
}
}




BasketDTO.java생성

  • DB테이블을 생성후 DTO를 아래 코드와 같이 생성한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class BasketDTO {

private int b_num;
private String b_m_id;
private int b_g_num;
private int b_g_amount;
private String b_g_size;
private String b_g_color;
private Date b_date;
public int getB_num() {
return b_num;
}
public void setB_num(int b_num) {
this.b_num = b_num;
}
public String getB_m_id() {
return b_m_id;
}
(중략)
}

BasketDAO.java 생성

  • DAO는 DTO와 달리 중요한 데이터에 접근하는 것이므로 관리자용DAO와 별도로 생성 및 관리되어야한다.
  • 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
28
public class BasketDAO {
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()

}

Comments