템플릿 엔진

[Spring] Java의 템플릿 엔진인 JSP와 Servlet비교
Jan 25, 2024
템플릿 엔진
일일히 Servlet을 만들어 개발하기에는 너무 비효율적이다.
템플릿 엔진은 웹 애플리케이션에서 동적인 컨텐츠를 생성하기 위해 사용되는 도구이다. 템플릿 엔진은 미리 정의된 템플릿 파일과 데이터를 조합하여 최종적인 결과물을 생성하는 역할을 한다.
Java에서 사용하는 템플릿 엔진은 JSP(JavaServerPage)이다.
→ html코드를 적고 거기다 java 코드를 섞어 넣은것을 Servlet으로 바꿔주는 것.

Servlet

class로 만들기

MainServlet

package com.example.userapp.board; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/main") public class MainServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setHeader("Content-Type", "text/html; charset=utf-8"); String html = "<!DOCTYPE html>\n" + "<html lang=\"en\">\n" + "\n" + "<head>\n" + " <meta charset=\"UTF-8\">\n" + " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" + " <title>Document</title>\n" + "</head>\n" + "\n" + "<body>\n" + " <h1>메인 페이지</h1>\n" + " <hr>\n" + "</body>\n" + "\n" + "</html>"; resp.getWriter().println(html); } }

JoinFormServlet

package com.example.userapp.user; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.time.LocalDateTime; @WebServlet("/join-form") public class JoinFormServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { LocalDateTime now = LocalDateTime.now(); String html = "<!DOCTYPE html>\n" + " <html lang=\"en\">\n" + " <head>\n" + " <meta charset=\"UTF-8\">\n" + " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" + " <title>Document</title>\n" + " </head>\n" + " <body>\n"; for (int i = 0; i < 1; i++) { html= html+" <h1>"+i+"회원가입 페이지"+now+"</h1>\n"; } html = html+" <hr>\n" + " <form action=\"/join\" method=\"post\">\n" + " <input type=\"text\" placeholder=\"username\" name=\"username\">\n" + " <input type=\"text\" placeholder=\"password\" name=\"password\">\n" + " <input type=\"text\" placeholder=\"email\" name=\"email\">\n" + " <button>회원가입</button>\n" + " </form>\n" + " </body>\n" + " </html>"; resp.getWriter().println(html); } }

JoinServlet

package com.example.userapp.user; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.IOException; @WebServlet("/join") public class JoinServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setHeader("Content-Type", "text/html; charset=utf-8"); // 한글 처리 // 1. 파싱 username=ssar&password=1234&email=ssar@nate.com // BufferedReader br = req.getReader(); // // String requestBody = ""; // // while(true){ // String line = br.readLine(); // // if(line == null) break; // // requestBody = requestBody + line; // } // // System.out.println(requestBody); String username = req.getParameter("username"); String password = req.getParameter("password"); String email = req.getParameter("email"); System.out.println("username : " + username); System.out.println("password : " + password); System.out.println("email : " + email); // 2. 유효성 검사 (1000줄 됨) if (username.length() < 3 || username.length() > 10) { resp.getWriter().println("<h1>username 글자수가 3~10여야 합니다.</h1>"); return; } // 3. DBConnetion // // 4. DAO의 insert 메서드를 호출 // // 5. 메인 페이지 그리기 (비효율적) // // 6. 리다이렉트 // resp.sendRedirect("/main"); resp.setStatus(302); resp.setHeader("Location","/main"); resp.setHeader("clock","/12pm"); } }

JSP

파일을 jsp로 만들기

main

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>main page</h1> <hr> </body> </html>

join

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <% response.setHeader("Content-Type", "text/html; charset=utf-8"); // 한글 처리 // 1. 파싱 String username = request.getParameter("username"); String password = request.getParameter("password"); String email = request.getParameter("email"); System.out.println("username : " + username); System.out.println("password : " + password); System.out.println("email : " + email); // 2. 유효성 검사 (1000줄 됨) if (username.length() < 3 || username.length() > 10) { response.getWriter().println("<h1>username 글자수가 3~10여야 합니다.</h1>"); return; } response.setStatus(302); response.setHeader("Location","/board/main.jsp"); response.setHeader("clock","/12pm"); %>

join-form

<%@ page import="java.time.LocalDateTime" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% LocalDateTime now = LocalDateTime.now(); %> <html> <head> <title>Title</title> </head> <body> <h1>회원가입 페이지 <%=now%></h1> <hr> <form action="/user/join.jsp" method=""> <input type="text" placeholder="username" name="username"> <input type="text" placeholder="password" name="password"> <input type="text" placeholder="email" name="email"> <button>회원가입</button> </form> </body> </html>
JSP에서 HTML코드와 Java코드 구분을 위해 Java코드는 <% %> 를 써줌
파일명으로 요청하지만 자바코드가 있기에 톰캣으로 위임됨
경로로 요청 하여야 함.

같은 역할을 하는 코드이지만
JSP로 만들면 Servlet으로 만드는것 보다 코드작성이 더 간단하고 쉽다.
 
Share article

More articles

See more posts
RSSPowered by inblog