일일히 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