서블릿을 이용한 회원가입 만들기
서블릿을 이용해서 회원가입을 해볼 것이다.
new-form
@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 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");
}
}
member라는 변수를 사용해서 회원가입을 하면 저장이 되는 코드이다.
localhost:8080/servlet/members/new-form을 입력하면 이름과 나이를 입력할 수 있는 창이 생기고 입력을 하면 아직은 아무 일도 일어나지 않는다.
저장을 했을 때 저장이 되었는지 확인해주는 클래스를 아래에 만들면 된다.
save
@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"));
// getParamater는 string밖에 인식 못하기 때문에 Integer.parseInt를 써야지 int로 넣을 수 있다.
Member member = new Member(username, age);
memberRepository.save(member);
response.setContentType("text/html"); // 저장되면 결과를 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>");
}
}
new-form에서 회원 정보를 입력하면 입력이 되었다는 것을 확인시켜주는 페이지로 이동하는 코드이다.

new-form 페이지에서 이름과 나이를 입력하고 전송을 누르면
localhost:8080/servlet/members/save 페이지로 이동하고 id와 username, age를 출력하면서 성공이 되었다는 것을 확인 시켜주는 페이지이다.
List
@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"); // 저장되면 결과를 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 : members) { // for문으로 member들을 동적으로 돌리기
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>");
}
}
회원 목록을 보여주는 코드이다.
위에서 회원가입을 하고 localhost:8080/servlet/members로 들어가면 지금까지 회원가입을 한 사람들이 보이는 페이지이다.
물론 메모리에 저장되어있기때문에 지금 intellij에서 실행하고 있는 프로그램을 종료시키거나 intellij를 종료하면 데이터가 다 날아갈것이다.

member list를 보여주는 페이지는 위와 같다.
kim과 spring이라는 사람이 회원가입을 했을 때 위와 같이 id, username, age가 출력된다.
서블릿을 이용하면 동적으로 코드를 짤 수 있다는 장점이 있다.
하지만 서블릿에는 가장 큰 단점이 있다.
html 코드가 매우 길며 오타가 났을 때에도 어디서 났는지 확인할 방법이 적다는 오류가 있다.