-
서블릿을 이용한 회원가입 만들기스프링/스프링 MVC 패턴 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 코드가 매우 길며 오타가 났을 때에도 어디서 났는지 확인할 방법이 적다는 오류가 있다.
'스프링 > 스프링 MVC 패턴' 카테고리의 다른 글
MVC 패턴 (0) 2023.02.10 JSP를 이용한 회원가입 (0) 2023.02.10 서블릿 HTTP 응답 데이터 (0) 2023.02.10 서블릿 HTTP 요청 데이터 (0) 2023.02.10 HTML, HTTP API, CSR, SSR (0) 2023.02.07