JSP Servlet 기초(12) 회원가입 및 회원정보 수정하기

이번엔 JSP Servlet 기초(11) 에서 했던것들을

이용해 회원가입 및 회원정보 수정하기를

만들어 보겠습니다


먼저 회원가입 및 회원정보 수정 하기가 가능한

기능을 만들기 위해서는 설계를 먼저 해야합니다



먼저 첫화면부터 값을 어디로 넘겨 또 그곳에서 데이터

처리후 어디로 보낼것인지를 설계 해야합니다.


그전에 먼저 DB에 테이블먼저 생성해보겠습니다



디벨로퍼에서 scott 계정에 들어가 위와 같이

입력해주시고 스크립트 실행 해주시면됩니다


다음 이클립스에 패키지를 만들고

그안에  서블릿파일 3개를 만들겠습니다



회원가입란에서 입력한 정보를 db에 넣어줄 파일과


로그인 화면에서 입력한 정보를 db에서 뽑아와

세션에 넣어주는 파일,


마지막으로 회원정보를 수정하도록 도와주는

java 파일을 만들겠습니다


먼저 이름은 JoinGo.java, LoginGo.java, ModifyGo.java 

로 설정하겠습니다



다음 WebContent에

7개의 jsp파일을 만들어줍니다



먼저 join 화면 먼저 보겠습니다


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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="JoinGo" method="post">
        이름 : <input type="text" name="name" size="10"><br />
        아이디 : <input type="text" name="id" size="10"><br />
        비밀번호 : <input type="text" name="pw" size="10"><br />
        성별구분 : <input type="radio" name="gender" value="man">남  <input type="radio" name="gender" value="woman">여 <br />
        <input type="submit" value="회원가입">
    </form>
</body>
</html>
cs


join 화면에서는 간단하게 이름, 아이디, 비밀번호, 성별을

입력할수 있도록 하겠습니다.

다음 action은 JoinGo로 하겠습니다.


이제 JoinGo.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
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
package com.jsp.ex;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;
 
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("/JoinGo")
public class JoinGo extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private Connection connection;
    private Statement stmt;
    
    private String name, id, pw, gender;
       
    public JoinGo() {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        actionDo(request, response);    
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        actionDo(request, response);
    }
    
private void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    request.setCharacterEncoding("UTF-8");
        
        name = request.getParameter("name");
        id = request.getParameter("id");
        pw = request.getParameter("pw");
        gender = request.getParameter("gender");
        
        String query = "insert into member values('" + name + "', '" + id + "', '" + pw + "', '" + gender + "')";
        
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe" , "scott" , "tiger");
            stmt = connection.createStatement();
            int i = stmt.executeUpdate(query);
            if(i == 1){
                System.out.println("insert success");
                response.sendRedirect("joinResult.jsp");
            } else {
                System.out.println("insert fail");
                response.sendRedirect("join.jsp");
            }
            
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if(stmt != null) stmt.close();
                if(connection != null) connection.close();
            } catch (Exception e) {}
        }
        
    }
 
    
}
 
cs


먼저 24,25line에서 커넥션과 스테이트먼트

객체를 생성합니다.


다음45~48line 에서는 join.jsp 에서 입력한

데이터들을 request.getParameter 하여

요청합니다.


50line에서는 데이터를 insert 해줄

쿼리문을 입력합니다

다음 try문안에 데이터베이스 연결을위한

로드를 합니다

56line 은 stmt.executeUpdate(query);

사용하여 위에서 50line 에서 입력한 쿼리문을

update 해줍니다 executeUpdate 문 의

값 반환형은 int 형이고 몇개의 레코드가

수정됬는지에 따라 값이 반환됩니다

1개의 레코드가 수정되었기 때문에

1이 반환 될것입니다.

1이 반환된것은 정상적으로 update

된것이기 때문에 if 조건문을 걸어

다음화면으로 sendRedirect 시켜줍니다


다음 JoinResult.jsp 화면입니다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 
회원가입이 완료 되었습니다.<br />
<a href="login.jsp">로그인</a>
 
</body>
</html>
cs


회원가입이 완료되었다는 메시지와

로그인 화면으로 넘어갈수 있도록

하이퍼링크 달아줍니다


로그인화면 보겠습니다


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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 
<form action="LoginGo" method="post">
    아이디 : <input type="text" name="id"><br />
    비밀번호 : <input type="text" name="pw"><br />
    <input type="submit" value="로그인">
</form>
 
</body>
</html>
cs


로그인화면에서는 회원가입한 아이디와 비밀번호를

입력할수있도록 form태그를 달아주고

LoginGo로 action 해줍니다


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
package com.jsp.ex;
 
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Arrays;
 
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 javax.servlet.http.HttpSession;
 
