๐ Servlet์ด๋?
์์ ๊ฐ์ HTTP ๊ท์ฝ์ ๋ง๋ ์์ฒญ๊ณผ ์๋ต์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํ์ง ์๊ณ ๋ฉ์๋ ํธ์ถ๋ก ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ํ๋ก๊ทธ๋จ.
Servlet Container
: ์๋ธ๋ฆฟ๋ค์ ๋ด๊ณ ์๋ ์ปจํ ์ด๋. ์๋ธ๋ฆฟ์ ์์ฑ, ํธ์ถ, ์๋ฉธ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌ. ex) Apache Tomcat- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ํ๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ด๊ธฐํํ๊ณ , ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ณตํ๋ค. ์์ฑ๊ณผ ์ด๊ธฐํ๋ ํ ๋ฒ๋ง ํ๋ค.
dynamic web project ์์ฑํ๊ณ maven ํ๋ก์ ํธ๋ก ๋ณ๊ฒฝ
์๋ธ๋ฆฟ ์์ฑ. ์๋ธ๋ฆฟ๊ณผ ๋งคํํ ๋ํดํธ url์ ํด๋์ค ๋ช ์ด๊ณ url์ ๋ณ๊ฒฝํ ์ ์๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" version="6.0">
<servlet>
<description></description>
<display-name>BoardController</display-name>
<servlet-name>BoardController</servlet-name>
<servlet-class>com.test.board.controller.BoardController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BoardController</servlet-name>
<url-pattern>/BoardController</url-pattern>
</servlet-mapping>
<display-name>test</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
servlet-mapping๊ณผ servlet-name์ด ํ ์์ผ๋ก, url-pattern๊ฐ์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด servlet-name์ ํด๋นํ๋ servlet์ผ๋ก ๋งคํ๋๋ค.
package com.test.board.controller;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class BoardController extends HttpServlet {
private static final long serialVersionUID = 1L;
public BoardController() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
BoardController ์คํ ๊ฒฐ๊ณผ
๐ JSP๋?
JSP(JavaServer Pages)๋ Java ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๊ธฐ์ ์ค ํ๋๋ก, ๋์ ์ธ ์น ํ์ด์ง๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. JSP๋ HTML ์ฝ๋ ์์ Java ์ฝ๋๋ฅผ ์ฝ์ ํ์ฌ ์น ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
JSP์ ์ฃผ์ ํน์ง๊ณผ ์ญํ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋์ ์น ํ์ด์ง ์์ฑ:
JSP๋ ์๋ฒ ์ธก์์ ์คํ๋๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์น ํ์ด์ง๋ฅผ ์์ฑํฉ๋๋ค. - HTML๊ณผ Java ์ฝ๋์ ํผํฉ
- ์๋ธ๋ฆฟ์ผ๋ก์ ๋ณํ:
JSP ํ์ด์ง๋ ์น ์ปจํ ์ด๋์ ์ํด ์๋ธ๋ฆฟ(Servlet)์ผ๋ก ๋ณํ๋ฉ๋๋ค.
JSP ํ์ด์ง์ Java ์ฝ๋๋ ์๋ธ๋ฆฟ์ service() ๋ฉ์๋ ๋ด๋ถ์ ์ฝ์ ๋์ด ์คํ๋ฉ๋๋ค. - ํํ์(Expression)๊ณผ ์คํฌ๋ฆฝํ๋ฆฟ(Scriptlet):
JSP๋ <%= ... %>, <% ... %> ๋ฑ์ ํํ์ ํํ์์ ์ฌ์ฉ - ๋ด์ฅ ๊ฐ์ฒด(Implicit Objects):
JSP๋ Request, Response, Session, Application ๋ฑ์ ๋ด์ฅ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํฉ๋๋ค. - ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Tag Library)
์๋ธ๋ฆฟ์ ๊ธฐ๋ฅ์ ๋ณด์ํ๊ณ ํ์ฅํ๋ ์ญํ
์ ํฉ๋๋ค. JSP์ ์๋ธ๋ฆฟ์ ํจ๊ป ์ฌ์ฉ๋์ด MVC(Model-View-Controller) ์ํคํ ์ฒ ํจํด์์ View ์ญํ ์ ๋ด๋นํ๊ธฐ๋ ํฉ๋๋ค.
Servlet์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(Server-Side Rendering, SSR)์ ์ํํ๋ ๊ธฐ์ ์ด๋ค.
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์น ํ์ด์ง์ ๋ด์ฉ์ ์๋ฒ์์ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ ๋ฐฉ์์ ๋งํ๋ค.
JSP๋ SSR์ ํธ๋ฆฌํ๊ฒ ๊ตฌํํ ์ ์๋๋ก ํ๋ ๊ธฐ์ ์ด๋ค.
๐ Servlet, JSP ์์
BoardController์ get์์ฒญ์ด ์ค๋ฉด index.jsp๋ก forward๋๋๋ก ํ๊ณ
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher disp = request.getRequestDispatcher("/index.jsp");
disp.forward(request, response);
}
webapp ์๋์ index.jsp๋ฅผ ์ถ๊ฐํ๋ฉด
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String str = "๋น์ฆ๋์ค ๋ก์ง์์ ์ฒ๋ฆฌํ ์ด๋ค ๊ฒฐ๊ณผ";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<th>jsp ์์</th>
<th>jsp ์์</th>
</tr>
<% for(int i=0; i<5; i++){ %>
<tr>
<td><%=str %></td>
<td><%=str %></td>
</tr>
<%} %>
</table>
</body>
</html>
/test/BoardController๋ก ์์ฒญ์ ๋ณด๋ธ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋ง์ฝ JSP๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ด๋ฐ ์์ผ๋ก Java ์ฝ๋ ์์ HTML์ ์์ฑํด์ผ ํด์ ๋ณด๊ธฐ ์ข์ง ์์ ์ฝ๋๊ฐ ๋๋ค.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
out.write('\r');
out.write('\n');
String str = "๋น์ฆ๋์ค ๋ก์ง์์ ์ฒ๋ฆฌํ ์ด๋ค ๊ฒฐ๊ณผ";
out.write("\r\n");
out.write("<!DOCTYPE html>\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta charset=\"UTF-8\">\r\n");
out.write("<title>Insert title here</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write(" <table style=\"border: 1\">\r\n");
out.write(" <tr>\r\n");
out.write(" <th>jsp ์์</th>\r\n");
out.write(" <th>jsp ์์</th>\r\n");
out.write(" </tr>\r\n");
out.write(" ");
for(int i=0; i<5; i++){
out.write("\r\n");
out.write(" <tr>\r\n");
out.write(" <td>");
out.print(str );
out.write("</td>\r\n");
out.write(" <td>");
out.print(str );
out.write("</td>\r\n");
out.write(" </tr>\r\n");
out.write(" ");
}
out.write("\r\n");
out.write(" </table>\r\n");
out.write("</body>\r\n");
out.write("</html>");
}
JSP๋ฅผ ์ฌ์ฉํ๋ฉด C:\User\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\test\org\apache\jsp\index_jsp.java ํ์ผ์์ _jspService ๋ฉ์๋ ์์ HTML์ด java๋ก ๋ณํ๋ ์ฝ๋๋ฅผ ํ์ธํ ์ ์๋ค.
๊ฐ๋ฐ์๊ฐ ํด์๋ ์ผ์ ๋์ ํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด jsp์ธ ๊ฒ์ด๋ค.
public void _jspService(final jakarta.servlet.http.HttpServletRequest request, final jakarta.servlet.http.HttpServletResponse response)
throws java.io.IOException, jakarta.servlet.ServletException {
...
try {
response.setContentType("text/html; charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write('\r');
out.write('\n');
String str = "๋น์ฆ๋์ค ๋ก์ง์์ ์ฒ๋ฆฌํ ์ด๋ค ๊ฒฐ๊ณผ";
out.write("\r\n");
out.write("<!DOCTYPE html>\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta charset=\"UTF-8\">\r\n");
out.write("<title>Insert title here</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write(" <table style=\"border: 1\">\r\n");
out.write(" <tr>\r\n");
out.write(" <th>jsp ์์</th>\r\n");
out.write(" <th>jsp ์์</th>\r\n");
out.write(" </tr>\r\n");
out.write(" ");
for(int i=0; i<5; i++){
out.write("\r\n");
out.write(" <tr>\r\n");
out.write(" <td>");
out.print(str );
out.write("</td>\r\n");
out.write(" <td>");
out.print(str );
out.write("</td>\r\n");
out.write(" </tr>\r\n");
out.write(" ");
}
out.write("\r\n");
out.write(" </table>\r\n");
out.write("</body>\r\n");
out.write("</html>");
} catch (java.lang.Throwable t) {
...
} finally {
...
}
}
์์ฆ์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ ์ฌ์ฉํ์ง ์์์ ์ด๊ฑธ ์ ์์์ผํ๋..? ์ถ๊ณ
๊ณผ์ฐ JSP๋ฅผ ์ธ ์ผ์ด ์์์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์น์ ์ด๋ฐ ์ญ์ฌ๊ฐ ์์๋ค๋ ๊ฑธ ์๊ฒ๋๋ค๋๊ฑด ์๋ฏธ์์๋ค.
Servlet, JSP๋ฅผ ์ด์ฉํ CRUD
์ด๋ฐ ํจํค์ง ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋ ์คํ๋ง ํ๋ ์์ํฌ ์๋ ์์ MVC๋ฅผ ๋ง๋ค์ด๋ดค๋ค.
DAO์์๋ JDBC๋ฅผ ์ด์ฉํด MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ณ , Service์์ ๋น์ฆ๋์ค ๋ก์ง, DTO์์ DB์ ์ฐ๊ฒฐ๋ ์ํฐํฐ ์ ์, Controller์์ doGet, doPost๋ฅผ servlet ์์ฒญ์ action ํ๋ผ๋ฏธํฐ๊ฐ ๋ฌด์์ธ์ง์ ๋ฐ๋ผ ์ฒ๋ฆฌํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ํ๋ก ํธ์ปจํธ๋กค๋ฌ ํจํด์ ๊ตฌํํ๋ค.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>๊ฒ์๊ธ ๊ด๋ฆฌ</title>
</head>
<body>
<h1>๊ฒ์๊ธ</h1>
<ul>
<li><a href="main?action=regist">๊ฒ์๊ธ ๋ฑ๋ก</a></li>
<li><a href="main?action=list">๊ฒ์๊ธ ๋ชฉ๋ก</a></li>
</ul>
</body>
</html>
@WebServlet("/main")
public class MainServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
if ("regist".equals(action)) {
// ๊ฒ์๊ธ ๋ฑ๋ก ํ์ด์ง๋ก ํฌ์๋ฉ
RequestDispatcher dispatcher = request.getRequestDispatcher("/regist.jsp");
dispatcher.forward(request, response);
} else if ("list".equals(action)) {
// ๊ฒ์๊ธ ๋ชฉ๋ก ์กฐํ
BoardDao boardDao = BoardDaoImpl.getInstance();
try {
List<Board> list = boardDao.selectBoardList();
request.setAttribute("list", list);
RequestDispatcher dispatcher = request.getRequestDispatcher("/list.jsp");
dispatcher.forward(request, response);
} catch (SQLException e) {
e.printStackTrace();
response.sendRedirect(request.getContextPath() + "/index.jsp");
}
} else {
response.sendRedirect(request.getContextPath() + "/index.jsp");
}
}
...
}
}
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java์์ ๋ถ๋ณ ๊ฐ์ฒด (0) | 2024.02.21 |
---|---|
๋ณ์์ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ (0) | 2024.01.31 |
๊ฐ์ฒด์ ํด๋์ค (0) | 2024.01.30 |