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 코드가 섞여 복잡하고 유지보수성이 떨어진다.






results matching ""

    No results matching ""