서블릿이란 자바 기반의 웹 프로그램 개발을 위해 만들어진 기술이다. 자바 기반이므로 자바 로 작성된 프로그램을 실행할 수 있는 섭버 소프트웨어를 통해 관리된다.
즉 서블릿을 실행하기 위해서는 톰켓과 같은 서블릿 컨테이너가 필요하며 이런 서버 소프트웨어를 WAS 라고 부른다.
기본적인 웹의 요청과 응답 과정은 다음과 같다.
1. 클라이언트가 서버에 페이지를 요청한다.
2. 서버는 클라이언트에 요청받은 파일을 응답한다.
3. 클라이언트는 수신받은 파일의 내용을 해석하여 화면에 표시한다.
이때 전달받은 HTML 파일은 정적인 파일이므로 실시간으로 변하는 정보 등을 가지고 올 수 없다. 따라서 사용자의 웹 요청을 받으면 별도의 프로그램을 통해 데이터베이스에서 가지고 온 정보를 HTML로 재구성하여 클라이언트에 다시 전달해야 한다.
더불어 사용자 로그인 처리, 게시판에 글을 올리는 등 데이터베이스에 저장하는 과정이 필요할 수 있다. 서블릿은 바로 이러한 기능을 수행할 수 있도록 설계된 특수 목적의 자바 프로그램이다.
서블릿 동작 구조는 다음과 같다.
1. 클라이언트가 서버에 페이지(URL)를 요청한다.
2. 서버는 요청 URL에 매핑되는 서블릿을 호출하며 Parameter를 전달한다.
3. 서블릿이 실행되고 Parameter로 전달된 값을 처리하거나 데이터베이스와 연동한다.
4. HTML과 데이터를 조합하여 재구성한 다음 클라이언트에 전달한다.
5. 웹 브라우저는 수신받은 HTML 내용을 해석하여 화면에 표시한다.
그런데 서블릿은 HTML과 데이터를 조합하는 방식에 어려움이 있다.
out.println("<h2>" + title + </h2>);
out
은 서블릿에서 클라이언트에 데이터를 전송하기 위한 출력 스트림이다. HTML 코드와 Java 코드의 결합으로 처리되고 있어 한 화면에 수천 라인이 될 수 있는 HTML 코드 구성을 위와 같이 Java 언어로 작성해야 한다는 것은 매우 비효율적이다.
JSP는 위와 같은 상황을 개선하기 위해 등장하였다.
JSP는 Servlet에서 HTML과 데이터 결합을 쉽게 처리하기 위해 만들어졌다. Java 중심의 Servlet과 달리 HTML을 중심으로 데이터를 처리하는 특징을 가져 HTML 에서 Java 코드를 사용할 수 있는 구조로 되어있다.
위 Servlet 코드를 JSP 를 사용하면 다음과 같다.
<html>
...
<h2><%= title %></h2>
...
</html>
JSP 문법 자체는 page 지시어 선언 부분을 제외하면 HTML 파일 구조와 동일하며 CSS, JS사용 형식 또한 동일하다. <%= %> 태그는 JSP의 출력문으로 사칙연산, 간단한 변수의 출력 등에 사용된다.
그러나 JSP를 이용한 개발에도 약간의 문제가 있다. 데이터를 반복적으로 출력하거나 조건을 체크해야 하는 겨우 단순한 HTML 문법만으로는 처리할 수 없으므로 Java 코드를 중간중간 사용하여 처리해야 한다.
<table>
<% for(type variable : variables)> { %>
<tr>
<td><%= variable.attribute1></td>
<td><%= variable.attribute2></td>
</tr>
<% } %>
</table>
복수의 데이터를 출력해야 하는 경우 Java for문을 사용하여 row를 추가하는 코드이다. <% %> 태그 안에 for 문을 선언하고 반복하여 출력할 내용을 HTML로 작성하였다.
<% %> 태그는 스크립트릿으로 해당 블록 안에서 Java를 자유롭게 사용할 수 있다. HTML 부분은 Servlet 컨데이너에 의해 out.println()을 사용하는 형태로 변환된다.
따라서 JSP는 HTML이 아니라 궁극적으로 Servlet 형태의 프로그램으로 변환되는 것이며 코드가 복잡하고 가독성이 떨어진다는 단점이 있다.