Member Save, Read, Search List MVC
회원정보를 파일에 저장, 읽기, 검색 기능을 MVC 패턴으로 구현한 예
ControllerServlet.java
package com.sbs.jsp.mvc;
import java.io.IOException;
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("*.do") // 다른 서블릿에서도 URL 패턴을 이처럼 설정하면 톰캣이 실행되지 않으므로 '*.mb' 등으로 변경해야 함
public class ControllerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("euc-kr");
String cmd = getCommand(request);
//System.out.println("cmd="+cmd);
MemberService service = null; // 모든 서비스 클래스가 구현해야 하는 인터페이스
if(cmd.indexOf("/member/writeMem")!=-1) {
service = new WriteMem();
}else if(cmd.indexOf("/member/searchMem")!=-1) {
service = new SearchMem();
}else if(cmd.indexOf("/member/listMem")!=-1) {
service = new ListMem();
}else if(cmd.indexOf("/member/deleteMem")!=-1) {
service = new DeleteMem();
}
String viewPage = service.process(request, response);
getServletContext().getRequestDispatcher(viewPage)
.forward(request, response);
}
private String getCommand(HttpServletRequest request) {
//요청 URL중에서 도메인과 포트번호가 제외된 경로를 추출한다
String uri = request.getRequestURI();
//컨텍스트패스가 제외된 경로를 추출한다
uri = uri.substring(request.getContextPath().length());
//.do 가 제외된 경로를 추출한다
String cmd = uri.substring(0, uri.lastIndexOf("."));
return cmd;
}
}
WriteMem.java
package com.sbs.jsp.mvc;
import java.io.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WriteMem implements MemberService
{
@Override
public String process(HttpServletRequest request,
HttpServletResponse response) {
// 브라우저에서 전송한 파라미터를 접수한다
String name = request.getParameter("name");
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String email = request.getParameter("email");
String memInfo = String.format("%s|%s|%s|%s", name,id,pwd,email);
// 파일에 저장한다
File f = new File("c:/test/member.txt");
PrintWriter pw = null;
try {
pw = new PrintWriter(new FileWriter(f,true));
pw.println(memInfo);
pw.close();
System.out.println("회원정보 저장 성공");
//저장 성공여부를 jsp 에게 전달한다
request.setAttribute("saveResult", true);
return "/member/memberForm.jsp";
} catch (IOException e) {
e.printStackTrace();
}
request.setAttribute("saveResult", false);
return null;
}
}
SearchMem.java
package com.sbs.jsp.mvc;
import java.io.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SearchMem implements MemberService
{
@Override
public String process(HttpServletRequest request,
HttpServletResponse response) {
String id = request.getParameter("id");
File f = new File("c:/test/member.txt");
try {
BufferedReader br = new BufferedReader(new FileReader(f));
String line = null;
while((line=br.readLine())!=null) {
String[] token = line.split("\\|");
if(token[1].equals(id)) {
request.setAttribute("searchResult", token);
return "/member/readMem.jsp";
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
ListMem.java
package com.sbs.jsp.mvc;
import java.io.*;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ListMem implements MemberService
{
@Override
public String process(HttpServletRequest request,
HttpServletResponse response) {
File f = new File("c:/test/member.txt");
try {
BufferedReader br = new BufferedReader(new FileReader(f));
String line = null;
List<MemberVO> list = new ArrayList<MemberVO>();
while((line=br.readLine())!=null) {
String[] token = line.split("\\|");
MemberVO m = new MemberVO();
m.setName(token[0]);
m.setId(token[1]);
m.setPwd(token[2]);
m.setEmail(token[3]);
list.add(m);
}
request.setAttribute("list", list);
return "/member/memList.jsp";
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
MemberVO.java
package com.sbs.jsp.mvc;
public class MemberVO
{
String name;
String id;
String pwd;
String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
/member/memberForm.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
Object resultObj = request.getAttribute("saveResult");
boolean saved = false;
if(resultObj!=null) {
saved = (Boolean)resultObj;
request.removeAttribute("saveResult");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta >
<title>회원정보 입력폼</title>
<script type="text/javascript">
var saved = <%=saved%>;
if(saved){
alert('회원정보 저장에 성공했습니다');
}
</script>
</head>
<body>
<form action="writeMem.do" method="post">
이름 <input type="text" name="name">
아이디 <input type="text" name="id">
비밀번호 <input type="password" name="pwd">
Email <input type="email" name="email">
<input type="submit" value="저 장">
</form>
</body>
</html>
/member/memList.jsp
<%@page import="com.sbs.jsp.mvc.*"%>
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
List<MemberVO> list = (List<MemberVO>)request.getAttribute("list");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원정보 리스트</title>
</head>
<body>
<h3>회원정보 리스트</h3>
<form action="deleteMem.do" method="post">
<table><tr><th>이 름</th><th>아이디</th><th>비밀번호</th><th>Email</th>
<th>삭제</th></tr>
<%
for (int i=0;i<list.size();i++) {
MemberVO m = list.get(i); %>
<tr>
<td> <%=m.getName()%> </td>
<td> <%=m.getId()%> </td>
<td> <%=m.getPwd()%> </td>
<td> <%=m.getEmail()%> </td>
<td> <input type="radio" name="id" value="<%=m.getId()%>">
</tr>
<% }
%>
<tr><td colspan="5" style="text-align:center;">
<input type="submit" value="선택된 회원 삭제"></td></tr>
</table>
</form>
</body>
</html>
/member/readMem.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
Object arrObj = request.getAttribute("searchResult");
String[] info = null;
if(arrObj!=null) {
info = (String[]) arrObj;
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원정보 검색결과</title>
</head>
<body>
<h3>검색된 회원정보</h3>
이름 <%=info[0]%><p>
아이디 <%=info[1]%><p>
비밀번호 <%=info[2]%><p>
Email <%=info[3]%><p>
</body>
</html>
/member/searchForm.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>회원정보 검색 폼</title>
</head>
<body>
<form action="searchMem.do" method="post">
회원 아이디 <input type="text" name="id">
<input type="submit" value="검 색">
</form>
</body>
</html>
/member/deleteMem.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
Object resultObj = request.getAttribute("deleteResult");
boolean deleted = false;
if(resultObj!=null) {
deleted = (Boolean)resultObj;
request.removeAttribute("deleteResult");
}
%>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var deleted = <%=deleted%>;
if(deleted){
alert('회원정보 삭제에 성공했습니다');
location.href='listMem.do';
}
</script>
<title>회원정보 삭제결과</title>
</head>
<body>
</body>
</html>