// 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="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>
서블릿은 HTML 작업이 자바 코드에 섞여서 지저분했다. JSP는 뷰 생성 작업을 JSP가 가져가고 중간에 동적으로 변경이 필요한 부분만 자바 코드를 사용한다.
하지만 회원 저장을 보면 회원을 저장하는 비즈니스 로직과 HTML 뷰 영역이 같이 있다. JSP가 너무 많은 역할을 한다.
비즈니스 로직은 서블릿처럼 다른 곳에서 처리하고 JSP는 화면을 그리는 일에 집중하기 위해 MVC 패턴이 등장했다.