Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
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
Archives
Today
Total
관리 메뉴

개발자

[JSP 5일차] Oracle과 연동2 본문

개발자/JSP

[JSP 5일차] Oracle과 연동2

GoGo개발 2022. 9. 2. 17:34
re시작
1.보여줄 페이지와 맵핑할 07 서블릿 만들어주기 (새로운 서블릿) <PersonDetail_07>
  and 보여줄 view단 페이지(personDetail.jsp)로 forward
(forward해준 곳에서만 request.setAttribute 되어진 것을 꺼내볼 수 있다)


2.정보 눌렀을때 보여주는 veiw단 jsp  URL= "personDetail.do?seq="+seq;   파일명 = <personDetail.jsp >

3.dto 가서 imgFile 맵핑  jsp veiw단페이지에 보여주기위해서 <DTO>

4.서블릿페이지에서 오류페이지 떳을때 reponse 해주기  <PersonDetail_07>
(forward와 response 차이 생각하기)

5. jsp view단 페이지에서 내정보보기페이지로 전송 하려면 post방식이필요해서 form태그만들어주고 숨기기 
           frm.action = "personUpdate.do"; 서블릿 새로만들기   <personDetail.jsp >

6.내정보보기 서블릿 , 내정보보기 form(action) , 내정보보기 veiw단 jsp

 

1. 서블릿 <PersonDetail_07> : re 시작 1번 4번

 

 

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
package chap05.oracle;
 
import java.io.IOException;
import java.sql.SQLException;
 
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;
 
@WebServlet("/personDetail.do")
public class PersonDetail_07 extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    InterPersonDAO_03 dao = new PersonDAO_04();
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
        String seq = request.getParameter("seq");
        
    
        String path = "";
        try {
            Integer.parseInt(seq);
            
            PersonDTO_02 psdto = dao.selectOne(seq); //리턴값 PersonDTO_02니까?
            
            if(psdto != null) {
                request.setAttribute("psdto", psdto);
                path = "/WEB-INF/chap_right/personDetail.jsp"//이페이지에서 위에거 꺼내쓰면 된다
            }
            
            else {
                //path = "장난치지마.jsp";
                //re 시작 4번
                response.sendRedirect(request.getContextPath()+"/personSelect.do"); //자바에서 URL 페이지의 이동 6번서블릿으로 이동
                return//여기까지만하고 끝내라 URL이 바뀐다
            }
            
        }catch(NumberFormatException e) { //숫자 오류 일때
            path = "장난치지마.jsp";
            response.sendRedirect(request.getContextPath()+"/personSelect.do");//자바에서 URL 페이지의 이동 6번서블릿으로 이동
            return;
        }catch (SQLException e) { //sql오류 일때
            path = "/WEB-INF/chap_right/error.jsp";
        }
        
        // re 시작 1번
        RequestDispatcher dispatcher = request.getRequestDispatcher(path);
        dispatcher.forward(request, response);
        
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        doGet(request, response);
    }
 
}
 
cs

 

 

2. veiw단 jsp  <personDetail.jsp > : re 시작 2번 5번

 

 

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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
    
<%
    String ctxPath = request.getContextPath();
    //  ctxPath ==> /JSPServletBegin 
%>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>개별 회원의 성향 결과</title>
 
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 
<%-- Bootstrap CSS --%>
<link rel="stylesheet" href="<%= ctxPath%>/bootstrap-4.6.0-dist/css/bootstrap.min.css" type="text/css"> 
 
<style type="text/css">
 
    span#colorbox {
        display: inline-block;
        width: 30px;
        height: 30px;
        margin-left: 20px;
        
        position: relative;
        top: 8px;
    }
 
</style> 
 
<script type="text/javascript" src="<%= ctxPath%>/js/jquery-3.6.0.min.js"></script>
<script type="text/javascript" src="<%= ctxPath%>/bootstrap-4.6.0-dist/js/bootstrap.bundle.min.js"></script> 
 