@WebServlet("/LoginGo")
public class LoginGo extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    private Connection connection;
    private Statement stmt;
    private ResultSet resultSet;
    
    private String name, id, pw, gender;
       
    public LoginGo() {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        actionDo(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        actionDo(request, response);
    }
    
private void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        request.setCharacterEncoding("UTF-8");
    
        id = request.getParameter("id");
        pw = request.getParameter("pw");
        
        String query = "select * from member where id = '" + id + "' and pw = '" + pw + "'";
        
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe" , "scott" , "tiger");
            stmt = connection.createStatement();
            resultSet =  stmt.executeQuery(query);
            
            while (resultSet.next()) {
                name = resultSet.getString("name");
                id = resultSet.getString("id");
                pw = resultSet.getString("pw");
                gender = resultSet.getString("gender");
            }
            
            HttpSession httpSession = request.getSession();
            httpSession.setAttribute("name", name);
            httpSession.setAttribute("id", id);
            httpSession.setAttribute("pw", pw);
            
            response.sendRedirect("loginResult.jsp");
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if(resultSet != null) resultSet.close();
                if(stmt != null) stmt.close();
                if(connection != null) connection.close();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        
    }
 
}
 
cs


LoginGo에서는

login.jsp 에서 입력한 아이디와 비밀번호를

request.getParameter 하여 값을 요청합니다


46line 에서는 db에 login.jsp 에서 가져온

아이디와 비밀번호 와 일치하는 데이터를 db에서 

뽑아오기 위해 쿼리문을 작성합니다 

데이터를 검색하기위해 select 문을 사용하고

where 조건문에 login.jsp 에서 가져온

아이디와 비밀번호를 사용합니다

즉 login.jsp 에서 가져온 아이디와 

db에 저장된 아이디 그리고 login.jsp 에서 가져온

비밀번호와 db에 저장되어있는 비밀번호가 일치하는

데이터만 select 하는겁니다


다음 try문에서 데이터베이스 로드를하고

(52line db에서 뽑혀온 데이터들은resultSet에 담겨집니다)

resultSet에저장되어 있는 

name, id, pw, gender 다시 저장해줍니다(55~58line)


61line에서는 세션을 생성한다음

세션에 이름, 아이디, 비밀번호 값을 담습니다

다음 loginResult 화면으로 리다이렉트 시켜줍니다


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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
     <%!
        String name, id, pw;
    %>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 
    <%
        name = (String)session.getAttribute("name");
        id = (String)session.getAttribute("id");
        pw = (String)session.getAttribute("pw");
   %>
        
    <%= name%>님 안녕하세요 <br />
    <a href="modify.jsp">회원정보 수정</a>
 
</body>
</html>
cs


loginResult 에서는 세션에 저장되어있는 

이름, 아이디, 비밀번호를 name, id, pw 에 저장합니다

(String) 은 session.getAttribute로

값을 가져오면 Object 형으로 반환되기 때문에

사용시 실제 할당된 객체 타입으로 형변화(casting)

해준겁니다.


다음 로그인이 정상적으로 되었다는

메시지 출력해주고 회원정보 수정으로

이동 할 수 있도록 해줍니다.


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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
 
    <%!
        Connection connection;
        Statement statement;
        ResultSet resultSet;
    
        String name, id, pw, gender;
 %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 
<%
        id = (String)session.getAttribute("id");
    
        String query = "select * from member where id = '" + id + "'";
        
        Class.forName("oracle.jdbc.driver.OracleDriver");
        connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe" , "scott" , "tiger");
        statement = connection.createStatement();
        resultSet =  statement.executeQuery(query);
        
        while(resultSet.next()) {
            name = resultSet.getString("name");
            pw = resultSet.getString("pw");
            gender = resultSet.getString("gender");
        }
        
   %>
    
    <form action="ModifyGo" method="post">
        이름 : <input type="text" name="name" size="10" value=<%=name%>><br />
        아이디 : <%=id%><br />
        비밀번호 : <input type="text" name="pw" size="10"><br />
        
        <%
            if(gender.equals("man")) {
       %>
        성별구분 : <input type="radio" name="gender" value="man" checked="checked">남  <input type="radio" name="gender" value="woman">여 <br />
        <%
            } else {
       %>
        성별구분 : <input type="radio" name="gender" value="man" >남  <input type="radio" name="gender" value="woman" checked="checked">여 <br />
        <%
            }
       %>
        <input type="submit" value="정보수정">
    </form>
    
 
</body>
</html>
cs


회원정보 수정화면에서는

회원정보수정을 할수있도록 form 태그를 달아줍니다

이때 아이디는 변경할수 없도록 세션에 저장되어

있는 id값으로 지정해줍니다<%=id%>

