불로구
JSP - DataSource를 이용해 회원 등록 / 회원 삭제 본문
이번 포스팅에서는 커넥션풀을 이용하여 회원 등록과 회원 삭제를 해보겠습니다.
1) 우선 회원가입 창을 만들어야 한다.
- 모든 홈페이지는 회원가입 페이지가 존재합니다.
- 우리도 간단한 회원가입을 HTML을 통해 생성하겠습니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function fn_send(){
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 == "" || id.length == 0){
alert("아이디가 입력하세요")
} else if(pwd == "" || pwd.length == 0){
alert("비밀번호를 입력하세요");
} else if(name == "" || name.length == 0){
alert("이름을 입력하세요");
} else if(email == "" || email.length == 0){
alert("이메일을 입력하세요");
} else{
frmMember.method = "post"
frmMember.action = "member3";
frmMember.submit();
}
}
</script>
</head>
<body>
<h2>회원가입</h2>
<form name="frmMember">
<table>
<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_send()" />
<input type="reset" value="리셋" />
<input type="hidden" name="command" value="addMember" />
</form>
</body>
</html>
- 자신만의 회원가입 페이지를 만들어 DB에 칼럼과 맞추어 양식을 생성한다.
- 자바스크립트를 활용하여 각 요소에 입력이 되지 않았을 경우 경고 창을 나타내도록 한다.
- 여기서는 입력값의 여부만 검사하겠습니다. 여러분이 원한다면 각 요소의 길이 제한 등 여러 가지 설정을 하면 돼요!
- frmMember의 접근하여 post 방식과 member3과 매핑 되도록 설정했습니다.
2) MemberServlet 서블릿 생성
- 우리는 서블릿에서 커맨드 값을 받아와 각 역할에 따라 정보를 받아올 겁니다.
package sec02.ex02;
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;
@WebServlet("/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(request, response);
}
private 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");
System.out.println("command : " + 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");
System.out.println("id : " + _id );
System.out.println("pwd : " + _pwd );
System.out.println("name : " + _name );
System.out.println("email : " + _email );
sec02.ex02.MemberVO vo = new sec02.ex02.MemberVO();
vo.setId(_id);
vo.setPwd(_pwd);
vo.setName(_name);
vo.setEmail(_email);
dao.addMember(vo);
}else if(command != null && command.equals("delMember")) {
String id = request.getParameter("id");
dao.delMember(id);
}
List<sec02.ex02.MemberVO> list = dao.listMembers();
out.print("<html><body>");
out.print("<table border=1><tr aligh='center' bgcolor='loghtgreen'>");
out.print("<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td><td>가입일</td><td >삭제</td></tr>");
for(int i=0; i<list.size(); i++) {
sec02.ex02.MemberVO memberVO = (sec02.ex02.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='/webShop/member3?command=delMember&id="+id+"'>삭제 </a></td></tr>");
}
out.print("</table></body></html>");
out.print("<a href='/webShop/memberForm.html'>새 회원 등록하기</a");
}
}
- post나 get 방식으로 전송 시 doHandle 메서드를 호출하게 설정했다.
- doHandle 메 서드에서 커맨드 값을 받아 addMember 이면 전송된 값을을 받아온다.
- HTML로 작성된 가입상에서 전송된 값을 얻어와 MemberVO 객체에 저장한 후 sql 문으로 전송한다.
- delMember도 마찬가지로 id 값을 받아와 삭제한다.
- 그 밑에 출력 부분은 이전 포스팅으로 확인하시면 됩니다.
3) MemberDAO
package sec02.ex02;
import java.sql.Connection;
import java.sql.Date;
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;
public class MemberDAO {
// private Statement stmt;
private Connection con;
private PreparedStatement pstmt;
// private static final String driver = "oracle.jdbc.driver.OracleDriver";
// private static final String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
// private static final String user = "system";
// private static final String pwd = "ADMIN1234";
private DataSource dataFactory;
public MemberDAO() {
try {
Context ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:/comp/env");
dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
}catch(Exception e) {
e.printStackTrace();
}
}
public List<MemberVO> listMembers() {
List<MemberVO> list = new ArrayList<MemberVO>();
try {
// connDB();
con = dataFactory.getConnection();
String query = "select * from t_member ";
System.out.println("prepareStatement" + query);
pstmt = con.prepareStatement(query);
ResultSet rs = pstmt.executeQuery(query);
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();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
// private void connDB() {
// try {
// Class.forName(driver);
// System.out.println("Oracle 드라이버 로딩 성공");
// con = DriverManager.getConnection(url, user, pwd);
// System.out.println("Connection 생성 성공");
// stmt = con.createStatement();
// System.out.println("Statement 생성 성공");
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
public void addMember(MemberVO memberVO) {
try {
con = 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 = con.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) {
e.printStackTrace();
}
}
public void delMember(String id) {
try {
con = dataFactory.getConnection();
String query = "delete from t_member" + " where id=?";
System.out.println("prepareStatememt:" + query);
pstmt = con.prepareStatement(query);
pstmt.setString(1, id);
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- addMember 메서드의 경우 DataSource를 이용해 데이터베이스와 연결한다.
- 테이블에 저장할 회원 정보를 받아온 후, insert 문을 통해 value에 있는?에 순서대로 정보를 삽입한다.
4) MemberVO의 경우 이전 포스팅에서 변경된 것이 없습니다.
5) 테스트
현재 DB에 저장된 정보는 사진과 같습니다. 이제 추가와 삭제를 해볼까요?
만들어 놓은 회원가입 화면에서 정보를 입력해보겠습니다.
이렇게 작성하고 등록을 눌리면?
원래의 데이터에서 방금 작성한 test가 추가되었습니다.
그렇다면 정보가 일치한지 DB와도 확인해야겠지요?
SELECT * FROM t_member;을 통해 조회해보면
일치한 것을 알 수 있습니다
'프로그래밍 > WEB' 카테고리의 다른 글
JSP - 서블릿 포워드 기능 (0) | 2021.04.08 |
---|---|
SpringFramework - JNDI (0) | 2021.04.06 |
JSP & SpringFramework - 커넥션풀 동작 과정 (0) | 2021.04.02 |
(Servlet) - 자바스크립트로 서블릿 요청 (0) | 2021.03.17 |
(Servlet) 서블릿 DB 연동하기 (1) (0) | 2021.03.15 |