Servlet을 이용한 간단한 회원 저장/조회 구현

2021. 12. 27. 17:53·스프링/스프링 MVC

Servlet만을 사용해서 회원 관리 구현

  • 요청과 응답을 서블릿을 이용해서 처리할 수 있다. 이를 이용해서 구현해본다.
  • 서블릿으로 요청 메시지, 응답 메시지, 조회 결과 등을 구현한다.
  • 모든 요청/응답 HTTP 메시지의 Header 정보 및 Body 값을 자바 코드로 세팅해줘야 한다.

 

회원 저장 요청 FORM 서블릿

저장한 회원의 정보를 받는 HTML FORM을 만들어야 한다. 이를 위한 서블릿을 생성한다.

  • HTML로 POST 형식의 Form을 만들 것이므로 ContentType은 text/html 로 하고 인코딩은 utf-8로 한다.
  • Form은 HTML 코드를 문자열로 생성한다.
@WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form")
public class MemberFormServlet extends HttpServlet {

    private final MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");

        PrintWriter w = response.getWriter();
        w.write("<!DOCTYPE html>\n" +
                "<html>\n" +
                "<head>\n" +
                "    <meta charset=\"UTF-8\">\n" +
                "    <title>Title</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "<form action=\"/servlet/members/save\" method=\"post\">\n" +
                "    username: <input type=\"text\" name=\"username\" />\n" +
                "    age:      <input type=\"text\" name=\"age\" />\n" +
                " <button type=\"submit\">전송</button>\n" + "</form>\n" +
                "</body>\n" +
                "</html>\n");
    }
}

HTML 코드가 정상적으로 렌더링 되어서 화면에 나타난 것을 볼 수 있다.

전송을 누르면 form은 HTTP POST 프로토콜로 전송된다. 목적지는 "/servelt/members/save"이고, 작성한 값이 key-value쌍으로 전달된다.

요청 Form 작성

회원 저장 서블릿

  • 저장 요청 Form을 보냈으니 이를 받고 처리할 서블릿을 만든다.
  • 보낸 데이터를 가지고 저장한 회원 객체를 완성하고 이를 레포지토리에 저장한다.
  • 저장 결과에 따라 적절한 응답 메시지를 보낸다.
  • 응답 메시지에 저장한 객체의 정보를 보낸다.
@WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save")
public class MemberSaveServlet extends HttpServlet {

    private final 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);

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");

        PrintWriter w = response.getWriter();
        w.write("<html>\n" +
                "<head>\n" +
                " <meta charset=\"UTF-8\">\n" + "</head>\n" +
                "<body>\n" +
                "성공\n" +
                "<ul>\n" +
                "    <li>id=" + member.getId() + "</li>\n" +
                "    <li>username=" + member.getUsername() + "</li>\n" +
                " <li>age=" + member.getAge() + "</li>\n" + "</ul>\n" +
                "<a href=\"/index.html\">메인</a>\n" + "</body>\n" +
                "</html>");
    }
}

 

요청이 정상적으로 왔고, 해당 요청에서 값을 취해서 멤버 객체를 만들고 이를 저장공간에 저장 한 후 응답을 보낸 것을 확인할 수 있다.

 

전체 회원 조회 서블릿

  • 회원 저장 요청을 보내고, 저장을 했으면 이제 조회를 하는 로직을 구현해보자.
  • 응답을 위한 HTTP 메시지를 생성한다. 이때 HTML 코드를 문자열로 짜주면 된다. Content-Type을 text/html로 하면 브라우저가 알아서 HTML 코드로 인식하고 렌더링해서 보여주게 된다.
@WebServlet(name = "memberListServlet", urlPatterns = "/servlet/members/list")
public class MemberListServlet extends HttpServlet {

    private final MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Member> all = memberRepository.findAll();

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");

