JSP로 만들기

    // JSP
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl'

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>

맨 첫줄은 JSP 문서라는 의미다. JSP 문서는 이렇게 시작한다.

첫 줄을 제외하고는 HTML과 완전히 똑같다. JSP는 서버 내부에서 서블릿으로 변환되며, 이전에 만들었던 MemberFormServlet과 거의 비슷한 모습으로 변환된다.

http://localhost:8080/jsp/members/new-form.jsp

접속할 땐 jsp를 붙여줘야 한다.

회원 저장

<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
// request, response 사용 가능
MemberRepository memberRepository = MemberRepository.getInstance();
System.out.println("save.jsp");
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
System.out.println("member = " + member);
memberRepository.save(member);
%>
<html>
<head>
    <meta charset="UTF-8">
</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>
  • <%@ page import="hello.servlet.domain.member.MemberRepository" %>는 import 문이다.

  • <% ~~ %>는 자바 코드를 입력한다.

  • <%= ~~ %>는 바바 코드를 출력한다.

회원 목록

<%@ page import="java.util.List" %>
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    MemberRepository memberRepository = MemberRepository.getInstance();
    List<Member> members = memberRepository.findAll();
%>
<html>
<head>
    <meta charset="UTF-8">
    <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.getUsername() + "</td>");
            out.write("    </tr>");
        }
    %>
    </tbody>
</table>
</body>
</html>

서블릿과 JSP의 한계

서블릿은 HTML 작업이 자바 코드에 섞여서 지저분했다. JSP는 뷰 생성 작업을 JSP가 가져가고 중간에 동적으로 변경이 필요한 부분만 자바 코드를 사용한다.

하지만 회원 저장을 보면 회원을 저장하는 비즈니스 로직과 HTML 뷰 영역이 같이 있다. JSP가 너무 많은 역할을 한다.

MVC 패턴의 등장

비즈니스 로직은 서블릿처럼 다른 곳에서 처리하고 JSP는 화면을 그리는 일에 집중하기 위해 MVC 패턴이 등장했다.

Last updated

Was this helpful?