Spring/실습 정리

Spring 14강 - DispatchServlet과 요청 흐름 통합 이해하기

코딩하는냥이 2025. 6. 23. 17:18
반응형

이번 강의에서는 web.xml의 서블릿 매핑을 통해 .do 요청을 DispatchServlet으로 위임하는 방법과, 각 요청별 흐름을 Java 서블릿에서 직접 제어하는 구조를 배웠습니다. 게시판 프로그램의 전체 흐름을 하나의 컨트롤러 클래스(DispatchServlet)가 관리하게 되어 MVC 패턴의 기반이 마련되었습니다.


📌 web.xml 설정

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>com.springbook.controller.DispatchServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

📌 JSP 화면들

🔹 login.jsp

<form action="login.do" method="post">
  <input type="text" name="id" value="12345">
  <input type="password" name="pw" value="12345">
  <input type="submit" value="로그인">
</form>

🔹 insertboard.jsp

<form action="insertboard.do" method="post">
  <input type="text" name="title">
  <input type="text" name="writer">
  <textarea name="content"></textarea>
</form>

🔹 getboard.jsp

<form action="updateboard.do" method="post">
  <input type="hidden" name="seq" value="...">
  <input type="text" name="title" value="...">
  <textarea name="content">...</textarea>
</form>
<a href="deleteboard.do?seq=...">글 삭제</a>

🔹 getboardlist.jsp

<% List<BoardVO> boardList = (List) session.getAttribute("boardList"); %>
<% for(BoardVO board : boardList){ %>
  <a href="getboard.do?seq=<%=board.getSeq()%>"><%=board.getTitle()%></a>
<% } %>

📌 DispatchServlet.java

전체 요청 흐름을 담당하는 프론트 컨트롤러 역할을 수행하는 클래스입니다.

🔸 URI 매핑

String uri = request.getRequestURI();
String path = uri.substring(uri.lastIndexOf("/"));

🔸 요청 분기 처리

if (path.equals("/login.do")) login_proc(...);
else if (path.equals("/insertboard.do")) insertBoard_proc(...);
...

🔸 주요 메소드들

private void login_proc(HttpServletRequest request, HttpServletResponse response) {
  // 로그인 처리 후 redirect
}

private void insertBoard_proc(...) { ... }
private void updateBoard_proc(...) { ... }
private void deleteBoard_proc(...) { ... }
private void getBoardList_proc(...) { ... }
private void getBoard_proc(...) { ... }

💡 포인트 정리

  • .do 요청은 모두 DispatchServlet으로 위임되어 일괄 처리됨
  • URI의 끝 경로를 기준으로 요청을 구분
  • JSP는 데이터를 session에서 꺼내 화면에 표시함
  • Java 서블릿이 DAO와 VO를 통해 비즈니스 로직을 처리하고, 화면 전환은 redirect로 처리함

📌 정리하자면, 이번 강의에서는 단일 서블릿(DispatchServlet)을 통해 게시판의 모든 요청을 관리하도록 구조를 통합하였고, 각 요청 흐름은 web.xml의 매핑 설정과 DispatchServlet 내부의 조건문을 통해 분기됩니다. 비즈니스 로직은 DAO를 통해 수행되며, JSP 화면은 단순한 뷰 역할만 수행하여 MVC 패턴의 흐름이 점점 명확해졌습니다.