<script type="text/javascript">
 
    $(document).ready(function(){
        
        $("span#colorbox").css('background-color''${requestScope.psdto.color}');
        
    });// end of $(document).ready(function(){})-----------------
    
    
    //re 시작 5번
    // Function Declaration
    function updatePerson(seq) { //get아닌 정보보호를위해 post방식이필요 그럼 form태그가 필요하다. 아래에서 만들어주기
                                
        const frm = document.updateFrm;
        frm.seq.value = seq; // form에 name이 seq인것의 value속성값에 seq를 넣어준다. vlaue값이 input태그 text박스에 찍힌다
        
        frm.action = "personUpdate.do";
        frm.method = "post";
        frm.submit(); // 클릭하면 post 방식으로 보내진다 <personUpdate.do>이 새로운 서블릿// seq를가지고 간다
    }// end of function updatePerson(seq)-----------------------------
    
    //re 시작 4번
    function deletPerson(seq) {
        
        const bool = window.confirm("정말로 삭제하시겠습니까?"); //window.alert 에서 window 생략가능 comfirm도
        //true false 값이 나온다
        console.log(bool);
        
 
        if (bool) {
        const frm = document.updateFrm;
        frm.seq.value = seq; // form에 name이 seq인것의 value속성값에 seq를 넣어준다. vlaue값이 input태그 text박스에 찍힌다        
        
        frm.action = "personDelete.do";
        frm.method = "post";
        frm.submit(); // 클릭하면 post 방식으로 보내진다 <personUpdate.do>이 새로운 서블릿// seq를가지고 간다
        }
    
        
    }// end of deletePerson(seq)-------------
    
</script>
 
</head>
<body class="py-3">
 
  <div class="container">
      <div class="card">
         <div class="card-header"> <%-- .card-header 에는 카드 머리말이 들어갑니다. --%>
             <p class="h2 text-center">
                 <span class="text-primary">${requestScope.psdto.name}</span>&nbsp;<small>님의 개인성향 결과</small>     
             </p>
         </div>
         
         <div class="card-body"> <%-- .card-body 에는 카드 내용이 들어갑니다. --%>
            <div class="row mx-4 my-3 border border-top-0 border-left-0 border-right-0">
                <div class="col-md-3 py-2">회원번호</div>
                <div class="col-md-9 py-2"><span class="h5">${requestScope.psdto.seq}</span></div>
            </div> 
            
            <div class="row mx-4 my-3 border border-top-0 border-left-0 border-right-0">
                <div class="col-md-3 py-2">성명</div>
                <div class="col-md-9 py-2"><span class="h5">${requestScope.psdto.name}</span></div>
            </div>
            
            <div class="row mx-4 my-3 border border-top-0 border-left-0 border-right-0">
                <div class="col-md-3 py-2">학력</div>
                <div class="col-md-9 py-2"><span class="h5">${requestScope.psdto.school}</span></div> 
            </div>
            
            <div class="row mx-4 my-3 border border-top-0 border-left-0 border-right-0">
                <div class="col-md-3 py-2">색상</div>
                <div class="col-md-9 py-2">
                  <c:choose>
                    <c:when test="${requestScope.psdto.color eq 'red'}"><span class="h5">빨강</span></c:when>
                    <c:when test="${requestScope.psdto.color eq 'blue'}"><span class="h5">파랑</span></c:when>
                    <c:when test="${requestScope.psdto.color eq 'green'}"><span class="h5">초록</span></c:when>
                    <c:when test="${requestScope.psdto.color eq 'yellow'}"><span class="h5">노랑</span></c:when> 
                    <c:otherwise><span class="h5">기타</span></c:otherwise>
                  </c:choose>
                  <span id="colorbox" class="rounded-circle"></span>
                </div>
            </div>
            
            <div class="row mx-4 my-3 border border-top-0 border-left-0 border-right-0">
                <div class="col-md-3 py-2">음식</div>
                <div class="col-md-9 py-2"><span class="h5">${requestScope.psdto.strFood}</span></div> 
            </div>
            
            <div class="row mx-4 my-3 border border-top-0 border-left-0 border-right-0">
                <div class="col-md-3 py-2">음식이미지 파일명</div>
                <div class="col-md-9 py-2"><span class="h5">${requestScope.psdto.strFood_imgFileName}</span></div> 
            </div>
            
            <div class="row mx-4 my-3 border border-top-0 border-left-0 border-right-0">
                <div class="col-md-3 py-2">음식사진</div>
                <div class="col-md-9 py-2">
                     <c:if test="${not empty requestScope.psdto.strFood_imgFileName}">
                         <c:forTokens var="imgFileName" items="${requestScope.psdto.strFood_imgFileName}" delims=",">
                             <img src="<%= ctxPath%>/chap05_images/${imgFileName}" width="130" class="img-fluid rounded mr-1" />
                         </c:forTokens>
                     </c:if>
                     
                     <c:if test="${empty requestScope.psdto.strFood_imgFileName}">
                         <span class="h5">좋아하는 음식이 없습니다.</span>
                     </c:if>
                </div> 
            </div>
            
            
         </div>
         
         <div class="card-footer"> <%-- .card-footer 에는 카드 꼬리말이 들어갑니다. --%>
         
             <div class="row" style="position: relative; top:10px;">
                 <div class="col-md-3">
                     <p class="text-center"><a href="personSelect.do" class="btn btn-info" role="button">목록보기1</a></p>
                 </div>
                 
                 <div class="col-md-3">
                     <p class="text-center"><button type="button" onclick="javascript:location.href='personSelect.do'" class="btn btn-success">목록보기2</button></p>
                 </div>
                 
                 <div class="col-md-3">
                     <p class="text-center"><button type="button" onclick="deletPerson('${requestScope.psdto.seq}')" class="btn btn-danger">삭제하기</button></p>                
                 </div>
                 
                 <div class="col-md-3">
                     <p class="text-center"><button type="button" onclick="updatePerson('${requestScope.psdto.seq}')" class="btn btn-primary">내정보수정하기</button></p>             
                 </div>
                 
             </div>
         
         </div>
      </div>
  </div>
  
  <%--re시작 5번 --%>
  <%--post 방식을 통해 회원의 정보를 변경하기 위해서 화면에는 보이지 않는 form태그를 만든다 --%>
  <form name="updateFrm">
      <input type="hidden" name="seq" />
  
  </form>
 
