-
728x90
Servlet Pattern
https://hongs429-blog.tistory.com/42
웹 애플리케이션으로 Servlet / JSP / 고전 MVC 패턴 비교 - Servlet
간단한 회원 관리 웹 애플리케이션 구현( Servlet ) 예전의 Servlet 구조화 JSP, MVC 패턴의 비교를 해보자 그 중에서 이번에는 Servlet으로 회원관리 웹을 만들어 볼 것이다. 회원 정보 import lombok.Getter; im
hongs429-blog.tistory.com
JSP Pattern
https://hongs429-blog.tistory.com/43
웹 애플리케이션으로 Servlet / JSP / 고전 MVC 패턴 비교 - JSP
Servlet Pattern https://hongs429-blog.tistory.com/42 웹 애플리케이션으로 Servlet / JSP / 고전 MVC 패턴 비교 - Servlet 간단한 회원 관리 웹 애플리케이션 구현( Servlet ) 예전의 Servlet 구조화 JSP, MVC 패턴의 비교를
hongs429-blog.tistory.com
간단한 회원 관리 웹 애플리케이션 구현( MVC )
회원 정보와 기능은 이전의 Servlet과 동일하다 ( 위 Servlet 링크 참조 )
서론론
위에서 보았듯, Servlet은 비지니스로직을 구현하는 것에는 문제가 없으나, HTML 코드를 모두 자바코드로 직접짜야 한다는 단점이 있었다. 이를 좀 수월하게 하고자, JSP로 HTML을 보다 쉽게 만들 수 있도록 해주었으나, 이또한 JSP 코드 내에
핵심 서비스로직이 들어나고, JSP내에서 로직 + 뷰 역할을 담당하다보니 유지보수 측면에서 불편하다는 것이 발견 되었다.
때문에 Servlet을 비지니스 로직을 담당하도록 하고, JSP를 HTML을 담당하도록 한다면
Servlet에서의 단점과 JSP에서의 단점을 모두 보완할 수 있다는 것에서 출발하였다.
김연한 로드맵 - 스프링 MVC 1편의 내용 中 여기서 모델이라하는 것은,
기존의 Servlet에서 request에는 저장소의 기능이 있다고 했는데 이를 활용하여 데이터를 전달할 수 있게 해준다.
회원 가입 기능 구현 및 페이지
1-1. 회원 가입 폼 페이지
import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; // controller - servlet을 사용한다! // view - jsp를 사용한다! @WebServlet(name = "mvcMemberFormServlet", urlPatterns = "/servlet-mvc/members/new-form") public class MvcMemberFormServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String viewPath = "/WEB-INF/views/new-form.jsp"; // controller > view 이동시 사용되는 것 RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); } }
여기서 forward는 urlPattern이 들어왔을 때, 다시 client가 요청하지 않아도 내부적으로 다른 곳(우리는 .jsp로 보내주기 위함)으로 보내주어 response할 수 있게 해준다.
forward : 서버 내부적으로 경로를 호출하기 때문에 클라이언트가 인지하지 못한다.
그리고 1번의 request/response로 처리하기 때문에 request의 내용을 자유롭게 꺼내어 사용 가능하다
redirect : forward와는 다르게 client에게 다시 요청을 하게 한다. 때문에 클라이언트는 어디로 redirect가 되었는지 확인이 가능하다. 하지만 request 안의 내용은 response 되는 생명주기가 끝났기 때문에 이전의 request
내용을 알지 못한다. (이를 해결하는 방법이 존재하긴 함.)1-1. 회원 가입 폼 페이지
/WEB-INF/views/new-form.jsp
client는 해당 JSP로 만들어진 해당 페이지를 response 받아 화면에 보여지게 된다.
2. 회원 가입(저장)
import hello.servlet.domain.member.Member; import hello.servlet.domain.member.MemberRepository; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save") public class MvcMemberSaveServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); Member member = new Member(username, age); memberRepository.save(member); // model에 데이터를 보관해야한다. request.setAttribute("member", member); String viewPath = "/WEB-INF/views/save-result.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); } }
1-2. 회원 저장 완료 폼 페이지
우리는 model에 담아온 member( requset.setAttribute(~~) )를 여기서 꺼내어 사용할 수 있게 된다. 이때, JSP의 변수를 보여주는 문법을 통해 손쉽게 처리할 수 있다.
회원 조회도 1, 2 번의 단계와 유사하게 흘러간다.
요약
서비스 로직과 화면에 보여지는 HTML을 나누어 놓아 이전의 JSP, Servlet 의 단점들이 개선이 된 것을 확인할 수 있었다.
하지만, 하지만 코드를 자세히보면 계속해서 반복적으로 나오는 코드가 존재한다. 이는 나중에 수없이 많은 Controller 파일과 jsp파일이 존재한다면 이들을 모두 수정해주어야 한다는 단점이 여전히 존재한다.
다음에 등장하는 것이 프론트 컨트롤러인데, 프론트 컨트롤러를 통해서 앞에서 반복적으로 했던 작업들을 모두 공통으로 처리해주는 작업을 수행하도록 해줄 것이다.
이렇게 고전의 Servlet , JSP , MVC 패턴을 보두 비교해보면서 어떠한 이유로, 어떠한 방식으로 발전을 거듭해왔는지 확인할 수 있었다.
'Spring > MVC1-Servlet vs JSP vs MVC패턴' 카테고리의 다른 글
(3) MVC 프레임워크 만들기 - Controller 구현체들의 공통로직 처리-2 (0) 2023.06.13 (2) MVC 프레임워크 만들기 - Controller 구현체들의 공통로직 처리 (0) 2023.06.13 (1) MVC 프레임워크 만들기 - FrontController의 도입 (0) 2023.06.13 웹 애플리케이션으로 Servlet / JSP / 고전 MVC 패턴 비교 - JSP (0) 2023.06.08 웹 애플리케이션으로 Servlet / JSP / 고전 MVC 패턴 비교 - Servlet (0) 2023.06.08