모델 1은 클라이언트의 요청을 jsp 가 처리
각각의 jsp파일은 서블릿으로 구동됨

<body>
<h1>a file</h1>
<%
System.out.println("ip를 검사 합니다.");
System.out.println("문자를 인코딩 합니다.");
System.out.println("블랙리스트 사용자를 필터링 합니다.");
System.out.println("데이터베이스를 연결 합니다.");
%>
</body>
🔥 단점 - jsp 로 관리하면 공통적인 처리를 할 수 없다.
리팩토링 해보자 ( 메소드 이용 )

public class MyProcess {
public static void init() {
System.out.println("ip를 검사 합니다.");
System.out.println("문자를 인코딩 합니다.");
System.out.println("블랙리스트 사용자를 필터링 합니다.");
System.out.println("데이터베이스를 연결 합니다.");
}
}
<body>
<h1>a file</h1>
<%
MyProcess.init();
%>
</body>
처음보다 조금 낫지만 b,c,d 에도 MyProcess.init(); 작성해야하는 불편함이 존재
MyProcess.init(); 를 비즈니스 로직이라고 간주하면 로직을 관리하기 힘들다
( 모두 수정해야함 )
자연스럽게 기능을 분리시켜야 유지보수가 편하다는걸 알게 된다
앞단에서 공통적인 처리를 해주자

@WebServlet("*.do")
public class FrontController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
MyProcess.init(); // 여기에 공통적인 처리를 할 수 있다. ( FrontController 의 장점 )
// System.out.println(req.getRequestURI()); // *.do 요청 - 콘솔에 ' /*.do '
String path = req.getRequestURI();
if ( path.equals("/a.do") ) {
resp.sendRedirect("a.jsp"); // webapp 폴더를 root 폴더로 이용 - a.jsp
}else if( path.equals("/b.do") ) {
resp.sendRedirect("b.jsp");
}else if( path.equals("/c.do") ) {
resp.sendRedirect("c.jsp");
}else if( path.equals("/d.do") ) {
resp.sendRedirect("d.jsp");
}else {
resp.sendRedirect("home.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}
}
공통적인 처리는 해결되었다
http://localhost:8080/a.do 요청시
http://localhost:8080/a.jsp 로 리다이렉트
( request 객체는 2번 만들어짐 )

🔥 단점 ! !
http://localhost:8080/a.jsp 로 요청하면 공통처리 X
컨트롤러에서 뷰로 데이터 전달을 할수 없다.
뷰에 다이렉트 접근이 가능
설계의 중요성 ! - http://localhost:8080/a.jsp 같은 요청을 원천적으로 막아야 한다.
지금처럼
여러 jsp 를 하나의 서블릿( 프론트 컨트롤러 )이 연결시켜줄때
이 서블릿의 책임이 너무 많아진다 - 라우터, 공통처리, DB 연결 등
책임을 분리시켜야 할 필요가 있다
FrontController.java 의
else { resp.sendRedirect("home.jsp"); } 부분을 약간 수정
else {
// 이 코드만 있으면 요청객체가 새롭게 생성
req.setAttribute("name", "홍길동");
resp.sendRedirect("home.jsp");
}
<body>
<%
String name = (String)request.getAttribute("name");
%>
<h1>나의 이름은 : <%= name %></h1>
</body>

else {
req.setAttribute("name", "홍길동");
req.getRequestDispatcher("home.jsp").forward(req, resp);
}
