JSP/Member MVC

Member Save, Read, Search List MVC

Soul-Learner 2014. 7. 19. 14:03

회원정보를 파일에 저장, 읽기, 검색 기능을 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;

}


}



MemberService.java
package com.sbs.jsp.mvc;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface MemberService 
{
public String process(HttpServletRequest request, HttpServletResponse response);
}


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;

}


}



DeleteMem.java
package com.sbs.jsp.mvc;

import java.io.*;
import java.util.*;

import javax.servlet.http.*;

public class DeleteMem implements MemberService {

@Override
public String process(HttpServletRequest request,
HttpServletResponse response) {
//이용자로부터 회원의 id를 접수하고 해당 회원의 정보를 삭제한다
String id = request.getParameter("id");
File f = new File("c:/test/member.txt");
try {
BufferedReader br = new BufferedReader(new FileReader(f));
String line = null;
List<String> buf = new ArrayList<String>();
while((line=br.readLine())!=null) {
String[] token = line.split("\\|");
if(token[1].equals(id)) continue;
buf.add(line);
}
br.close();
PrintWriter pw = new PrintWriter(f);
for(int i=0;i<buf.size();i++) {
pw.println(buf.get(i));
}
pw.close();
request.setAttribute("deleteResult", true);
return "/member/deleteResult.jsp";
} catch (Exception e) {
e.printStackTrace();
}
//성공여부를 request 객체에 저장한다
//결과를 출력할 jsp 경로를 리턴한다
request.setAttribute("deleteResult", false);
return "/member/deleteResult.jsp";
}
}


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>