</body>
</html>
cs

 

 

 

3.DTO 

 

 

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
//re 시작 3번
    public String getStrFood_imgFileName() {
        
        String result = null;
        
        if(food != null) {
            
            StringBuilder sb = new StringBuilder();
            
            for(int i=0; i<food.length; i++) { //dao에서 쪼개어온 food
                
                switch (food[i]) {  // dao 에서 해온 food psdto.setFood(foodes.split("\\,")); //{"짜장면","탕수육","팔보채"}
                case "짜짱면":         // 이배열에서 꺼내서 비교한다
                    sb.append("jjm.png");
                    break;
                    
                case "짬뽕"
                    sb.append("jjbong.png");
                    break;
                    
                case "탕수육"
                    sb.append("tangsy.png");
                    break;
                    
                case "양장피"
                    sb.append("yang.png");
                    break;
 
                case "팔보채"
                    sb.append("palbc.png");
                    break;
                    
                default:
                    break;
                    
                }// end of switch (food[i]) 
                
                if(i< food.length-1) {
                    sb.append(",");
                }
                
            }//end of for------------------
            
            result = sb.toString();
            
        }
cs

 

 

 

re 시작2

1.내정보보기 서블릿 seq  DB에 보내주기 /
form태그에서 post 해왔어도 서블릿에서 post일때만 넘겨주게 꼭 다시 해주어야한다 보안!!!
 - veiw단 페이지 <personUpdate.jsp> 로 forward 해주기 <PersonUpdate_08>
- 실패시 원래 페이지로 reponse 해주기 

2. 내정보 수정 veiw 단 jsp <personUpdate.jsp> (유효성검사 포함)
  action="<%= ctxPath% >/personUpdateEnd.do" method="post">
이건 보내는게아니고 form태그내용을 dao로 보내서 DB에 업데이트해주는거 

3./personUpdateEnd.do 서블릿 만들기 // 정보 update 서블릿
veiw 단 action personUpdateEnd.do


 

1.서블릿  <PersonUpdate_08>

 

 

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
package chap05.oracle;
 
import java.io.IOException;
import java.sql.SQLException;
 
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;
 
 
@WebServlet("/personUpdate.do")
public class PersonUpdate_08 extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    InterPersonDAO_03 dao = new PersonDAO_04();
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        
            String method = request.getMethod(); //"GET" 또는 "POST"
            
            String seq = request.getParameter("seq"); //from태그에서 가져왔다
            //form태그에서 post 해왔어도 서블릿에서 post일때만 넘겨주게 꼭 다시 해주어야한다 보안!!!
            if("POST".equalsIgnoreCase(method)) {
                
                String path ="";
                
                try {
                PersonDTO_02 psdto = dao.selectOne(seq); //일단 한명정보 dao에서 얻어온다
                request.setAttribute("psdto", psdto);
                path = "WEB-INF/chap_right/personUpdate.jsp"//수정할 페이지
                
                }catch(SQLException e ) {
                    e.printStackTrace();
                    path ="/WEB-INF/chap_right/error.jsp";
                        
                }
                
                //re 시작 1번
                RequestDispatcher dispatcher = request.getRequestDispatcher(path);
                dispatcher.forward(request, response);
            }
        
                    
            else {
                //re 시작 1번
                // JSPServletBegin/personDetail.do?seq=7
                //"GET" 방식이라면 원래페이지로 돌아가게
                response.sendRedirect(request.getContextPath()+"/personDetail.do?seq="+seq);
                
            }
    }
 
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        doGet(request, response);
    }
 
}
 
