๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

[Web] HTML -> Servlet, JSP -> Spring

by joaa 2024. 3. 20.

๐ŸŽˆ 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