티스토리 뷰

지난 글에서는 백엔드 파이프라인이 완성 되었다.

 

그럼 이제 진짜 글 써도 됨?

그러기에는 아직 치명적인 문제가 하나 발생한다. 클라이언트가 보내는 요청을 받아줄 진입점이 없다는것이다.

 

내가 만든 BoardWriteCommand는 일반적인 자바 클래스일뿐, 스스로 웹 URL 요청을 받거나 응답하는 능력이 없다

클라이언트와 통신하려면 반드시 서블릿이 필요하다

 

그럼 어떻게 해야함?

이 문제를 해결하기 위해 클라이언트의 요청을 하나의 서블릿이 다 받아서 조율하는 구조를 만들면 된다.

이 서블릿이 URL을 분석해서 알맞은 Command 객체에게 처리를 넘겨주는 방식인 것이다.

 

그럼 이 역할을 수행할 서블릿을 만들자

com.study.controller 패키지를 만들고 직관적으로 BoardController라고 이름 붙혔다

 

알아서 잘 만들어주니까 난감하다

 

 

그나저나 풀 패키지 경로를 사용하는건 위의 사진대로 눌러주면 깔끔하게 Import 된다

 

public class BoardController extends HttpServlet {
  
  //클라이언트의 GET / POST 요청을 doAction 메서드로 전달
  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    doAction(request, response);
  }

  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    doAction(request, response);
  }
  
  //요청 교통정리를 담당하는 액션 메서드
  private void doAction(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    
    //요청 파라미터의 한글 깨짐을 방지한다
    request.setCharacterEncoding("UTF-8");
    
    //요청 주소에서 명령어 추출
    String uri = request.getRequestURI();
    String contextPath = request.getContextPath();
    String commandPath = uri.substring(contextPath.length());

    BoardCommand command = null;

    try {
      //추출한 경로에 따라 알맞은 명령 실행
      if (commandPath.equals("/write.do")) {
        command = new BoardWriteCommand(); //게시글 등록
        command.execute(request, response); //실행
        response.sendRedirect("list.do"); //실행 후 목록 페이지로 이동
      }
      
      //예외처리
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

 

이제 모든 요청은 BoardController를 거쳐 가게 되었다.

그런데 아직 /write.do(글쓰기) 밖에 처리하지 못한다.

기능이 늘어남에 추가될것이다

 

이제 게시판의 길이 뚫렸으니 톰캣을 실행하고 주소창에 /write.do 를 쳐보자

혼란스럽다

 

사실 @WebServlet("*.do") 이 어노테이션이 붙어있지 않아서 발생한 일이었다.

주소와 클래스를 매핑해줘야만 일을 하는데 그게 없으니 404 not found가 뜨는것이었다

게다가 당연히 View가 없는데 글이 써질리가 만무하다

 

그러므로 주소창에 직접 쿼리 스트링을 입력해보자

http://localhost:8080/write.do?category=IT&title=test&writer=testWriter&password=1234&content=testContent

 

그러면 정상적으로 DB에 적재되는것을 확인할 수있다.

드디어 다음에는 다음 게시물에서는 글을 쓸 수가 있을까?

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/08   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함