1. 웹 어플리케이션 구조

 

 

2. m_insert_form.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
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
 
<%= request.getRequestURI() %> <br>
 
<form action="<%= request.getContextPath() %>/minsert/m_insert_pro.jsp" method="post">
 
<table border="1">
    <tr>
        <td>아이디</td>
        <td><input type="text" name="m_id" size="20"></td>
    <tr>
    <tr>
        <td>암호</td>
        <td><input type="text" name="m_pw" size="20"></td>
    <tr>
    <tr>
        <td>권한</td>
        <td><input type="text" name="m_level" size="20"></td>
    <tr>
    <tr>
        <td>이름</td>
        <td><input type="text" name="m_name" size="20"></td>
    <tr>
    <tr>
        <td>이메일</td>
        <td><input type="text" name="m_email" size="20"></td>
    <tr>
    <tr>
        <td colspan="4"><input type="submit" value="회원가입버튼"></td>
    </tr>
</table>
 
</form>
cs

 

 

3.  m_insert_pro.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
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<!-- Connection 객체, PreparedStatement 객체 사용하기 위해서는 import를 해줘야 함 -->
<!-- DriverManage와 SQLException(쿼리문 사용) 객체 사용하기 위해서도 import 해줘야 함 -->
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.SQLException" %>
 
<!-- 
    JDBC(Java Database Connectivity) : 자바 언어를 이용해 DB에 접근할 수 있는 API 묶음 
        * API : java.sql.Connection 으로 정의되어 있음(java.sql.~ 클래스들 import 해줘야 함)
        1. DB 주소 + 포트번호 + 이름 + 암호 이용해서 연결(Connection) 객체 생성
        2. 커넥션에서 sql 객체 생성
        3. sql 객체 이용하여 sql 작업을 함
        4. 사용했던 리소스들(sql 객체, 커넥션 등)을 해제
-->
 
<!-- 자바 소스 코드가 들어가야 하기 때문에 스크립트릿 안에 자바 소스 코드를 넣었음 -->
<%
//  console 창에 출력하기 전 form.jsp에서 받은 파라미터 값들이 깨지지 않도록 인코딩
    request.getParameter("utf-8");
    
//  Connection, PreparedStatement 객체 생성
//  선언만 해주고 초기화 해주지 않을 시 => nullPointException 일어날 가능성 있음
    Connection conn = null;
//  PreparedStatement와 Statement의 차이
//  1. PreparedStatement : 쿼리문이 들어갈 양식만 있음 
//  2. Statement : 쿼리문 통째로 집어넣음
    PreparedStatement pstmt = null;
    
//  form의 파라미터들을 request 내장 객체 getParameter 메소드로 받아와 String형 변수들로 대입함
    String m_id = request.getParameter("m_id");
    String m_pw = request.getParameter("m_pw");
    String m_level = request.getParameter("m_level");
    String m_name = request.getParameter("m_name");
    String m_email = request.getParameter("m_email");
    
    System.out.println(m_id + "<-- m_id /minsert/m_insert_pro.jsp");
    System.out.println(m_pw + "<-- m_pw /minsert/m_insert_pro.jsp");
    System.out.println(m_level + "<-- m_level /minsert/m_insert_pro.jsp");
    System.out.println(m_name + "<-- m_name /minsert/m_insert_pro.jsp");
    System.out.println(m_email + "<-- m_email /minsert/m_insert_pro.jsp");
    
//  JDBC 드라이버 로딩(mysql이기 때문에 mysql, jdbc 형식이기 때문에 jdbc라고 적어줘야 함)
    Class.forName("com.mysql.jdbc.Driver");
    
//  해당 예제의 try문에는 catch가 없는데, 이것은 예외처리를 따로 해줄 필요가 없기 때문이다.
//  (catch가 없는 경우에는 try~finally 문을 굳이 써야할 필요가 없음 => try~finally 없애도 됨)
    try{
//      드라이버 주소, db id, db password가 필요(인코딩은 해줘도, 안 해줘도 됨)
        String jdbcDriver = "jdbc:mysql://localhost:3306/dev22db?" + 
                            "useUnicode=true&characterEncoding=utf8";
        String dbUser = "dev22id";
        String dbPass = "dev22pw";
        
//      mysql 커넥션 연결
//      커넥션 정보가 담긴 return 값을 conn이라는 인스턴스 주소값에 대입
//      매개변수 안에 직접 드라이버 주소, db id, db password를 적어줘도 되지만 매개변수 값의 길이가
//      너무 길기 때문에 밖에 따로 변수로 선언
        conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
 
        System.out.println("console> conn : " + conn);
    
//      mysql 쿼리문 선언
//      PreparedStatement 객체를 사용하는 이유는 ? 안에 들어가는 파라미터 값들이 
//      계속 변할 수 있으므로, 일일히 쿼리를 수정하는 것보다는 PreparedStatement 객체를
//      사용함으로서 form에서 받아오는 파라미터 값들을 유연하게 대처할 수 있기 때문이다.
        pstmt = conn.prepareStatement("INSERT INTO tb_member VALUES (?, ?, ?, ?, ?)");
        
//      콘솔창에서 확인해보면 ?가 들어간 쿼리문만 출력됨
        System.out.println("console> before pstmt : " + pstmt);
        
//      form.jsp에서 받는 파라미터의 갯수대로 setting을 해준다.
//      (form에서 받는 파라미터들은 모두 default string 형으로 받아오기 때문에 setString 메소드를 호출해야 함)
        pstmt.setString(1, m_id);
        pstmt.setString(2, m_pw);
        pstmt.setString(3, m_level);
        pstmt.setString(4, m_name);
        pstmt.setString(5, m_email);
        
//      파라미터들을 setting 해준 뒤이기 때문에, 콘솔창에서 확인해보면 쿼리문 안에
//      setting 해준 값들이 쿼리문에 같이 출력됨을 알 수 있음
        System.out.println("console> after pstmt : " + pstmt);
    
//      쿼리 실행(쿼리문에서 직접 값을 받아오지 않는 경우만 사용 가능)
//      쿼리 실행 후 값을 직접 받아와야 하는 경우
//      (ex. SELECT문 => ResultSet 객체 선언하고 사용, 인스턴스.executeQuery() 메소드 사용)        
        pstmt.executeUpdate();
    
    }finally{
//      실행되었던 커넥션들을 모두 닫아줘야 함(객체 선언한 순서의 반대로 닫아줘야 함)
        if (pstmt != nulltry { pstmt.close(); } catch(SQLException ex) {}
        if (conn != nulltry { conn.close(); } catch(SQLException ex) {}
    }
%>
cs

 

 

 

 

4. 결과 

'BackEnd > Java' 카테고리의 다른 글

Servlet :: ServletContext vs ServletConfig  (0) 2016.11.22
Java :: Abstract vs Interface  (0) 2016.10.28
Java :: 스레드(Thread)  (0) 2016.10.12
Java :: Code vs Heap vs Stack  (0) 2016.10.10
Java :: 자바 소켓 프로그래밍(TCP)  (0) 2016.10.09

+ Recent posts