본문 바로가기
Spring/스프링 MVC

[스프링 MVC 1편] 3 - (2) 서블릿 회원 관리 웹 애플리케이션

by Poorm 푸름 2023. 11. 7.

* 스프링 입문은 Window로 스프링 MVC 1편은 Mac으로 진행합니다  
 *  진도 : 섹션3 - (2)
 *          : 자바 클래스명,         : 코드,         : 단축키

 

 

1. 서블릿 회원  등록 (Form)_ [스프링 입문] 3 - (1), (3) 편 참고
[ src - java - hello - servlet - web - servlet - MemberFormServlet ]

 

- 상속 extends HttpServlet 

  • 서블릿을 사용하기 위해 HttpServlet을 상속받는다

- 서블릿 생성 @WebServlet

  • 해당 어노테이션에 경로를 입력하면 클라이언트에서 톰캣서버가 찾아서 실행한다
  • /servlet/members/new-form 입력하면 하위 메서드 실행
  @WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-
  form")
  public class MemberFormServlet extends HttpServlet {

 

- 리포지토리 가져오기  private MemberRepository.getInstance 

  • 싱글톤 패턴이란
    • 클래스의 인스턴스가 1개만 생성되도록 하는 디자인 패턴
    • 효율적인 메모리 사용 가능
    • 객체 인스턴스를 2개 이상 생성 금지
      • static 영역에 객체 instance를 하나만 미리 생성
        MemberRepository 에서 생성해놨었다 ([스프링 MVC 1편] 3-(1) 참고)
      • private 생성자를 사용  외부에서 임의로 new 사용 X
      • getInstance() 메서드를 통해서만 조회
 private MemberRepository memberRepository = MemberRepository.getInstance();

 

- 서비스 생성 protected service 

  • servlet 호출되면 서비스 메서드도 호출
  • 위에서 만든 urlPatterns 대로 검색하면 콘솔 로그에 해당 명령어 출력
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

 

- 출력

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

        PrintWriter w = response.getWriter();
        w.write(//강의 html 코드//);
    }
  • w.write() 안에 강의에서 제공되는 html 코드를 넣어주세요
  • 이전 편에서 테스트 코드를 실행 해놓은 상태라 [hello-servlet-ServletApplication] 가서 다시 run
  • 실행 : http://localhost:8080/servlet/members/new-form 실행 후 데이터 입력
    결과 : 개발자 모드(F12)에서 Form Data 확인

 

 

2. 서블릿 회원  저장
[ src - java - hello - servlet - web - servlet - MemberSaveServlet ]

 

  1. 파라미터를 조회해서 Member 객체 생성
  2. Member 객체를 MemberRepository를 통해서 저장
  3. Member 객체를 사용해서 결과 화면용 HTML을 동적으로 만들어서 응답

 

- 상속 extends HttpServlet 

  • 서블릿을 사용하기 위해 HttpServlet을 상속받는다

- 서블릿 생성 @WebServlet

  • 해당 어노테이션에 경로를 입력하면 클라이언트에서 톰캣서버가 찾아서 실행한다
  • /servlet/members/new-form 입력하면 하위 메서드 실행
  @WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save")
  public class MemberSaveServlet extends HttpServlet {

 

- 리포지토리 가져오기  private MemberRepository.getInstance 

  • 싱글톤 패턴이므로
    • static 영역에 객체 instance를 하나만 미리 생성
       MemberRepository 에서 생성해놨었다 ([스프링 MVC 1편] 3-(1) 참고)
    • private 생성자를 사용  외부에서 임의로 new 사용 X
    • getInstance() 메서드를 통해서만 조회
 private MemberRepository memberRepository = MemberRepository.getInstance();

 

- 서비스 생성 protected service 

  • servlet 호출되면 서비스 메서드도 호출
  • 위에서 만든 urlPatterns 대로 검색하면 콘솔 로그에 해당 명령어 출력
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

 

- form data 값 읽어오기

  • request.getParameter()는 문자로만 읽어올 수 있다
    • age는 숫자 타입으로 변환하기
      String username = request.getParameter("username");
      int age = Integer.parseInt(request.getParameter("age"));

 

- Member 객체 생성

        Member member = new Member(username, age);
        memberRepository.save(member);

 

- 출력

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        PrintWriter w = response.getWriter();
        w.write(//강의 코드 넣기//);
        }
  • w.write() 안에 강의 html 코드 넣기
  • 위와 같은 방식이 동적
    index.html 같은 경우는 중간에 자바코드 넣을 수 없고 파일 자체만 존재하므로 정적이다
  • 실행 : http://localhost:8080/servlet/members/new-form 실행 후 데이터 입력
  • 결과 

 

3. 서블릿 회원  저장 목록 조회
[ src - java - hello - servlet - web - servlet - MemberListServlet ]

  1. memberRepository.findAll() 을 통해 모든 회원을 조회
  2. 회원 목록 HTML을 for 루프를 통해서 회원 수 만큼 동적으로 생성하고 응답

 

- 상속 extends HttpServlet 

  • 서블릿을 사용하기 위해 HttpServlet을 상속받는다

- 서블릿 생성 @WebServlet

  • 해당 어노테이션에 경로를 입력하면 클라이언트에서 톰캣서버가 찾아서 실행한다
  • /servlet/members/new-form 입력하면 하위 메서드 실행
@WebServlet(name = "memberListServlet", urlPatterns = "/servlet/members")
public class MemberListServlet extends HttpServlet {

 

- 리포지토리 가져오기  private MemberRepository.getInstance 

  • 싱글톤 패턴이므로
    • static 영역에 객체 instance를 하나만 미리 생성
       MemberRepository 에서 생성해놨었다 ([스프링 MVC 1편] 3-(1) 참고)
    • private 생성자를 사용  외부에서 임의로 new 사용 X
    • getInstance() 메서드를 통해서만 조회
 private MemberRepository memberRepository = MemberRepository.getInstance();

 

- 서비스 생성 protected service 

  • servlet 호출되면 서비스 메서드도 호출
  • 위에서 만든 urlPatterns 대로 검색하면 콘솔 로그에 해당 명령어 출력
protected void service(HttpServletRequest request, HttpServletResponse response)

 

- 데이터 조회 (option + command + v)

List<Member> result = memberRepository.findAll();

 

- 출력

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

        PrintWriter w = response.getWriter();
        
        w.write(//강의 코드 넣기//);

        for (Member member : members) {
            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(//강의 코드 넣기//);
  • w.write() 안에 강의 html 코드 넣기
  • 실행 : http://localhost:8080/servlet/members
  • 결과

 

<참고>

HTML 문서에 동적으로 변경해야 하는 부분만 자바 코드를 넣을 수 있다면 더 편리할 것

이것이 바로 템플릿 엔진이 나온 이유이다

템플릿 엔진을 사용하면 HTML 문서에서 필요한 곳만 코드를 적용해서 동적으로 변경 가능

(템플릿 엔진 : JSP, Thymeleaf, Freemarker, Velocity )