model2 방식에서 FrontController는 요청을 받아서
DB연결이 필요없으면 → 바로 View로 포워딩하고
DB연결이 필요하면 → Action클래스(Controller)를 호출하여 DAO가 호출되고 DB로직을 처리한다.
1. 서블릿 파일 만들기
서블릿은 자바 + HTTP객체다. 따라서 HttpServlet을 상속받아야한다.
public class FrontController extends HttpServlet { }
HttpServlet에서 doGet, doPost를 오버라이딩 한다. (ctrl + alt + s + v)
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
}
doGet, doPost로 들어오던 같은 결과를 처리하기 위해 doProcess()를 생성하고 호출한다.
protected void doProcess(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
doProcess(req, res);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
doProcess(req, res);
}
2. 가상주소 계산
FrontController 이므로 요청받은 주소가 어디로 가야하는지 판단해야한다.
requst.getRequestURI() : JSP 내장객체 Request의 getRequestURI()는 호스트, 포트주로를 뺀
프로젝트 최상단부터 시작하는 주소를 가져온다.
=> /Project/...../testPage.jsp
request.getContextPath() : 프로젝트 경로를 가져온다. => /Project
substring() : 괄호안에 들어간 숫자만큼 문자열을 자른다. => ..../testPaage.jsp
// doProcess()
String reqURI = req.getRequestURI();
// 프로젝트 주소
String ctxPath = req.getContextPath();
// 매핑된주소 - 프로젝트주소 = 가상주소
String command = reqURI.substring(ctxPath.length());
3. 가상주소 매핑
2번에서 얻은 가상주소로 그 가상주소와 실제주소를 매핑한다.
equals(): 괄호안의 문자열과 같은지 판별한다.
forward : 이동 정보를 저장하는 객체. (ActionForward.java)
forward.setPath() : 실제로 이동할 주소값을 세팅한다.
forward.setRedirect() : 이동방식을 설정한다.
true → redirect true이므로, 주소와 화면이 둘다 바뀐다.
false → redirect false이므로, 주소는 그래도 화면만 바뀐다.
action : 여러 종류의 DB로직을 수행하기 위해 공통 execute 메소드를 정의한 인터페이스. (Action.java)
if(command.equals("/Register.me")) {
// DB연결 없이 바로 view 호출
forward = new ActionForward();
forward.setPath("./user/register.jsp");
forward.setRedirect(false);
} else if(command.equals("/UserRegisterAction.me")) {
// DB연결 필요 => DB연결하는 객체 생성
action = new UserRegisterAction();
try {
forward = action.execute(req, res); // => 다형성
} catch(Exception e) {
e.printStackTrace();
}
} else if(command.equals("가상주소")) {
//가상주소에 맞는 필요한 동작들
}
4. 페이지 이동
3번의 가상주소 매핑으로 실제 주소를 알아냈으면 해당 주소로 이동한다.
이때 이동방식을 Redirect방식 또는 forward방식으로 이동할지에 따라 다르게 이동한다.
if(forward != null) { // 페이지 이동 정보가 있다면
if(forward.isRedirect()) {
res.sendRedirect(forward.getPath());
} else {
RequestDispatcher dis = req.getRequestDispatcher(forward.getPath());
dis.forward(req, res);
}
}
'Back-end > JSP' 카테고리의 다른 글
JSP) DB 커넥션 풀(Connection Pool) (0) | 2022.03.14 |
---|---|
JSP) JDBC 설치하여 JSP와 DB연결 및 SQL문 실행하기 (0) | 2022.03.03 |
JSP) 쿠기(Cookie)의미와 사용하기 (0) | 2022.03.01 |
JSP) Session 생성, 삭제, 초기화 예제 (0) | 2022.03.01 |
JSP) 영역(Scope) 객체와 속성(Attribute), 페이지 이동 방법 4가지 (0) | 2022.03.01 |