티스토리 뷰

반응형

- ConnectionPool을 이용해 회원을 등록한다.

- ConnectionPool 설정 과정은 다음 글을 참고한다.

https://dev1023.tistory.com/72

 

DataSource를 이용한 DB 연동

DataSource- 웹 애플리케이션이 실행됨과 동시에 연동할 DB와의 연결을 미리 설정한다.- 필요할 때 마다 미리 연결해 놓은 상태를 이용해 빠르게 DB와 연동하여 작업한다.- 미리 데이터베이스와 연결

dev1023.tistory.com

 

- 회원 가입 페이지를 생성한다. 해당 파일은 WebContent 디렉터리 아래에 작성한다.

 

* MemberForm.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입창</title>
<script type="text/javascript">
function fn_sendMember(){
   var frmMember=document.frmMember;
   var id=frmMember.id.value;
   var pwd=frmMember.pwd.value;
   var name=frmMember.name.value;
   var email=frmMember.email.value;
   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("이메일은 필수입니다.");
   }else{
      frmMember.method="post";
      frmMember.action="member2";
      frmMember.submit();
   } 
}
</script>
</head>
<body>
  <form name="frmMember">
  <table>
	   <th>회원 가입창</th>
	  <tr>
		<td>아이디</td>
		<td><input type="text" name="id"></td>
	  </tr>
	  <tr>
		<td>비밀번호</td>
		<td><input type="password" name="pwd"></td>
	  </tr>
	  <tr>
		<td>이름</td>
		<td><input type="text" name="name"></td>
	  </tr>
	    <tr>
		<td>이메일</td>
		<td><input type="text" name="email"></td>
	  </tr>
  </table>
   <input type="button" value="가입하기" onclick="fn_sendMember()">
   <input type="reset" value="다시입력">
   <input  type="hidden" name="command" value="addMember" />	
  </form>
 </body>
</html>

회원 가입 페이지

 

- command 값을 받아 addMember 이면 같이 전송된 회원 정보를 받아 온다.

- 회원 정보를 MemberVO 객체에 설정한 MemberDAO 메서드로 전달해 SQL문을 이용해 테이블에 추가한다.

 

* MemberServlet.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import java.util.List;

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 dao.MemberDAO;
import vo.MemberVO;

/**
 * Servlet implementation class MemberServlet
 */
@WebServlet("/member2")
public class MemberServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}
	protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		MemberDAO dao = new MemberDAO();
		PrintWriter out = response.getWriter();
		String command = request.getParameter("command");
		
		if(command != null && command.equals("addMember")) { // 회원 추가 시
			String _id = request.getParameter("id");
			String _pwd = request.getParameter("pwd");
			String _name = request.getParameter("name");
			String _email = request.getParameter("email");
			MemberVO vo = new MemberVO();
			vo.setId(_id);
			vo.setPwd(_pwd);
			vo.setEmail(_email);
			vo.setName(_name);
			dao.addMember(vo);
		}else if(command != null && command.equals("delMember")) { //회원 삭제 시
			String id = request.getParameter("id");
//			dao.delMember(id);
		}
		List 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++) {
			MemberVO memberVO = (MemberVO) list.get(i);
			String id = memberVO.getId();
			String pwd = memberVO.getPwd();
			String name = memberVO.getName();
			String email = memberVO.getEmail();
			Date joinDate = memberVO.getJoinDate();
			out.print("<tr><td>" + id + "</td><td>" + pwd + "</td><td>"+name + 
					"</td><td>"+email+"</td><td>" + joinDate + "</td><td>"+"<a href='/ServletBusiness/member2?command=delMember&id="+id+"'> 삭제 </a></td></tr>");
		}
		out.print("</table></body></html>");
		out.print("<a href='/ServletBusiness/MemberForm.html'>새 회원 가입 하기 </a>");
	}
}

 

 

- DAO 클래스에서 addMember() 메서드를 추가한다.

 

* MemberDAO.java

package dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import vo.MemberVO;

public class MemberDAO {
	
	private Connection conn;
	private PreparedStatement pstmt;
	private DataSource dataFactory;

	public MemberDAO() {
		Context ctx;
		try {
			// JNDI에 접근하기 위해 기본 경로("java:/comp/env")를 지정
			ctx = new InitialContext();
			Context envContext = (Context)ctx.lookup("java:/comp/env");
			// 톰캣 context.xml에 설정한 name 값인 jdbc/mysql을 이용해 톰캣이 미리 연결한 DataSource를 받아 옴.
			dataFactory = (DataSource)envContext.lookup("jdbc/mysql");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	// 멤버 목록 확인 메서드
	public List listMembers() {
		List list = new ArrayList();
		try {
			// connDB();
			conn = dataFactory.getConnection();	// DB에 연결
			String query = "select * from t_member ";
			System.out.println("prepareStatememt: " + query);
			pstmt = conn.prepareStatement(query);
			ResultSet rs = pstmt.executeQuery();
			while (rs.next()) {
				String id = rs.getString("id");
				String pwd = rs.getString("pwd");
				String name = rs.getString("name");
				String email = rs.getString("email");
				Date joinDate = rs.getDate("joinDate");
				MemberVO vo = new MemberVO();
				vo.setId(id);
				vo.setPwd(pwd);
				vo.setName(name);
				vo.setEmail(email);
				vo.setJoinDate(joinDate);
				list.add(vo);
			}
			rs.close();
			pstmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

	
	// 멤버 추가 메서드
	public void addMember(MemberVO memberVO) { 
		try {
			conn = dataFactory.getConnection();
			String id = memberVO.getId();
			String pwd = memberVO.getPwd();
			String name = memberVO.getName();
			String email = memberVO.getEmail();
			
			String query = "INSERT INTO t_member";
			query += "(id, pwd, name, email)";
			query += "VALUES(?,?,?,?)";
			System.out.println("prepareStatement : " + query);
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, id);
			pstmt.setString(2,pwd);
			pstmt.setString(3, name);
			pstmt.setString(4, email);
			pstmt.executeUpdate();
			pstmt.close();
		}catch(Exception e) {
			System.out.println("오류가 발생했습니다.");
		}
	}

}

 

- 코드 작성 후 톰캣을 재시작하고 브라우저에 localhost:[port]/[project_name]/MemberForm.html 을 입력하여 회원 가입 페이지로 이동한다.

- 다음 페이지에서 정보를 입력하고 [가입하기] 버튼을 눌러 회원 등록을 해 본다.

회원 등록 페이지

- 정상적으로 등록이 되었다면 다음과 같이 추가된 레코드와 함께 회원 정보 리스트 페이지가 나타날 것이다.

회원 등록 결과

 

반응형

'Servlet' 카테고리의 다른 글

서블릿 포워드(Forward)  (0) 2024.08.12
서블릿 - 비즈니스 로직(회원 정보 삭제)  (0) 2024.08.11
DataSource를 이용한 DB 연동  (0) 2024.08.11
서블릿 - 비즈니스 로직 처리  (0) 2024.08.11
GET/POST 전송 방식  (0) 2024.08.11
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함