26line (String) 은 session.getAttribute로

값을 가져오면 Object 형으로 반환되기 때문에

사용시 실제 할당된 객체 타입으로 형변화(casting)

해준겁니다.


28line 에서 세션에서 가져온 id 값과 일치하는

db정보를 가져오도록 쿼리문 작성합니다

그 값들을 35line 에서 다시 저장해줍니다 

49line 에서는 db에서 뽑아온 성별을 man이라면

성별구문 form에 남자 를 미리 체크되어 있게끔

해준겁니다 else 문은 여자가 미리 체크되어

있게 만들어줬습니다

다음 sumbit 으로 ModifyGo 로 action 해줍니다.


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
package com.jsp.ex;
 
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
 
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 javax.servlet.http.HttpSession;
 
@WebServlet("/ModifyGo")
public class ModifyGo extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    private Connection connection;
    private Statement stmt;
    
    private String name, id, pw, gender;
    
    HttpSession httpSession;
       
    public ModifyGo() {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        actionDo(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        actionDo(request, response);
    }
    
private void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        request.setCharacterEncoding("UTF-8");
        httpSession = request.getSession();
        
        name = request.getParameter("name");
        id = request.getParameter("id");
        pw = request.getParameter("pw");
        
        gender = request.getParameter("gender");
        
        if(pwConfirm()){
            System.out.println("OK");
            
            String query = "update member set name ='" + name + "', gender = '" + gender + "'";
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe" , "scott" , "tiger");
                stmt = connection.createStatement();
                int i = stmt.executeUpdate(query);
                if(i ==){
                    System.out.println("update success");
                    httpSession.setAttribute("name", name);
                    response.sendRedirect("modifyResult.jsp");
                } else {
                    System.out.println("update fail");
                    response.sendRedirect("modify.jsp");
                }
            } catch(Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if(stmt != null) stmt.close();
                    if(connection != null) connection.close();
                } catch (Exception e) {}
            }
            
        } else {
            System.out.println("NG");
        }
        
    }
    
    private boolean pwConfirm() {
        boolean rs = false;
        
        String sessionPw =  (String)httpSession.getAttribute("pw");
        
        if(sessionPw.equals(pw)) {
            rs = true;
        } else {
            rs = false;
        }
        
        return rs;
    }
 
}
 
cs


ModifyGo 에서는 회원정보 수정 화면에서

입력한 회원정보를 db에 update 시켜줍니다

먼저 49line 에서 if 조건문에 pwConfirm 메소드를 넣어줍니다

(자세한건 밑에서 설명하겠습니다)

다음 52line 에서 update 쿼리문을 작성해줍니다 

회원정보 수정란에서 이름과 성별만 수정할수 있게

만들었기때문에 이름과 성별만 update 해줍니다


57line에서 executeUpdate 를 사용하여 쿼리문을

update시켜주고 1개의 레코드를 update 해줬기

때문에 반환값 1을 i 에 저장해줍니다.

update 가 정상적으로 되었다면 i의 값은 1이므로

58line에 조건을 i==1 이라는 조건을

걸어주고 확인 메세지 출력 시켜줍니다

다음 세션에 name 값을 저장하고 modifyResult

화면으로 리다이렉트 시켜줍니다

그것이 아니라면 업데이트 실패이기 때문에

else문에 update fail 메세지 출력합니다


다음 81line 에 pwConfirm 메소드는

회원정보 수정란에서 입력한 비밀번호가 세션에

저장되어있는 비밀번호와 일치한지 비교 하는

메소드입니다 pwConfirm() 메소드는  

boolean 으로 선언되었기 때문에 

true, false 값만 반환됩니다.그 반환값을 rs에

저장하고 rs값을 return 시켜줍니다.

true 가 반환된다면 49라인데 if조건문이 

if(true) 가 되어 정상적으로 조건문안의

로직들을 수행하게 됩니다.


마지막으로 회원정보수정 결과하면입니다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 
<%= session.getAttribute("name")%>님의 회원정보 수정이 정상 처리 되었습니다.<br />
<a href="logout.jsp">로그아웃</a>    <a href="modify.jsp">정보수정</a>
 
</body>
</html>
cs


세션에 저장되어있는 이름값을 이용해 

수정이 정상처리 되었다는 메시지를

출력시켜주고 로그아웃 화면으로 이동할수

있도록 해줍니다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 
    <%
        session.invalidate();
        response.sendRedirect("login.jsp");
   %>
    
</body>
</html>
cs


로그아웃 화면에서는 

session.invalidate(); 사용하여

세션에 저장된 모든 데이터를 삭제합니다

다음 로그인 화면으로

sendRedirect 시켜줍니다



댓글

Designed by JB FACTORY