들어가며
- 자바 웹 개발을 하면 항상 부딪히는 주제 중 하나가 servlet과 JSP이다. 두 개는 무엇일까?
servlet이란?
- 서블릿(servlet)은 자바 웹 개발을 위해 만들어진 기능이다.
- 서블릿은 HTTP 통신의 핵심 흐름인 request와 response을 다룬다. 서블릿은 HTTP 통신을 위한 생명 주기를 가진다.
- init
- service
- doGet, doPost
- destroy
- 세션, 쿠키, 필터 등 기타 다양한 기능을 제공한다.
servlet의 렌더링(view)
- 웹 개발에 있어서 서블릿의 가장 중요한 특징은 아무래도 html을 동적으로 출력한다는 점일 것이다.
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>title</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>");
out.println("Hello, World!");
out.println("</h1>");
out.println("</body>");
out.println("</html>");
}
- 서블릿은 응답으로 html 문서를 생성할 수 있다.
- 다음처럼 동적인 방식으로도 출력 가능하다.
SamplePerson person = new SamplePerson("홍길동", 45, "서울시");
out.println("<body>");
out.println("<h1>"+person.getName()+"의 프로필</h1>);
out.println("나이 : "+person.getAge()+"<br>");
out.println("사는 곳 : "+person.getAddress()+"<br>");
out.println("</body>");
- 순수한 HTML 문서는 수정할 수 없다.
- 서블릿은 객체와 변수의 값이 변하면, 그것에 의존하여 html 문서를 새롭게 갱신할 수 있다.
JSP의 렌더링
- JSP는 서블릿에서 한 단계 더 나아간다.
- HTML 형태를 유지한 채, 필요한 위치에만 동적인 값을 입력한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
(예시 1)
<%
String name = "홍길동";
int age=30;
double height = 180;
%>
<h4>저의 이름은<%= name %> 입니다. </h4>
저의 나이는 <%=age %> 살 입니다.<br>
저의 키는 <%=height %> 입니다.
(예시 2)
<%
SimpleBean sb = new SimpleBean();
sb.setMsg("반갑습니다.");
String returnMsg = sb.getMsg();
out.print("returnMsg : "+returnMsg);
%>
(예시 3)
<h4>저의 이름은 ${param.name}입니다. </h4>
저의 나이는 ${param.age} 살 입니다.<br>
저의 키는 ${param.height} 입니다.
</body>
</html>
- 예시 1의 경우 스크립트릿(<% %>) 내부에서 자바와 동일한 문법을 사용 가능하다. 그리고 그 문법은 HTML 문서 내의 <%= %>로 동적으로 입력된다.
- 예시 2의 경우 객체를 만드는 것을 볼 수 있다. 앞서 봤던 response 객체의 out.print()의 메서드를 사용하는 것을 볼 수 있다.
- 예시 3의 경우 el태그를 활용하여 get param 값을 가져올 수 있다.
- 그 외 다양한 방식으로 JSP를 활용 가능하다.
JSP는 servlet으로 변환된다.
- jsp에서 자바 언어를 사용할 수 있는 이유는 무엇일까?
- jsp 파일은 자동으로 servlet으로 변환된다. servlet은 자바(.java)파일로서 컴파일시 클래스(.class)로 변환된다.
- 위의 예시는 서블릿 -> JSP 순서로 변환되지만, 사실은 JSP 입장에서는 JSP->Servlet 으로 변환된다. 그러니까 "저의 나이는 ${param.age} 살 입니다.
"는 서블릿에서 out.print("저의 나이는"+request.getParameter("age")+"살 입니다.
"); 로 변환해주는 아주 편리한 기능이라 볼 수 있다.
- jsp와 servlet으로 view를 출력하는 것을 서버사이드렌더링이라 부른다. 서버에서 jsp와 서블릿을 가지고 html을 조작 및 출력하기 때문이다.