cs

 

 

 

2.내정보 수정 view단 sjp  <personUpdate.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
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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
    // 컨텍스트 패스명(context path name)을 알아오고자 한다.
    String ctxPath = request.getContextPath();
    // ctxPath => /JSPServletBegin 
%>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>개인성향 데이터를 DB로 전송하기</title>
 
<style type="text/css">
    ul {list-style-type: none;}
    li {line-height: 200%;}
</style>
 
<script type="text/javascript" src="<%= ctxPath%>/js/jquery-3.6.0.min.js"></script> 
<script type="text/javascript">
 
//re 시작2
 
   $(document).ready(function(){
       
       // 1. 성명 입력해주기
       //선택자잡기
       $("input:text[name='name']").val("${requestScope.psdto.name}");
       
       // 2. 학력 입력해주기
       $("select[name='school']").val("${requestScope.psdto.school}");
       
       // 3. 색상 입력해주기
       $("input:radio[id='${requestScope.psdto.color}']").prop("checked"true);
       // 또는
       
       
       //<이부분 파일받기 오류 <다시해보기>
       /*
       $("input:radio[name='color']").each(function(index, item){ //item이 radio하나하나를 말한다
           
          const user_color = "${requestScope.psdto.color}";
          // "red" 또는 "blue" 또는 "green" 또는 "yellow"
          
          if($(item).attr("value") == user_color) {
          //radio에 value라는 속성값 
              $(item).prop("checked", true);
              return false; //for 문의 break;와 같은 것이다.
          
             }
           
       });
       */
       
       
       // 4. 음식 입력해주기
       const user_foodes = "${requestScope.psdto.strFood}";
      // console.log(user_foodes); // "짜짱면,탕수육,팔보채"
                                    // 없음 
                                   
       if(user_foodes != "없음"){
           const arr_food = user_foodes.split(","); 
           // arr_food == > ["짜짱면,탕수육,팔보채"]
           
           arr_food.forEach(function(item, index, array){
            // $("input:checkbox[value='"+item"']").prop("checked", true); 이거안됨 오류
            
            // 또는
            
                $("input:checkbox[name='food']").each(function(index, chkbox){
                    if($(chkbox).attr('value'== item) {
                       $(chkbox).prop("checked"true);
                       return false;
                    }
                    
                
                });
        
 
            
           });//end of arr_food.forEach()-----------------------
       }
                                    
   
       
   //  $("form[name='updateFrm']").bind("submit", function(){
   //  또는      
   //  $("form[name='updateFrm']").submit(function(){     
   //  또는      
       $("form[name='updateFrm']").submit(() => {                
       
           // === 유효성 검사 === //
           // 1. 성명
           const name_length = $("input:text[name='name']").val().trim().length;
           if(name_length == 0) {
               alert("성명을 입력하세요!!");
               $("input:text[name='name']").val("").focus();
               return false// submit 을 하지 않고 종료한다.
           }
           
           // 2. 학력
           const school_val = $("select[name='school']").val();
           if(school_val == "") {
               alert("학력을 선택하세요!!");
               return false// submit 을 하지 않고 종료한다.
           }
           
           // 3. 색상
           const color_length = $("input:radio[name='color']:checked").length
           if(color_length == 0) {
               alert("색상을 선택하세요!!");
               return false// submit 을 하지 않고 종료한다.
           }
           
           // 4. 음식은 좋아하는 음식이 없다라면 선택을 안하더라도 허용하겠다.
           
           //null값 허락해주겠다 아래 유효성검사 없앴으니까
         /*   const food_length = $("input:checkbox[name='food']:checked").length; 
           if(food_length == 0) {
               alert("선호하는 음식을 최소한 1개 이상 선택하세요!!");
               return false; // submit 을 하지 않고 종료한다.
           }
            */
       });// end of $("form#updateFrm").submit(function(){})------------
       
   });// end of $(document).ready()----------------------------
 
</script>
 
</head>
<body>
 
<div style="width :60%; margin : 50px auto;">
                                            <%--이건 보내는게아니고 form태그내용을 dao로 보내서 DB에 업데이트해주는거 --%>
    <form name="updateFrm" action="<%= ctxPath%>/personUpdateEnd.do" method="post">
        <fieldset>
            <legend>${requestScope.psdto.name}님 성향 정보 수정하기</legend>
            <ul>
                <li>
                    <input type="hidden" name="seq" value="${requestScope.psdto.seq}"/> 
                    <label for="name">성명</label>
                    <input type="text" name="name" placeholder="성명입력"/> 
                </li>
                <li>
                    <label for="school">학력</label>
                    <select name="school">
                        <option value="">선택하세요</option>
                        <option>고졸</option>
                        <option>초대졸</option>
                        <option>대졸</option>
                        <option>대학원졸</option>
                    </select>
                </li>
                <li>
                    <label for="">좋아하는 색상</label>
                    <div>
                        <label for="red">빨강</label>
                        <input type="radio" name="color" id="red" value="red" />
                        
                        <label for="blue">파랑</label>
                        <input type="radio" name="color" id="blue" value="blue" />
                        
                        <label for="green">초록</label>
                        <input type="radio" name="color" id="green" value="green" />
                        
                        <label for="yellow">노랑</label>
                        <input type="radio" name="color" id="yellow" value="yellow" />
                    </div>
                </li>
                <li>
                    <label for="">좋아하는 음식(다중선택)</label>
                    <div>
                        <label for="food1">짜짱면</label>
                        <input type="checkbox" name="food" id="food1" value="짜짱면" />
                        &nbsp;
                        
                        <label for="food2">짬뽕</label>
                        <input type="checkbox" name="food" id="food2" value="짬뽕" />
                        &nbsp;
                        
                        <label for="food3">탕수육</label>
                        <input type="checkbox" name="food" id="food3" value="탕수육" />
                        &nbsp;
                        
                        <label for="food4">양장피</label>
                        <input type="checkbox" name="food" id="food4" value="양장피" />
                        &nbsp;
                        
                        <label for="food5">팔보채</label>
                        <input type="checkbox" name="food" id="food5" value="팔보채" />
                    </div>
                </li>
                <li>
                    <input type="submit" value="수정완료" />
                    <input type="reset" value="수정취소" />
                </li>
            </ul>
        </fieldset>
    </form>
</div>
 
</body>
</html>
cs

 

 

 

 

re시작 3

veiw 단 action personUpdateEnd.do
1. /personUpdateEnd.do 서블릿 만들기 ( <personDetail.jsp > form태그에서 넘어옴)  <PersonUpdateEnd_09>


2.bl_person_interest 테이블에 특정 1개 행만 update 해주는 추상메소드(미완성메소드)

3. update 성공후 보여주는 페이지는 ("/PersonDetail.do?seq= 라는 서블릿)  다른서블릿으로 response
<PersonDetail_07>

  아니면 에러페이지 <error.jsp>


 

1.서블릿 <PersonUpdateEnd_09> : 정보 DB에 update해주는 서블릿 (from태그에서 받은 정보를)

 

 

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
package chap05.oracle;
 
import java.io.IOException;
import java.sql.SQLException;
 
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;
 
@WebServlet("/personUpdateEnd.do")
public class PersonUpdateEnd_09 extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
//re 시작3
    InterPersonDAO_03 dao = new PersonDAO_04();
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        String method = request.getMethod(); // "GET" 또는 "POST"
        
        
        if("POST".equalsIgnoreCase(method)) {
            
            String seq = request.getParameter("seq");
            String name = request.getParameter("name");
            String school = request.getParameter("school");
            String color = request.getParameter("color");
            String[] foodArr = request.getParameterValues("food");
            
            PersonDTO_02 psdto = new PersonDTO_02();
            psdto.setSeq(Integer.parseInt(seq));
            psdto.setName(name);
            psdto.setSchool(school);
            psdto.setColor(color);
            psdto.setFood(foodArr);
            
            
            try {
                int n = dao.updatePerson(psdto);
                
                if(n==1) {
                    //회원정보를 변경한 이후에 변경된 회원정보를 조회해주도록 한다. 다른서블릿으로 response 
                    response.sendRedirect(request.getContextPath()+"/personDetail.do?seq="+seq); //7번서블릿 
                }
                
            } catch (SQLException e) {
                e.printStackTrace(); //에러나오면 에러페이지로 forward
                RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/chap_right/error.jsp");
                dispatcher.forward(request, response);
            }    
                    
        }
        
        else {
            // GET방식이라면 접근한 경우라면
            // 아무것도 일어나지 않도록 코딩을 안해주면 된다.
        }
        
        
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        doGet(request, response);
    }
 
}
 
cs
 

 

 

2. 특정 1개 행만 update 해주는 추상메소드(미완성메소드) DAO

 

 

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
//re시작 3
    //tbl_person_interest 테이블에 특정 1개 행만 update 해주는 추상메소드(미완성메소드)
    @Override
    public int updatePerson(PersonDTO_02 psdto) throws SQLException{
        
        int n = 0;
        try {
            //싱클톤 패턴기법
            conn = MyDBConnection_05.getConn();
            
            //db에서 java로변환해왔음 
            String sql = " update tbl_person_interest set name= ?, school= ?, color= ?  ,food= ?"
                    +" where seq =? ";
            
            //sql 전달할 우편배달부
            pstmt = conn.prepareStatement(sql);    
            
            pstmt.setString(1, psdto.getName());
            pstmt.setString(2, psdto.getSchool());
            pstmt.setString(3, psdto.getColor());
            
            //Food는 null 있으니까
            if( psdto.getFood() != null ) {
                pstmt.setString(4String.join(",", psdto.getFood()));
            }
            else {
                pstmt.setString(4,null);
                
            }
            
            pstmt.setInt(5, psdto.getSeq());
            
            // 우리는 오류 throws 하기로했으니까 exception 처리는 서블릿에서 해준다.
            n = pstmt.executeUpdate();
        }finally {
            close(); // 자원반납        
        }
        return n;
    }// end of public int updatePerson(PersonDTO_02 psdto) throws SQLException
 
cs
 

 

 

3. 성공후 보여지는 서블릿 response or 에러페이지 forward

 

 

<성공후 보여지는 서블릿 forward 목록을 해준다> <"/personSelect.do>

 

 

실패시 에러페이지로 forward

 

 

re시작 4
1. <PersonDetail_07> /PersonDetail.do  
Delte 기능은 직접 해보기 alert로 나오는 것까지