티스토리 뷰
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을 보냈으니 이를 받고 처리할 서블릿을 만든다.
- 보낸 데이터를 가지고 저장한 회원 객체를 완성하고 이를 레포지토리에 저장한다.
- 저장 결과에 따라 적절한 응답 메시지를 보낸다.
- 응답 메시지에 저장한 객체의 정보를 보낸다.
@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를 이용한 간단한 회원 저장/조회 구현 (0) | 2021.12.27 |
Java Servlet 정리본 _ HttpServletResponse (0) | 2021.12.24 |
Java Servlet 정리본 _ HttpServletRequest (0) | 2021.12.24 |
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday