스프링/스프링 MVC 패턴

서블릿을 이용한 회원가입 만들기

chanhee01 2023. 2. 10. 15:55

서블릿을 이용해서 회원가입을 해볼 것이다.

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 코드가 매우 길며 오타가 났을 때에도 어디서 났는지 확인할 방법이 적다는 오류가 있다.