Java - JSP & Servlet
JSP 란?
- JSP(JavaServer Pages)는 Java 언어를 기반으로 하는 서버 측 웹 개발 기술 중 하나.
- JSP는 동적인 웹 페이지를 생성하는 데 사용되며, HTML 안에 Java 코드를 결합하여 웹 애플리케이션을 개발하는 데 도움을 준다.
- 스크립틀릿, 디렉티브 태그 등을 활용하여 개발 할 수 있다.
- 서블릿 기반의 스크립트 기술이다.
- 결국 활용되려면 서블릿으로 변환되어야 한다.
JSP 실행 과정
- 클라이언트가 JSP 페이지에 대한 요청을 서버에 보냄
- 서버는 요청을 받으면, 해당 JSP 파일을 “서블릿”파일로 파싱후, 자바 바이트 코드로의 컴파일을 시도함.
- 이 때 처음 작업하는거면 서블릿 파일로 파싱후, 클래스 파일로 컴파일 함.
- 이미 기존에 요청됐던 JSP파일이면 서블릿으로 파싱하지 않고, 클래스 파일로 바로 컴파일 함.
- 컴파일된 클래스 파일(현재 바이트코드 상태)은 클래스로더에 의해 JVM에 적재되어 인터프리트 되어 실행.
- 클래스가 로딩되면 서블릿 컨테이너는 해당 서블릿의 인스턴스를 생성함.
- 인스턴스가 실행 됨.
- JSP 페이지에서 생성된 HTML 및 Java 코드가 실행되어 동적인 콘텐츠를 생성함
- 서블릿이 동적으로 생성한 결과물(HTML, XML, JSON 등)은 클라이언트에 응답으로 전송됨.
- 생성된 응답은 클라이언트에게 전송되어 화면에 표시됨. ( 웹 서버가 아니라, 브라우저에서 실행 됨 )
서블릿( Servlet )이란?
- 서블릿은 서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램이다.
- 서블릿은 Java 코드 안에 HTML 태그가 삽입되며 자바 언어로 되어있고, 확장자는 .java 이다.
- 예를들어 아래와 같은 JSP 코드가 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Simple JSP Example</title> </head> <body> <% String message = "Hello, JSP!"; %> <h1><%= message %></h1> </body> </html>
- 이걸 서블릿으로 변환하면 다음 코드처럼 된다.
public final class example_jsp extends HttpJspBase { private static JspFactory _jspxFactory = JspFactory.getDefaultFactory(); public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspWriter out = null; response.setContentType("text/html;charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); try { out = response.getWriter(); out.write("<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <meta charset=\"UTF-8\">\r\n <title>Simple JSP Example</title>\r\n</head>\r\n<body>\r\n "); String message = "Hello, JSP!"; out.write("\r\n <h1>"); out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString(org.apache.jasper.runtime.JspRuntimeLibrary.handleGetProperty(_jspx_page_context.findAttribute("example_jsp"), "message", String.class, (PageContext)_jspx_page_context, null, false))); out.write("</h1>\r\n</body>\r\n</html>"); } catch (Throwable t) { if (!(t instanceof SkipPageException)){ out = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); response.setContentType("text/html;charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); out.clear(); out.write("<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <meta charset=\"UTF-8\">\r\n <title>Error</title>\r\n</head>\r\n<body>\r\n "); out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString(org.apache.jasper.runtime.JspRuntimeLibrary.handlePageException(t))); out.write("\r\n</body>\r\n</html>"); } } finally { if (out != null) { out.close(); } } } }
서블릿의 장,단점?
- 장점
- Java 기반이므로 플랫폼 독립성이 있다.
- 설치 과정이 간단하다.
- 단점
- JSP는 HTML 코드와 Java 코드를 혼합하여 사용하는데, 이 때 문자열을 다루는 부분이 많을 수 있다.
- JSP에서는 HTML 태그, 속성, Java 코드 등이 문자열로 혼합되어 사용되기 때문에, 컴파일러는 이를 일반적인 문자열로 처리한다.
- 그래서 컴파일 단계가 아니라, 런타임 단계에서 오류를 찾는 경우가 종종 있다.
- 또한 Java 와 HTML 코드가 섞여 복잡하고 유지보수성이 떨어진다.