Front Controller 패턴
☞ client의 요청을 집중시키는 앞단 controller
☞ controller들의 공통로직을 앞단에서 처리
☞ 모든 Client의 요청을 한곳에 집중시킴
☞ 기존의 서블릿을 대신하는 각 서블릿과 이름이 동일한 Controller를 작성하고 Forwarding을 통해서 MemberFrontController(앞단 controller)에서 command 명령에 따라 각각의 controller로 수행을 지시한다.
MemberFrontController.java
package member.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MemberFrontController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Controller 수행 전 작업(공통) - 한글처리
request.setCharacterEncoding("UTF-8");
//Controller 로직 처리 - Controller 로직 호출
String command = request.getParameter("command");
Controller ctr = null;
if(command.equals("login")) {
ctr= new LoginController();
}
else if(command.equals("logout")) {
ctr = new LogoutController();
}
else if(command.equals("member_info")) {
ctr = new GetLoginMemberInforController();
}
else if(command.equals("modifyForm")) {
ctr= new ModifyFormController();
}
else if(command.equals("modify")) {
ctr= new ModifyMemberController();
}
else if(command.equals("register")) {
ctr = new RegisterMemberController();
}
else if(command.equals("remove")) {
ctr = new RemoveMemberController();
}
else if(command.equals("allmember")) {
ctr = new GetAllMemberInfoController();
}
else if(command.equals("searchMileage")) {
ctr= new SearchByMileageRangeController();
}
else if(command.equals("searchMemberByName")) {
ctr = new SearchMemberByNameController();
}
ForwardDTO fdto = null;
try {
fdto = ctr.execute(request, response);
} catch (Exception e) {
e.printStackTrace();
fdto = new ForwardDTO("/res/error.jsp", false);
}
//Controller 수행 후 작업(공통) - 응답(View로 수행 이동)
if(fdto.isRedirect()) {
response.sendRedirect(fdto.getUrl());
} else {
RequestDispatcher rdp = request.getRequestDispatcher(fdto.getUrl());
rdp.forward(request, response);
}
}
Controller.java
package member.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import member.dto.ForwardDTO;
//모든 Controller 클래스의 type이 되는 interface
//컨트롤러 로직 처리 메소드 선언
public interface Controller {
public ForwardDTO execute(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
GetAllMemberInfoController.java
package member.controller;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import member.dto.ForwardDTO;
import member.dto.MemberDTO;
import member.model.service.MemberManagerService;
public class GetAllMemberInfoController implements Controller {
@Override
public ForwardDTO execute(HttpServletRequest request,
HttpServletResponse response) throws Exception {
MemberManagerService mms = MemberManagerService.getInstance();
ForwardDTO fdto =null;
try {
ArrayList <MemberDTO> list = mms.getMemberList();
request.setAttribute("list", list);
fdto = new ForwardDTO("/res/member_list.jsp", false);
} catch (SQLException e) {
e.printStackTrace();
fdto = new ForwardDTO("/res/error.jsp", false);
}
return fdto;
}
}
GetLoginMemberInfoController.java
package member.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import member.dto.ForwardDTO;
public class GetLoginMemberInforController implements Controller {
@Override
public ForwardDTO execute(HttpServletRequest request,
HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
ForwardDTO fdto = null;
if(session.getAttribute("mto") ==null) {
session.setAttribute("error_message" , "로그인하지 않았습니다. 로그인 먼저 해주세요");
fdto = new ForwardDTO("/login_form.jsp", false);
}
else
{
fdto = new ForwardDTO("/res/member_detail.jsp", false);
}
return fdto;
}
}
LoginController.java
package member.controller;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import member.dto.ForwardDTO;
import member.dto.MemberDTO;
import member.model.service.MemberManagerService;
public class LoginController implements Controller{
public ForwardDTO execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
String id = request.getParameter("id");
String password = request.getParameter("password");
HttpSession session = request.getSession();
MemberManagerService mms = MemberManagerService.getInstance();
ForwardDTO fdto = null;
try {
MemberDTO mto = mms.getMemberById(id);
if(mto !=null) {
if(password.equals(mto.getPassword())) {
session.setAttribute("mto", mto);
fdto = new ForwardDTO("/res/login_success.jsp", false);
} else {
request.setAttribute("error_message", "비밀번호가 일치하지 않습니다.");
fdto = new ForwardDTO("/login_form.jsp", false);
}
} else {
request.setAttribute("error_message", "ID가 일치하지 않습니다,");
fdto = new ForwardDTO("/login_form.jsp", false);
}
} catch (SQLException e) {
e.printStackTrace();
request.setAttribute("error_message", e.getMessage());
fdto = new ForwardDTO("/res/error.jsp", false);
}
return fdto;
}
}
LogoutController.java
package member.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import member.dto.ForwardDTO;
import member.dto.MemberDTO;
public class LogoutController implements Controller {
@Override
public ForwardDTO execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
MemberDTO mto = (MemberDTO)session.getAttribute("mto");
if(mto==null)
{
request.setAttribute("error_message", "로그인 후 로그아웃 할 수 있습니다.");
} else {
session.invalidate();
}
return new ForwardDTO("/login_form.jsp", false);
}
}
ModifyFormController.java
package member.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import member.dto.ForwardDTO;
public class ModifyFormController implements Controller {
@Override
public ForwardDTO execute(HttpServletRequest request,
HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
ForwardDTO fdto = null;
if(session.getAttribute("mto") != null) {
fdto = new ForwardDTO("/res/modify_form.jsp", false);
}
else {
session.setAttribute("error_message" , "로그인하지 않았습니다. 로그인 먼저 해주세요");
fdto = new ForwardDTO("/login.form.jsp", false);
}
return fdto;
}
}
ModifyMemberController.java
package member.controller;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import member.dto.ForwardDTO;
import member.dto.MemberDTO;
import member.model.service.MemberManagerService;
public class ModifyMemberController implements Controller {
@Override
public ForwardDTO execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
MemberDTO mto = (MemberDTO)session.getAttribute("mto");
ForwardDTO fdto = null;
if(mto == null){//로그인 안된 경우
request.setAttribute("error_message", "로그인 후 회원정보 수정이 가능합니다. 로그인 먼저 하세요");
fdto = new ForwardDTO("/login_form.jsp", false);
}else{
MemberDTO m = (MemberDTO)request.getAttribute("mto");
try {
MemberManagerService mms = MemberManagerService.getInstance();
mms.modifyMember(m);
fdto = new ForwardDTO("/res/member_detail.jsp", false);
mto.setPassword(m.getPassword());
mto.setName(m.getName());
mto.setRegisterNumber1(m.getRegisterNumber1());
mto.setRegisterNumber2(m.getRegisterNumber2());
} catch (SQLException e) {
e.printStackTrace();
request.setAttribute("error_message", e.getMessage());
fdto = new ForwardDTO("/res/error.jsp", false);
}
}
return fdto;
}
}
RegisterMemberController.java
package member.controller;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import member.dto.ForwardDTO;
import member.dto.MemberDTO;
import member.exception.DuplicatedIdException;
import member.exception.DuplicatedRegisterNumberException;
import member.model.service.MemberManagerService;
public class RegisterMemberController implements Controller {
@Override
public ForwardDTO execute(HttpServletRequest request,
HttpServletResponse response) throws Exception {
MemberDTO mto = (MemberDTO) request.getAttribute("mto");
// 2. Business Logic 처리 - MemberManagerService.regiseterMember()
MemberManagerService mms = MemberManagerService.getInstance();
ForwardDTO fdto = null;
try {
mms.registerMember(mto);
// 3. 응답 - register_success.jsp, error.jsp
fdto = new ForwardDTO("/res/register_success.jsp", false);
} catch (SQLException e) {
e.printStackTrace();
fdto = new ForwardDTO("/res/error.jsp", false);
} catch (DuplicatedIdException e) {
e.printStackTrace();
fdto = new ForwardDTO("/res/error.jsp", false);
} catch (DuplicatedRegisterNumberException e) {
e.printStackTrace();
fdto = new ForwardDTO("/res/error.jsp", false);
}
return fdto;
}
}
RemoveMemberController.java
package member.controller;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import member.dto.ForwardDTO;
import member.dto.MemberDTO;
import member.model.service.MemberManagerService;
public class RemoveMemberController implements Controller {
@Override
public ForwardDTO execute(HttpServletRequest request,
HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
MemberDTO mto = (MemberDTO)session.getAttribute("mto");
ForwardDTO fdto =null;
if(mto == null) {
session.setAttribute("error_message", "로그인 후 회원 탈퇴가 가능합니다. 로그인 먼저 하세요");
fdto = new ForwardDTO("/login_form.jsp", false);
} else {
MemberManagerService mms = MemberManagerService.getInstance();
try {
mms.removeMemberById(mto.getId());
session.setAttribute("message", "회원탈퇴가 성공적으로 처리되었습니다");
fdto = new ForwardDTO("/index.jsp", false);
session.invalidate();
} catch (SQLException e) {
e.printStackTrace();
session.setAttribute("error_message", e.getMessage());
fdto = new ForwardDTO("/error.jsp", false);
}
}
return fdto;
}
}
SearchByMileageRangeController.java
package member.controller;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import member.dto.ForwardDTO;
import member.dto.MemberDTO;
import member.model.service.MemberManagerService;
public class SearchByMileageRangeController implements Controller {
@Override
public ForwardDTO execute(HttpServletRequest request,
HttpServletResponse response) throws Exception {
MemberManagerService mms = MemberManagerService.getInstance();
ForwardDTO fdto =null;
try {
ArrayList<MemberDTO> list = mms.searchMemberByMileageRange(Integer.parseInt(request.getParameter("range")), Integer.parseInt(request.getParameter("range1")));
request.setAttribute("list", list);
request.setAttribute("title", "마일리지 범위로 조회 결과");
request.setAttribute("search_value", Integer.parseInt(request.getParameter("range"))+"~"+Integer.parseInt(request.getParameter("range1")));
fdto = new ForwardDTO("/res/search_result.jsp", false);
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("error_message", "입력 형태가 정확하지 않습니다");
fdto = new ForwardDTO("/res/error.jsp", false);
}
return fdto;
}
}
SearchMemberByNameController.java
package member.controller;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import member.dto.ForwardDTO;
import member.dto.MemberDTO;
import member.model.service.MemberManagerService;
public class SearchMemberByNameController implements Controller {
@Override
public ForwardDTO execute(HttpServletRequest request,
HttpServletResponse response) throws Exception {
MemberManagerService mms = MemberManagerService.getInstance();
ForwardDTO fdto = null;
try {
ArrayList<MemberDTO> list = mms.searchMemberByName(request.getParameter("name"));
request.setAttribute("list", list);
request.setAttribute("title", "이름으로 조회 결과");
request.setAttribute("search_value", request.getParameter("name"));
fdto = new ForwardDTO("/res/search_result.jsp", false);
} catch(SQLException e) {
e.printStackTrace();
request.setAttribute("error_message", "입력 형태가 정확하지 않습니다");
fdto = new ForwardDTO("/res/error.jsp", false);
}
return fdto;
}
}
'Wanna be a Programmer > Servlet & JSP' 카테고리의 다른 글
Servlet & JSP day19 - 게시판(Controller, BoardDTO, ForwardDTO) (0) | 2012.05.16 |
---|---|
Servlet & JSP day18 - 게시판(Database, Utillity) (0) | 2012.05.15 |
Servlet & JSP day17 - MVC 모델을 응용한 회원정보 관리(회원탈퇴) (0) | 2012.05.14 |
Servlet & JSP day17 - MVC 모델을 응용한 회원정보 관리(전체회원정보조회) (0) | 2012.05.14 |
Servlet & JSP day17 - MVC 모델을 응용한 회원정보 관리(로그인) (0) | 2012.05.14 |