착한 친구 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);
}
}
}
}
'WebStudy > MVC2기반 Shopping mall' 카테고리의 다른 글
Step 7 - 지금까지 한것 테스트해보기 (0) | 2015.07.28 |
---|---|
Step 5 - memberDAO 만들기 (0) | 2015.07.28 |
Step 4 - innterface DAOinter 만들기 (0) | 2015.07.28 |
Step 3 - 회원 정보를 담을 MemberDTO 만들기 (0) | 2015.07.27 |
Step 2 - MEMBER TABLE 구성 (0) | 2015.07.27 |