웹 개발 모델
[ 모델2 ]
- 요청 처리 / 응답 처리 / 비지니스 로직 처리 - 모듈화
[ MVC ]
- Model(VO), View(JSP), Controller(Servlet)
✅ MVC 패턴의 기본 메커니즘
✅ 서블릿-출력X / JSP-로직처리X, 출력만
RequestDispatcher dis = request.getRequestDispatcher(target(jsp경로));
dis.forward(request, response); ⇨ 서블릿에서 사용하던 request, response를 그대로 jsp에 전달
//RequestServlet
@WebServlet("/request")
public class RequestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//속성 설정
request.setAttribute("username", "홍길동");
request.setAttribute("useraddress", "서울");
//forward
RequestDispatcher dis = request.getRequestDispatcher("/response.jsp");
dis.forward(request, response);
}
}
<!--response.jsp-->
<body>
username: <%= request.getAttribute("username") %> <br>
useraddress: <%= request.getAttribute("useraddress") %><br>
</body>
✅ 응답 코드: 300번대
response.sendRedirect(target(이동할페이지));
//RequestRedirectServlet
@WebServlet("/request_redirect")
public class RequestRedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//속성 설정 -> 리다이렉트하면 아무 의미 없어지는 정보~
request.setAttribute("username", "홍길동");
request.setAttribute("useraddress", "서울");
//리다이렉트
response.sendRedirect("response_redirect");
}
}
//ResponseRedirectServlet
@WebServlet("/response_redirect")
public class ResponseRedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//RequestRedirectServlet의 request와 다른 request....!~!~!~!
String username = (String) request.getAttribute("username"); //null
String useraddress = (String) request.getAttribute("useraddress"); //null
//속성 설정
request.setAttribute("username", username);
request.setAttribute("useraddress", useraddress);
//forward
RequestDispatcher dis = request.getRequestDispatcher("/redirect_response.jsp");
dis.forward(request, response);
<!--redirect_response.jsp-->
<body>
username: <%=request.getAttribute("username")%> <br>
useraddress: <%=request.getAttribute("useraddress")%> <br>
</body>
http://localhost:8080/request_redirect
⇨
//RequestRedirectServlet
request.setAttribute("username", username);
request.setAttribute("useraddress", useraddress);
- 이 정보를 최종 jsp에서 출력하려면?
⇨ Session에 저장
//RequestRedirectServlet
@WebServlet("/request_redirect")
public class RequestRedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//★속성을 최종 jsp에서 출력하려면 session에 저장
HttpSession session = request.getSession();
session.setAttribute("username", "홍길동");
session.setAttribute("useraddress", "서울");
//리다이렉트
response.sendRedirect("response_redirect");
}
}
//ResponseRedirectServlet
@WebServlet("/response_redirect")
public class ResponseRedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//forward
RequestDispatcher dis = request.getRequestDispatcher("/redirect_response.jsp");
dis.forward(request, response);
}
}
<body>
<%--★세션에서 가져온 정보--%>
username_ss: <%=session.getAttribute("username")%> <br>
useraddress_ss: <%=session.getAttribute("useraddress")%> <br>
</body>
- GET 요청: Forward
- POST 요청: Redirect (∵새로고침)