본문 바로가기

JAVA

Servlet 회원정보 Insert 간단 예제

간단한 Servlet을 통한 회원 정보 Insert 간단 예제를 복습하였다.

복습 과정이라 따로 js파일을 분리 하진 않고 inline 형태로 진행하였다.

-memberForm.html-

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="https://code.jquery.com/jquery-2.2.1.min.js"></script>
    <title>회원 가입창</title>
    <script>

        function fn_sendMember(){
            //jquery 사용
            var id = $("#id").val();
            var pwd = $("#pwd").val();
            var name = $("#name").val();
            var email = $("#email").val();
            //간단 유효성 검사
            if(id.length == 0 || id == "")
            {
                alert("아이디 입력은 필수입니다.");
            }
            else if(pwd.length == 0 || pwd == "")
            {
                alert("비밀번호 입력은 필수입니다.");
            }
            else if(name.length == 0 || name =="")
            {
                alert("이름 입력은 필수입니다.");
            }
            else if(email.length == 0 || email =="")
            {
                alert("이메일 입력은 필수입니다.");
            }
            /*유효성 검사 완료 후 비동기 ajax 실행*/
            else
            {

                $.ajax({
                    type: "post"
                    ,url: "http://localhost:8080/member3"
                    ,dataType: "html"
                    ,data: {
                        id : id
                        ,pwd : pwd
                        ,name: name
                        ,email : email
                        ,command: $("#command").val()
                    },
                    success:function (data){
                        alert("성공");
                    },
                    error:function(){
                        alert("실패")
                    }
                })
            }

        }

    </script>
</head>
<body>
<form id="frmMember">
    <table>
        <th>회원 가입창</th>
        <tr>
            <td>아이디</td>
            <td>
                <input type="text" id="id">
            </td>
        </tr>
        <tr>
            <td>비밀번호</td>
            <td>
                <input type="password" id="pwd">
            </td>
        </tr>
        <tr>
            <td>이름</td>
            <td>
                <input type="text" id="name">
            </td>
        </tr>
        <tr>
            <td>이메일</td>
            <td>
                <input type="text" id="email">
            </td>
        </tr>
    </table>
    <input type="button" value="가입하기" onclick="fn_sendMember()">
    <input type="reset" value="초기화"/>
    <input type="hidden" id="command" value="addMember"/>
</form>
</body>
</html>

-memberServelt.java-

package sec02.ex02;

import sec02.ex02.MemberDAO;
import sec02.ex02.MemberVO;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.List;

@WebServlet(value = "/member3")
public class MemberServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doHandle(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*doHandle 메서드 호출*/
        doHandle(request, response);
    }

    private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=utf-8");
        // MemberDAO 객체 생성
        MemberDAO dao = new MemberDAO();
        PrintWriter out = response.getWriter();
        /*Hidden Field 파라미터 요청*/
        String command = request.getParameter("command");

        if(command != null && command.equals("addMember"))
        {
            /*AJAX로 전송된 파라미터 변수에 저장*/
            String _id = request.getParameter("id");
            String _pwd = request.getParameter("pwd");
            String _name = request.getParameter("name");
            String _email = request.getParameter("email");

            MemberVO memberVO = new MemberVO();
            /*MemberVo 객체 생성 후 생성자 호출  */
            memberVO.setUser_id(_id);
            memberVO.setPwd(_pwd);
            memberVO.setName(_name);
            memberVO.setEmail(_email);
            /*MemberDAO addMember 메서드 호출*/
            dao.addMember(memberVO);
        }
        else if(command != null && command.equals("delMember"))
        {
            String id = request.getParameter("id");
            //dao.delMember(id);
        }

        List<MemberVO> list = dao.listMembers();

        out.print("<html><body>");
        out.print("<table border=1> <tr align ='center' bgcolor='lightgreen'>");
        out.print("<td>아이디</td> <td>비밀번호</td> <td>이름</td> <td>이메일</td> <td>가입일</td> <td>삭제</td>");

        for (int i = 0; i<list.size(); i++)
        {
            /*Member VO ArrayList에 저장값을 받아옴.*/
            MemberVO memberVO = (MemberVO) list.get(i);
            String id = memberVO.getUser_id();
            String pwd = memberVO.getPwd();
            String name = memberVO.getName();
            String email = memberVO.getEmail();
            Date joinDate = memberVO.getJoinDate();
            out.print("<tr><td>" + id + "<td>"
            + pwd + "</td><td>"
            + name + "</td><td>"
            + email + "</td><td>"
            + joinDate + "</td><td>"
            + "<a href ='/member3?command=delMember&id=" + id +"'>삭제</a></td></tr>");
        }
        out.print("</table></body></html>");
        out.print("<a href ='/memberForm.html'>신규 가입</a>");

    }
}

-memberDAO-

package sec02.ex02;

import sec02.ex02.MemberVO;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class MemberDAO {
    private PreparedStatement pstmt;
    private Connection con;
    private DataSource dataFactory;
    public MemberDAO(){
        try{
            /*Connection Pool 클래스 사용*/
            Context ctx = new InitialContext();
            Context envContext = (Context) ctx.lookup("java:/comp/env");
            dataFactory = (DataSource) envContext.lookup("jdbc/mariadb");
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    /*insert addMember 메소드*/
    public void addMember(MemberVO memberVO)
    {
        try {
            con = dataFactory.getConnection();
            /*파라미터로 받아온 getter로 받아옴.*/
            String id = memberVO.getUser_id();
            String pwd = memberVO.getPwd();
            String name = memberVO.getName();
            String email = memberVO.getEmail();
            /*prepareStatement 클래스 사용*/
            String query = "insert into t_member";
            query += "(user_id, pwd, name, email)";
            query += "values(?,?,?,?)";

            System.out.println("query : " + query);

            pstmt = con.prepareStatement(query);
            
            pstmt.setString(1, id);
            pstmt.setString(2, pwd);
            pstmt.setString(3, name);
            pstmt.setString(4, email);

            pstmt.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(pstmt != null)
            {
                try{
                    pstmt.close();
                }catch (Exception ex)
                {
                    ex.printStackTrace();
                }
            }
        }
    }
    public List<MemberVO> listMembers()
    {
        List<MemberVO> list = new ArrayList<MemberVO>();
        try
        {
            /*t_member 테이블 조회*/
            con = dataFactory.getConnection();
            String query = "select * from t_member";
            System.out.println("prepareStatement : " + query);
            /*prepareStatement 객체 사용하여 쿼리 조회*/
            pstmt = con.prepareStatement(query);
            ResultSet rs = pstmt.executeQuery();

            while (rs.next())
            {
                /*쿼리 실행 후 조회된 수량 많큼 각 컬럼 데이터를 뽑아옴.*/
                String id = rs.getString("user_id");
                String pwd = rs.getString("pwd");
                String name = rs.getString("name");
                String email = rs.getString("email");
                Date joinDate = rs.getDate("joinDate");

                /*MemberVO Setter에 파라미터로 데이터 전달*/
                MemberVO vo = new MemberVO();
                vo.setUser_id(id);
                vo.setPwd(pwd);
                vo.setName(name);
                vo.setEmail(email);
                vo.setJoinDate(joinDate);
                list.add(vo);
            }
            rs.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally {
            if(pstmt != null)
            {
                try{
                    pstmt.close();
                }catch (Exception ex)
                {
                    ex.printStackTrace();
                }
            }
            if (con != null)
            {
                try{
                    con.close();
                }catch (Exception ex)
                {
                    ex.printStackTrace();
                }
            }
        }
        return list; // 레코드 수량 만큼 List 배열에 retrun
    }
}