* MVC방식으로 브라우저의 요청은 서블릿이 맡고,
비즈니스 처리는 모델이 맡고, 화면은 JSP가 맡는 회원관리 기능구현
📌 회원 정보 추가 기능 구현
- controller가 브라우저로부터 어떤 요청을 받았는지 알아내야한다.
그런 다음 그 요청에 대해 해당하는 모델을 선택하여 작업을 요청해야 하는데,
이 역할을 하는 방법을 커맨드 패턴이라 한다.
- 커맨드 패턴이란 한마디로 브라우저가 URL패턴을 이용해서 컨트롤러에게 수행 작업을 요청하는 방법이다.
- 컨트롤러는 getPathInfo()메서드를 이용해서 URL패턴에서 요청명을 받아와 작업을 수행한다.
- http://localhost:8090/pro17/member/listMembers.do
1. /member : 첫번째단계 요청은 회원기능을 의미한다.
2. /listMembers.do : 두번째단계 요청은 회원 기능 중 회원 조회 기능을 의미한다.
- 회원 등록 기능 구성
View = memberForm.jsp
Model = MemberDAO, MemberVO
Controller = MemberController(/mem.do)
- 회원 등록 기능 순서
1. 회원가입 창에서 회원 정보를 입력하고 url패턴을 /member/addMember.do로 서버에 요청한다.
2. MemberController에서 getPathInfo()메서드를 이용해 요청명인 /addMember.do를 받아온다.
3. 요청명에 대해 MemberDAO의 addMember()메서드를 호출한다.
4. addMember()메서드에서 sql문으로 테이블에 회원 정보를 추가한다.
📌 MemberVO.java
package sec02.ex01;
import java.sql.Date;
public class MemberVO {
private String id;
private String pwd;
private String name;
private String email;
private Date joinDate;
public MemberVO() {
System.out.println("MemberVO ������ ȣ��");
}
public MemberVO(String id, String pwd, String name, String email) {
super();
this.id = id;
this.pwd = pwd;
this.name = name;
this.email = email;
}
public MemberVO(String id, String pwd, String name, String email, Date joinDate) {
super();
this.id = id;
this.pwd = pwd;
this.name = name;
this.email = email;
this.joinDate = joinDate;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getJoinDate() {
return joinDate;
}
public void setJoinDate(Date joinDate) {
this.joinDate = joinDate;
}
}
📌 MemberDAO.java
package sec02.ex01;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class MemberDAO {
private DataSource dataFactory;
private Connection conn;
private PreparedStatement pstmt;
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> membersList = new ArrayList();
try {
conn = dataFactory.getConnection();
String query = "select * from t_member order by joinDate desc";
System.out.println(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 memberVO = new MemberVO(id, pwd, name, email, joinDate);
membersList.add(memberVO);
}
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return membersList;
}
public void addMember(MemberVO m) {
try {
conn = dataFactory.getConnection();
String id = m.getId();
String pwd = m.getPwd();
String name = m.getName();
String email = m.getEmail();
String query = "INSERT INTO t_member(id, pwd, name, email)" + " VALUES(?, ? ,? ,?)";
System.out.println(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();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
📌 listMembers.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
import=" java.util.*,sec02.ex01.*"
pageEncoding="UTF-8"
isELIgnored="false"
%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<%
request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
<style>
.cls1 {
font-size:40px;
text-align:center;
}
.cls2 {
font-size:20px;
text-align:center;
}
</style>
</head>
<body>
<p class="cls1">회원정보</p>
<table align="center" border="1" >
<tr align="center" bgcolor="lightgreen">
<td width="7%" ><b>아이디</b></td>
<td width="7%" ><b>비밀번호</b></td>
<td width="7%" ><b>이름</b></td>
<td width="7%"><b>이메일</b></td>
<td width="7%" ><b>가입일</b></td>
</tr>
<c:choose>
<c:when test="${ empty membersList}" >
<tr>
<td colspan="5" align="center">
<b>등록된 회원이 없습니다.</b>
</td>
</tr>
</c:when>
<c:when test="${!empty membersList}" >
<c:forEach var="mem" items="${membersList }" >
<tr align="center">
<td>${mem.id }</td>
<td>${mem.pwd }</td>
<td>${mem.name}</td>
<td>${mem.email }</td>
<td>${mem.joinDate}</td>
</tr>
</c:forEach>
</c:when>
</c:choose>
</table>
<a href="${contextPath}/member/memberForm.do"><p class="cls2">회원 가입하기</p></a>
</body>
</html>
📌 MemberController.java
package sec02.ex01;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class MemberController
*/
@WebServlet("/member/*")
public class MemberController extends HttpServlet {
private static final long serialVersionUID = 1L;
MemberDAO memberDAO;
public void init() throws ServletException {
memberDAO = new MemberDAO();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String nextPage = null;
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String action = request.getPathInfo();
System.out.println("action:" + action);
if (action == null || action.equals("/listMembers.do")) {
List<MemberVO> membersList = memberDAO.listMembers();
request.setAttribute("membersList", membersList);
nextPage = "/test02/listMembers.jsp";
} else if (action.equals("/addMember.do")) {
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String name = request.getParameter("name");
String email = request.getParameter("email");
MemberVO memberVO = new MemberVO(id, pwd, name, email);
memberDAO.addMember(memberVO);
nextPage = "/member/listMembers.do";
} else if (action.equals("/memberForm.do")) {
nextPage = "/test02/memberForm.jsp";
} else {
List<MemberVO> membersList = memberDAO.listMembers();
request.setAttribute("membersList", membersList);
nextPage = "/test02/listMembers.jsp";
}
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
}
}
📌 MemberForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입창</title>
<body>
<form method="post" action="${contextPath}/member/addMember.do">
<h1 style="text-align:center">회원 가입창</h1>
<table align="center">
<tr>
<td width="200"><p align="right">아이디</td>
<td width="400"><input type="text" name="id"></td>
</tr>
<tr>
<td width="200"><p align="right">비밀번호</td>
<td width="400"><input type="password" name="pwd"></td>
</tr>
<tr>
<td width="200"><p align="right">이름</td>
<td width="400"><p><input type="text" name="name"></td>
</tr>
<tr>
<td width="200"><p align="right">이메일</td>
<td width="400"><p><input type="text" name="email"></td>
</tr>
<tr>
<td width="200"><p> </p></td>
<td width="400">
<input type="submit" value="가입하기">
<input type="reset" value="다시입력">
</td>
</tr>
</table>
</form>
</body>
</html>
'Servlet & JSP > Servlet & JSP 공부' 카테고리의 다른 글
[자바웹을다루는기술] MVC 이용한 회원 관리 - 회원조회기능 (0) | 2022.02.23 |
---|---|
[자바웹을다루는기술] MVC패턴 (0) | 2022.02.23 |
[자바웹을다루는기술] JSP 액션태그 (0) | 2022.02.17 |
[자바웹을다루는기술] 스크립트 요소 이용해 회원 정보 조회하기 (0) | 2022.02.17 |
[자바웹을다루는기술] 내장 객체 기능 (0) | 2022.02.17 |