[스프링 MVC 1편] 3 - (2) 서블릿 회원 관리 웹 애플리케이션
* 스프링 입문은 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() 메서드를 통해서만 조회
- static 영역에 객체 instance를 하나만 미리 생성
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 ]
- 파라미터를 조회해서 Member 객체 생성
- Member 객체를 MemberRepository를 통해서 저장
- 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() 메서드를 통해서만 조회
- static 영역에 객체 instance를 하나만 미리 생성
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 ]
- memberRepository.findAll() 을 통해 모든 회원을 조회
- 회원 목록 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() 메서드를 통해서만 조회
- static 영역에 객체 instance를 하나만 미리 생성
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 등)
[출처] 김영한 강사님 인프런 스프링 mvc1
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의
웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원
www.inflearn.com