ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (JSP/Servlet) 개념과 기초 정리
    서버 프로그래밍 2021. 8. 24. 17:50

    JSP란 JavaServer Page의 약자로 HTML 코드 내부에 JAVA코드를 작성할 수 있는 서버 프로그램 언어이다.

    이번에도 역시 개념과 특징을 정리해보자.

    • 빈즈, 자바 컴포넌트 사용 가능 -> 후에 실습 내용에 서술
    • 커스텀 태그 만들어서 사용 가능
    • JSTL(JSP Standard Tag Library)과 같은 태그 라이브러리 이용 가능
    • 스프링, @MVC 등 다양한 프레임워크와 결합하여 개발 가능

     

    ★ JSP의 동작 ★

    test.jsp 코드를 실행! -> Server with Container가 읽고 변환 -> test_jsp.java(Servlet파일 생성) -> 컴파일 -> test_jsp.class -> 실행 -> HTML 파일 -> HTTP 프로토콜을 통해 브라우저가 서비스를 받는다.

     

    --> JSP로 코드를 짜면 Servlet 코드로 컨테이너가 변환시켜준다. 아래 예시를 보자.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.util.Date"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>JSP 실습</title>
    </head>
    <body>
     
    <%=new Date() %>
     
    </body>
    </html>
    cs

     

    - 간단한 JSP 코드 예시이다. HTML 코드 내부 <%=  %> 태그 안에 자바 코드가 삽입되어 있다. 이걸 실행하면 Servlet코드(.java)와 실행할 class파일이 만들어진다.

     

    이렇게 생성된다.

     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    /*
     * Generated by the Jasper component of Apache Tomcat
     * Version: Apache Tomcat/8.5.69
     * Generated at: 2021-08-24 04:58:12 UTC
     * Note: The last modified time of this file was set to
     *       the last modified time of the source file after
     *       generation to assist with modification tracking.
     */
    package org.apache.jsp;
     
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    import java.util.Date;
     
    public final class NewFile_jsp extends org.apache.jasper.runtime.HttpJspBase
        implements org.apache.jasper.runtime.JspSourceDependent,
                     org.apache.jasper.runtime.JspSourceImports {
     
      private static final javax.servlet.jsp.JspFactory _jspxFactory =
              javax.servlet.jsp.JspFactory.getDefaultFactory();
     
      private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
     
      private static final java.util.Set<java.lang.String> _jspx_imports_packages;
     
      private static final java.util.Set<java.lang.String> _jspx_imports_classes;
     
      static {
        _jspx_imports_packages = new java.util.HashSet<>();
        _jspx_imports_packages.add("javax.servlet");
        _jspx_imports_packages.add("javax.servlet.http");
        _jspx_imports_packages.add("javax.servlet.jsp");
        _jspx_imports_classes = new java.util.HashSet<>();
        _jspx_imports_classes.add("java.util.Date");
      }
     
      private volatile javax.el.ExpressionFactory _el_expressionfactory;
      private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
     
      public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
        return _jspx_dependants;
      }
     
      public java.util.Set<java.lang.String> getPackageImports() {
        return _jspx_imports_packages;
      }
     
      public java.util.Set<java.lang.String> getClassImports() {
        return _jspx_imports_classes;
      }
     
      public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
        if (_el_expressionfactory == null) {
          synchronized (this) {
            if (_el_expressionfactory == null) {
              _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
            }
          }
        }
        return _el_expressionfactory;
      }
     
      public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
        if (_jsp_instancemanager == null) {
          synchronized (this) {
            if (_jsp_instancemanager == null) {
              _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
            }
          }
        }
        return _jsp_instancemanager;
      }
     
      public void _jspInit() {
      }
     
      public void _jspDestroy() {
      }
     
      public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
          throws java.io.IOException, javax.servlet.ServletException {
     
        final java.lang.String _jspx_method = request.getMethod();
        if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
          response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP들은 오직 GET, POST 또는 HEAD 메소드만을 허용합니다. Jasper는 OPTIONS 메소드 또한 허용합니다.");
          return;
        }
     
        final javax.servlet.jsp.PageContext pageContext;
        javax.servlet.http.HttpSession session = null;
        final javax.servlet.ServletContext application;
        final javax.servlet.ServletConfig config;
        javax.servlet.jsp.JspWriter out = null;
        final java.lang.Object page = this;
        javax.servlet.jsp.JspWriter _jspx_out = null;
        javax.servlet.jsp.PageContext _jspx_page_context = null;
     
     
        try {
          response.setContentType("text/html; charset=UTF-8");
          pageContext = _jspxFactory.getPageContext(this, request, response,
                      nulltrue8192true);
          _jspx_page_context = pageContext;
          application = pageContext.getServletContext();
          config = pageContext.getServletConfig();
          session = pageContext.getSession();
          out = pageContext.getOut();
          _jspx_out = out;
     
          out.write("\r\n");
          out.write("<!DOCTYPE html>\r\n");
          out.write("<html>\r\n");
          out.write("<head>\r\n");
          out.write("<meta charset=\"UTF-8\">\r\n");
          out.write("<title>JSP 실습</title>\r\n");
          out.write("</head>\r\n");
          out.write("<body>\r\n");
          out.write("\r\n");
          out.print(new Date() );
          out.write("\r\n");
          out.write("\r\n");
          out.write("</body>\r\n");
          out.write("</html>");
        } catch (java.lang.Throwable t) {
          if (!(t instanceof javax.servlet.jsp.SkipPageException)){
            out = _jspx_out;
            if (out != null && out.getBufferSize() != 0)
              try {
                if (response.isCommitted()) {
                  out.flush();
                } else {
                  out.clearBuffer();
                }
              } catch (java.io.IOException e) {}
            if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
            else throw new ServletException(t);
          }
        } finally {
          _jspxFactory.releasePageContext(_jspx_page_context);
        }
      }
    }
     
    cs

     

    (간단한 JSP코드가 변환된 Servlet 코드, 새삼 JSP가 고마워진다...)

     

    - 결국 JSP는 Servlet코드를 편하게 짜기위한 코드라고 생각하면 될 것 같다.

     

    ★★ JSP를 변환한 Servlet 코드를 보면 pageContext, application, request, response 등등의 객체가 초기화 되어 있다.

    ---> JSP에서 별도의 선언 없이 사용이 가능! (이것이 핵심!) == 이것을 'JSP 내장객체' 라고 부른다.

     

    후에 예제 코드와 함께 JSP 코드를 설명해 보도록 하겠습니다 :)

     

     

    예제 코드 실행 결과

Designed by Tistory.