회원 등록 폼 - MemberFormServlet
@WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form")
public class MemberFormServlet extends HttpServlet {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
writer.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을 응답한다.
- 등록 폼의 전송 버튼을 누르면 회원정보가 POST 방식으로 전송된다.
회원 등록 - MemberSaveServlet
@WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save")
public class MemberSaveServlet extends HttpServlet {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MemberSaveServlet.service");
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 writer = response.getWriter();
writer.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>");
}
}
- 회원 등록 폼에서 전송한 회원 정보를 받아서 처리한다.
- 브라우저에서 전송되는 모든 값들은 문자열이므로 'age'의 값을 정수형으로 파싱 해줘야 한다.
memberRepository.save() 호출 후, 반환되는 member를 이용해서 member.getXXX()와 같이 동적으로 결과를 응답한다.
- Java 코드 내에 HTML 태그를 삽입하므로 동적으로 HTML 태그를 구성할 수 있다.
회원 목록 - MemberListServlet
@WebServlet(name = "memberListServlet", urlPatterns = "/servlet/members")
public class MemberListServlet extends HttpServlet {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Member> members = memberRepository.findAll();
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
writer.write("<html>");
writer.write("<head>");
writer.write(" <meta charset=\"UTF-8\">");
writer.write(" <title>Title</title>");
writer.write("</head>");
writer.write("<body>");
writer.write("<a href=\"/index.html\">메인</a>");
writer.write("<table>");
writer.write(" <thead>");
writer.write(" <th>id</th>");
writer.write(" <th>username</th>");
writer.write(" <th>age</th>");
writer.write(" </thead>");
writer.write(" <tbody>");
for (Member member : members) {
writer.write(" <tr>");
writer.write(" <td>" + member.getId() + "</td>");
writer.write(" <td>" + member.getUsername() + "</td>");
writer.write(" <td>" + member.getAge() + "</td>");
writer.write(" </tr>");
}
writer.write(" </tbody>");
writer.write("</table>");
writer.write("</body>");
writer.write("</html>");
}
}
memberRepository.findAll()을 통해 반환되는 List<Member>를 이용해서 반복문으로 동적 컨텐츠를 응답한다.
- Java 코드 내에 HTML 태그를 삽입하므로 동적으로 HTML 태그를 구성할 수 있다.