[ITWILL : JSP]Javabean 4 : web.xml, 회원정보삭제페이지

ITWILL학원 : 25강 JSP기초 BY 정규태강사

1. web.xml

  • 배포서술자 : 프로젝트 실행시 가장 먼저 실행되는 파일.
  • 프로그램에 필요한 전반적인 설정을 지정함.
  • 에러코드별 데이터 처리필요 : 프로그램배포시 꼭 필요한 페이지.
  • 위치 : WEBCONTENT하위의 WEB-INF폴더안에 위치함.

https://slidesplayer.org/slide/15757128/

1-1. 404에러 예시

  • 만약 404에러가 뜨면 location 아래로 이동해서 처리하겠다는 의미
  • webcontent하위에 error폴더 생성 후 그 안에 404code.jsp생성
  1. web.xml파일에 </web-app>태그 위에 아래 코드를 입력한다.
1
2
3
4
5
6
<error-page>
<error-code>404</error-code>
<location>
/error/404code.jsp
</location>
</error-page>
  1. ‘error’폴더를 따로 생성한 뒤 404code.jsp를 만든다.
1
2
3
4
<h1>404code</h1>
<h2>페이지를 찾을 수 없습니다.</h2>
<h2>관리자에게 문의하세요.</h2>
<input type="button" value="로그인페이지로 이동" onclick="location.href='loginForm.jsp'">

1-2. 500에러 예시

  • 만약 500에러가 뜨면 location 아래로 이동해서 처리하겠다는 의미
  • webcontent하위에 error폴더 생성 후 그 안에 500code.jsp생성
  • 위와 동일한 방법에 코드만 404에서 500으로 변경해주면 된다
1
2
3
4
5
6
<error-page>
<error-code>500</error-code>
<location>
/error/500code.jsp
</location>
</error-page>
1
2
3
4
<h1>500code</h1>
<h2>페이지를 찾을 수 없습니다.</h2>
<h2>관리자에게 문의하세요.</h2>
<input type="button" value="로그인페이지로 이동" onclick="location.href='loginForm.jsp'">

2. 회원정보삭제페이지

2-1. 메인페이지 main.jsp에서 회원정보삭제버튼 추가

메인페이지에 회원정보삭제 버튼을 만든다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%//1.한글처리, 파라미터 (세션생성)
request.setCharacterEncoding("UTF-8");
String id = (String) session.getAttribute("id");//object를 string으로 다운캐스팅
String name = request.getParameter("name");
//1-1. id없이는 진입불가, id없는 경우 로그인페이지로 이동
if(id == null){
response.sendRedirect("loginForm.jsp");
}
%>
<h2><%=id %>님 환영합니다.</h2>

<input type="button" value="회원정보조회" onclick="location.href='memberinfo.jsp'">
<input type="button" value="회원정보수정" onclick="location.href='updateForm.jsp'">
<input type="button" value="로그아웃" onclick="location.href='logout.jsp'">
<input type="button" value="회원탈퇴" onclick="location.href='deleteForm.jsp'">

2-2. 회원정보삭제폼페이지 deleteForm.jsp 생성

사용자로부터 비밀번호 받는 폼페이지 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%
//1. 로그인 처리 -> 로그인 x (로그인페이지 이동)
String id = (String) session.getAttribute("id");
if( id == null ){
response.sendRedirect("loginForm.jsp");
}
//2.회원 비밀번호만 입력받아서 deletePro.jsp페이지 이동후 삭제
%>
<fieldset>
<legend>회원탈퇴</legend>
<form action="deletePro.jsp" method="post">
<!-- input타입중 hidden은 화면에 있는 해당 input태그를 숨겨서 정보 전달 -->
아이디 : <input type="hidden" name="id" value="<%=id %>" readonly><br>
비밀번호 : <input type="password" name="pw"><br>
<input type="submit" value="탈퇴하기">
<input type="button" value="뒤로가기" onclick="location.href='main.jsp'">
</form>
</fieldset>

2-3. 회원정보삭페이지 deletePro.jsp 생성

순서

  1. 한글처리 & 로그인여부체크 ->로그인페이지이동
  2. 삭제할 비밀번호 가져오기 : 파라미터이용
  3. MeberDAO객체 생성 -> deleteMember()메서드 호출
  4. 데이터처리 : 1-삭제완료, 0-비번오류, -1-아이디없음
    • 삭제 후 session 초기화 까먹으면 안된다! 세션 꼭 없앨 것!
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
<%//1.한글처리 & 로그인확인 
request.setCharacterEncoding("UTF-8");
String id = (String) session.getAttribute("id");
if(id == null){
response.sendRedirect("loginForm.jsp");
}

//2. 삭제할 비밀번호 가져오기
String pw = request.getParameter("pw");
%>

<%
//3.DAO객체생성 -> 결과를 리턴(1=정상처리 2=비번오류 -1=아이디가없음)
MemberDAO mdao = new MemberDAO();
int result = mdao.deleteMember(id, pw); //2-4에서 만든 메서드 호출

//4.데이터처리 -> 삭제후 login페이지로 이동
if(result == 1){
session.invalidate(); //초기화 필수! 까먹지마!
%>
<script type="text/javascript">
alert("회원정보삭제 성공");
location.href="loginForm.jsp";
</script>
<%
}else if(result == 0){
%>
<script type="text/javascript">
alert("비밀번호오류로 회원정보삭제실패");
history.back();
</script>
<%
}else{
%>
<script type="text/javascript">
alert("존재하지않는 아이디입니다.");
history.back();
</script>
<%
}
%>

2-4. DAO에서 deleteMember()메서드만들기

순서

  1. DB연결메서드 불러오기
  2. SQL & pstmt 생성 : 사용자가 입력한 비밀번호가 DB비번과 일치하는 지 확인
  3. 실행 -> rs저장
  4. 데이터처리 : DB에 있는 비번일치하면 정보삭제 작업, 아닌 경우 에러
    • 4-1. DB에 있는 회원 -> 비번체크 : 비번일치(->수정) 비번불일치(->에러)
      • 비번일치하는 경우 : SQL 구문작성 & pstmt 생성 -> 실행
    • 4-2. DB에 없는 회원 -> 에러
  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
public int deleteMember(String id, String pw){
int result = -1;
try {
//7-1. DB연결메서드 불러오기
con = getCon();

//7-2. SQL & pstmt 생성
sql = "select pw from itwill_member where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);

//7-3. 실행 -> rs저장
rs = pstmt.executeQuery();

//7-4. 데이터처리 : DB에 있는 회원인 경우 삭제, 아닌 경우 에러
if(rs.next()){
if(pw.equals(rs.getString("pw"))){

//7-4-1. SQL 구문작성 & pstmt 생성
sql = "delete from itwill_member where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.executeUpdate();
result = 1;
System.out.println("회원삭제성공-아디일치,비번일치");
}else{
result = 0;
System.out.println("회원삭제실패-아디일치,비번불일치");
}
}else{
result = -1;
System.out.println("회원삭제실패-아이디불일치");
}
} catch (SQLException e) {
e.printStackTrace();
//7-5. 자원해제
} finally {
closeDB();
}
return result;
}//delete닫힘