<aside> 💡

서블릿이 HTML을 찍으면 유지보수가 불가능해진다. HTML에 자바 코드를 넣자.

</aside>

1. 라이브러리 세팅

build.gradle

 // JSP 엔진(톰캣 Jasper)
 implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'

 // JSTL (EL, core 태그)
 implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api'
 implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl'

2. 폴더 설정

/resources/META-INF/resources

3. index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <h1>index 페이지</h1>
    <% int num = 10; %>
    <h3>값 : <%=num%></h3>
  </body>
</html>

image.png

4. jsp코드가 아래와 같이 servelt으로 변경됨 (자동으로)

image.png

package com.example.v3;

import java.io.IOException;
import java.io.PrintWriter;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/index.jsp")
public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int num = 10;
        String html = """
                    <!DOCTYPE html>
                    <html lang="en">
                    <head>
                        <meta charset="UTF-8" />
                        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
                        <title>Document</title>
                    </head>
                    <body>
                        <h1>index 페이지</h1>

                        <h3>값 : <%=num%></h3>
                    </body>
                    </html>
                """.replace("<%=num%>", num + "");
        resp.setContentType("text/html; charset=utf-8");
        PrintWriter pw = resp.getWriter();
        pw.println(html);
    }
}

5. 단점

<aside> 💡

단일 진입점이 필요하다!!!!

</aside>

image.png