회원 등록 폼 - new-form.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/jsp/members/save.jsp" method="post">
    username: <input type="text" name="username" />
    age: <input type="text" name="age" />
    <button type="submit">전송</button>
</form>
</body>
</html>
  • <%@ page contentType="text/html;charset=UTF-8" language="java" %>는 JSP 파일이라는 의미이다.
  • POST 전송을 위한 폼 화면만 보여주기 때문에 일반적인 HTML 파일과 비슷하다.

 

회원 등록 - save.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="study.servlet.domain.member.Member" %>
<%@ page import="study.servlet.domain.member.MemberRepository" %>
<%
    MemberRepository memberRepository = MemberRepository.getInstance();

    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);
%>
<html>
<head>
    <title>Save</title>
</head>
<body>
성공
    <ul>
        <li>id=<%=member.getId()%></li>
        <li>username=<%=member.getUsername()%></li>
        <li>age=<%=member.getAge()%></li>
    </ul>
    <a href="/index.html">메인</a>
</body>
</html>
  • <% %> 태그 내 작성된 Java 코드는 실행된다.
  • <%= %> 태그 내에 작성된 Java 코드는 출력된다.
  • <%@ page import="~~" %> 는 Java의 Import문과 같다.
  • JSP파일도 결국 서버 내부에서는 서블릿으로 변환되기 때문에 request, response 객체는 import 없이 사용할 수 있다.

 

회원 목록 - Members.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="study.servlet.domain.member.Member" %>
<%@ page import="study.servlet.domain.member.MemberRepository" %>
<%@ page import="java.util.List" %>
<%
    MemberRepository memberRepository = MemberRepository.getInstance();
    List<Member> members = memberRepository.findAll();
%>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="/index.html">메인</a>
    <table>
        <thead>
            <th>id</th>
            <th>username</th>
            <th>age</th>
        </thead>
        <tbody>
<%
        for (Member member : members) {
            out.write(" <tr>");
            out.write(" <td>" + member.getId() + "</td>");
            out.write(" <td>" + member.getUsername() + "</td>");
            out.write(" <td>" + member.getAge() + "</td>");
            out.write(" </tr>");
        }
%>
        </tbody>
</body>
</html>

 

서블릿과 JSP의 한계

순수 서블릿으로 개발할 때는 Java 코드를 이용해 HTML 태그를 작성해야 했기 때문에 불편했다. 그래서 JSP를 활용하여 HTML 태그 중 동적으로 변경이 필요한 부분에만 Java 코드를 사용했다. 그러나 이 방법 또한 아쉬움이 남는다. save.jsp(회원등록)의 경우 코드의 절반은 회원을 저장하기 위한 비즈니스 로직이고 나머지 절반은 결과를 HTML로 보여주기 위한 영역이다. 이처럼 비즈니스 로직과 결과를 출력하기 위한 영역이 혼재되어 있다면 유지보수에 불리할 것이다.

이 점을 해결하기 위해 MVC 패턴이 등장했다. MVC 패턴은 비즈니스 로직과 뷰 영역을 분리한다. 이제 MVC 패턴을 적용하여 Servlet 기반의 애플리케이션을 리팩터링 해보자.

+ Recent posts