@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Hello Servlet</title></head>");
out.println("<body>");
out.println("<h1>Hello, World!</h1>");
out.println("<p>This is a simple servlet example.</p>");
out.println("</body>");
out.println("</html>");
out.close();
}
}
bookList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%-- jstl의 core 라이브러리를 사용하기 위해 taglib를 이용한다. --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
#book-list {
border-collapse: collapse;
width: 100%;
}
#book-list td, #book-list th {
border: 1px solid black;
}
</style>
</head>
<body>
<%@ include file="/include/header.jsp"%>
<h1>도서 목록</h1>
<table id="book-list">
<thead>
<tr>
<th>번호</th>
<th>ISBN</th>
<th>저자</th>
<th>제목</th>
<th>가격</th>
<th>관리</th>
</tr>
</thead>
<tbody>
<%-- request 영역에 books로 등록된 자료를 반복문을 이용해 출력한다. --%>
<c:forEach items="${books}" var="book" varStatus="vs">
<tr>
<td>${vs.count }</td>
<td>${book.isbn }</td>
<td>${book.author }</td>
<td><a href="main?action=detail&isbn=${book.isbn}">${book.title}</a></td>
<td>${book.price }</td>
<td><a href="main?action=delete&isbn=${book.isbn}">삭제</a></td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
Servlet.java
private void doList(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
try {
req.setAttribute("books", bservice.select());
RequestDispatcher disp = req.getRequestDispatcher("/list.jsp");
disp.forward(req, resp);
} catch(SQLException e) {
}
}
Servlet이나 JSP 모두 Java 코드를 이용해 데이터 가공이나 Business Logic을 처리하는 것이 물론 가능하다. 하지만 예전에는 한 페이지 안에서 이 모든 작업들을 섞어서 코드를 작성했다. 어플리케이션이 가볍고, 복잡한 로직이 없을 때는 어느 정도 개발을 빠르게 할 수 있다는 점에서 좋을 수 있지만, 현대의 어플리케이션은 그렇지 않다.
따라서 Model, View, Controller로 각 기능을 분기하여 코드를 작성하여 가독성, 유지보수 용이성, 확장성을 고려하게 됐다.
Model: 서버에서 데이터 처리, 비즈니스 로직, 데이터베이스와 상호작용 담당, 자바 클래스로 구현되며, 데이터를 저장하고 가공하는 역할, DAO, DTO, VO, Service 등의 파일이 이 역할을 한다.
Controller: Client의 요청을 각 로직에 맞게 분기해준다. Spring에서 Controller, Servlet구조에서 Servlet이 이 역할을 담당하게 된다.
View: Clinet에게 보여줄 화면을 작성하는 파일로 JSP 혹은 최근의 Vue, React 등의 Framework가 담당하게 된다.