WebStudy/MVC2기반 Shopping mall

Step 6 - Controller, Service, Forward 만들기

델랑 2015. 7. 28. 21:50

착한 친구 Forward를 먼저 만들어 보자.

Service 에서 명령을 수행하고 결과 값을 포워딩 해야하는데

그때 나를 도와주는 착한 친구다.

 

forward클래스는 redirect 여부와 포워딩할 페이지의 위치를 가지고 있다.

 

class name : ServiceForward

package : net.member.service

 

public class ServiceForward {
 private boolean isRedirect = false;
 private String path = null;
 
 public boolean isRedirect(){
  return isRedirect;
 }
 public String getPath(){
  return path;
 }
 public void setPath(String path){
  this.path = path;
  
 }
 public void setRedirect(boolean is){
  isRedirect = is;
 }
}

 

 

 

 

MVC 에서 M : 모듈(영어 철자가...) 에 해당하는 Service 를 만들어보자.

Action 으로 이름 짓는 책도 있고 Service 로 하는 책도 있는데

뭐가 맞는지는 모르겠다.

 

나는 Service 로 만든다. 우왕~!

 

일단 모든 Service는 execute()매소드를 가져야 한다.

그런데 내가 까먹을 수도있으니까 interface를 만들어서 execute() 추상매소드를 만들고

 

모든 Service 클래스는 Service interface 를 구현 해야하기로 하자.

 

interface name : Service

package : net.member.service

 

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

public interface Service {
 public ServiceForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception;
}

 

 

 

이제 /memberSample.me 명령어를 처리해 줄 Sampleservice 클래스를 만들자.

 

class name : SampleService

implements : Service

package : net.member.service

 


import java.util.ArrayList;

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

import net.member.db.DAOInter;
import net.member.db.MemberDAO;
import net.member.db.MemberDTO;

 

public class SampleService implements Service {

 @Override
 public ServiceForward execute(HttpServletRequest request,
   HttpServletResponse response) throws Exception {

  
  ServiceForward forward = new ServiceForward();
  DAOInter dao = MemberDAO.instanceOf();
  ArrayList<MemberDTO> list = dao.sampleTest();
  
  request.setAttribute("member", list);
  

  forward.setPath("./member/test.jsp");


  return forward;
 }

}

 

 

 

MVC 에서 C에 해당하는 controller 를 만들어 보자.

(연습하는 입장에서 손으로 일일이 쳐봐야 겠지만 귀찮으니까 servlet 으로 생성하자.

servlet name : MemberController

package : net.member.controller

 

import java.io.IOException;

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;

import net.member.service.SampleService;
import net.member.service.Service;
import net.member.service.ServiceForward;


@WebServlet("*.me")
public class MemberController extends HttpServlet {
 private static final long serialVersionUID = 1L;

    public MemberController() {
        super();
        // TODO Auto-generated constructor stub
    }


 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//get방식과 post방식 모두를 처리하기 위한 doProcess() 매소드 
  try {
   doProcess(request, response);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }


 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  //get방식과 post방식 모두를 처리하기 위한 doProcess() 매소드 
  try {
   doProcess(request, response);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

// get 과 post 방식 모두를 처리하기 위한 doProcess() 매소드

 private void doProcess(HttpServletRequest request,
   HttpServletResponse response) throws Exception {
 //주소창에 입력된 전체 URI(주소)를 가져온다

  String RequestRUI = request.getRequestURI();

 

 //주소창에 입력된 전체 URI(주소)에서 project name 까지만 가져온다.

//ex : http://localhost:8080/PROJECTNAME
  String contextPath = request.getContextPath();

 

//주소에서 poject name 이후의 부분만 따로 잘라낸다.
  String command = RequestRUI.substring(contextPath.length());

 

//redirect의 여부와 어떤 경로로 보낼것인가를 처리해줄 ServiceForward
  ServiceForward forward = null;
  Service service = null;
  

 

// test를 하기 위한 command 처리 구문.
  if(command.equals("/memberSample.me")){
   service = new SampleService();
   forward = service.execute(request, response);
   forward.setPath("./member/test.jsp");
  }

  

//view 파트로 요청에 대한 결과를 보내준다.
  if(forward != null){
   if(forward.isRedirect()){
    response.sendRedirect(forward.getPath());
   }else {
    RequestDispatcher dispatcher = request.getRequestDispatcher(forward.getPath());
    dispatcher.forward(request, response);
   }
  }
 }
 
}