        PrintWriter w = response.getWriter();
        w.write("<html>");
        w.write("<head>");
        w.write("    <meta charset=\"UTF-8\">");
        w.write("    <title>Title</title>");
        w.write("</head>");
        w.write("<body>");
        w.write("<a href=\"/index.html\">메인</a>");
        w.write("<table>");
        w.write("    <thead>");
        w.write("    <th>id</th>");
        w.write("    <th>username</th>");
        w.write("    <th>age</th>");
        w.write("    </thead>");
        w.write("    <tbody>");
        for (Member member : all) {
            w.write("    <tr>");
            w.write("       <td > " + member.getId() + " </td> ");
            w.write("       <td > " + member.getUsername() + " </td> ");
            w.write("       <td > " + member.getAge() + " </td> ");
            w.write("    </tr>");
        }
        w.write("    </tbody>");
        w.write("</table>");
        w.write("</body>");
        w.write("</html>");
    }
}

모든 회원 목록을 조회하고 이를 HTML 코드로 추가해준다.

이렇게 목록이 조회되고 응답 받은 HTML 코드가 렌더링 되어 화면에 나오는 것을 볼 수 있다.

 

정리

서블릿을 이용하면 응답/요청에 대해 처리를 할 수 있다는 것을 알 수 있었지만 HTML 코드 등을 작성함에 있어 오타, 자동완성 미지원 등 불편한 사항이 매우 많다는것을 알 수 있었다. 또한 화면을 보여주기 위한 코드가 로직을 담당하는 서블릿에 함께 존재하므로 잦은 변경이 불가피하다. 

이를 고치기 위해 HTML 코드 작성이 가능하고 HTML 코드에 Java 코드를 작성할 수 있는 JSP, thymeleaf 등 의 기술이 나오게 됐다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'스프링 > 스프링 MVC' 카테고리의 다른 글

MVC 패턴을 적용하여 간단한 회원 저장/조회 구현  (0) 2021.12.29
Servlet + JSP를 이용한 간단한 회원 저장/조회 구현  (1) 2021.12.27
Java Servlet 정리본 _ HttpServletResponse  (0) 2021.12.24
Java Servlet 정리본 _ HttpServletRequest  (0) 2021.12.24
'스프링/스프링 MVC' 카테고리의 다른 글
  • MVC 패턴을 적용하여 간단한 회원 저장/조회 구현
  • Servlet + JSP를 이용한 간단한 회원 저장/조회 구현
  • Java Servlet 정리본 _ HttpServletResponse
  • Java Servlet 정리본 _ HttpServletRequest
구름뭉치
구름뭉치
구름의 개발일기장
  • 구름뭉치
    구름 개발일기장
    구름뭉치
  • 전체
    오늘
    어제
    • ALL (283)
      • 프로젝트 (23)
        • 토스페이먼츠 PG 연동 시리즈 (12)
        • JWT 방식 인증&인가 시리즈 (6)
        • 스우미 웹 애플리케이션 프로젝트 (1)
        • 스프링부트 기본 보일러 플레이트 구축 시리즈 (2)
        • 마이크로서비스 아키텍쳐 시리즈 (1)
      • 스프링 (43)
        • 스프링부트 API 설계 정리 (8)
        • 스프링부트 RestAPI 프로젝트 (18)
        • 스프링부트 WebSocket 적용기 (3)
        • 스프링 JPA 정리 시리즈 (5)
        • 스프링 MVC (5)
        • 스프링 배치 (2)
        • 토비의 스프링 정리 (2)
      • 기술 학습 (28)
        • 아파치 카프카 (9)
        • 클린 코드 (4)
        • 디자인 패턴의 아름다움 (2)
        • 모던 자바 인 액션 (7)
        • JVM 스레드 딥다이브 (6)
      • Web (25)
        • 정리글 (20)
        • GraphQL 정리글 (2)
        • Jenkins 정리글 (3)
      • 취업 (6)
      • CS (77)
        • 네트워크 전공 수업 정리 (11)
        • OSI 7계층 정리 (12)
        • 운영체제 정리 (19)
        • 데이터베이스 정리 (5)
        • MySql 정리 (17)
        • GoF의 Design Pattern 정리 (12)
      • 알고리즘 (70)
        • 백준 (56)
        • 프로그래머스 (12)
        • 알고리즘 정리본 (1)
      • 기초 지식 정리 (2)
      • 일상 (8)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    마우스 패드
    키보드 손목 받침대
    부다페스트
    mx master s3 for mac
    레이저
    마우스
    크로아티아
    류블라냐
    동유럽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
구름뭉치
Servlet을 이용한 간단한 회원 저장/조회 구현
상단으로

티스토리툴바