회원 등록 폼 - 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 기반의 애플리케이션을 리팩터링 해보자.
'Spring' 카테고리의 다른 글
| [Spring] Spring MVC : MVC 프레임워크 구현 - Front Controller 도입 (0) | 2023.12.06 |
|---|---|
| [Spring] Spring MVC : Servlet 기반의 애플리케이션 - MVC 패턴을 적용한 Servlet (1) | 2023.11.25 |
| [Spring] Spring MVC : Servlet 기반의 애플리케이션 - 요청 처리 서블릿 구현 (0) | 2023.08.17 |
| [Spring] Spring MVC : Servlet 기반의 애플리케이션 - 회원 저장소 (0) | 2023.08.17 |
| [Spring] Spring MVC : Servlet 기반의 애플리케이션 - 요구 사항 (0) | 2023.08.17 |