zoukankan      html  css  js  c++  java
  • jsp>jsp执行过程

    JSP 的执行过程

    (1) 客户端发出Request (请求);
    (2) JSP Container 将JSP转译成Servlet的源代码;
    (3) 将产生的Servlet 的源代码经过编译后,并加载到内存执行;
    (4) 把结果Response (响应)至客户端。

    在执行 JSP 网页时,通常可分为两个时期:转译时期(Translation Time)和请求时期(Request Time)
          转译时期:JSP网页转译成Servlet类。
           请求时期:Servlet类执行后,响应结果至客户端。

    注:

    转译期间主要做了两件事情:将JSP网页转译为 Servlet 源代码(.java),此段称为转译时期(Translation time);将Servlet源代码(.java)编译成 Servlet 类(.class),此段称为编译时期(Compilation time)。


    index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
      </head>
      
      <body>
        This is my JSP page. <br>
      </body>
    </html>
    

    在tomcat安装目录\work\Catalina\localhost\项目名称下 会自动产生index_jsp.java和index_jsp.class文件

    package org.apache.jsp;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    import java.util.*;
    
    public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
        implements org.apache.jasper.runtime.JspSourceDependent {
    
      private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
    
      private static java.util.List _jspx_dependants;
    
      private javax.el.ExpressionFactory _el_expressionfactory;
      private org.apache.AnnotationProcessor _jsp_annotationprocessor;
    
      public Object getDependants() {
        return _jspx_dependants;
      }
    
      public void _jspInit() {
        _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
        _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
      }
    
      public void _jspDestroy() {
      }
    
      public void _jspService(HttpServletRequest request, HttpServletResponse response)
            throws java.io.IOException, ServletException {
    
        PageContext pageContext = null;
        HttpSession session = null;
        ServletContext application = null;
        ServletConfig config = null;
        JspWriter out = null;
        Object page = this;
        JspWriter _jspx_out = null;
        PageContext _jspx_page_context = null;
    
    
        try {
          response.setContentType("text/html;charset=ISO-8859-1");
          pageContext = _jspxFactory.getPageContext(this, request, response,
          			null, true, 8192, true);
          _jspx_page_context = pageContext;
          application = pageContext.getServletContext();
          config = pageContext.getServletConfig();
          session = pageContext.getSession();
          out = pageContext.getOut();
          _jspx_out = out;
    
          out.write('\r');
          out.write('\n');
    
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    
          out.write("\r\n");
          out.write("\r\n");
          out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");
          out.write("<html>\r\n");
          out.write("  <head>\r\n");
          out.write("    <base href=\"");
          out.print(basePath);
          out.write("\">\r\n");
          out.write("    \r\n");
          out.write("    <title>My JSP 'index.jsp' starting page</title>\r\n");
          out.write("\t<meta http-equiv=\"pragma\" content=\"no-cache\">\r\n");
          out.write("\t<meta http-equiv=\"cache-control\" content=\"no-cache\">\r\n");
          out.write("\t<meta http-equiv=\"expires\" content=\"0\">    \r\n");
          out.write("\t<meta http-equiv=\"keywords\" content=\"keyword1,keyword2,keyword3\">\r\n");
          out.write("\t<meta http-equiv=\"description\" content=\"This is my page\">\r\n");
          out.write("\t<!--\r\n");
          out.write("\t<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">\r\n");
          out.write("\t-->\r\n");
          out.write("  </head>\r\n");
          out.write("  \r\n");
          out.write("  <body>\r\n");
          out.write("    This is my JSP page. <br>\r\n");
          out.write("  </body>\r\n");
          out.write("</html>\r\n");
        } catch (Throwable t) {
          if (!(t instanceof SkipPageException)){
            out = _jspx_out;
            if (out != null && out.getBufferSize() != 0)
              try { out.clearBuffer(); } catch (java.io.IOException e) {}
            if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
          }
        } finally {
          _jspxFactory.releasePageContext(_jspx_page_context);
        }
      }
    }
    

    jspInit() 执行一次初始化;
    jspService() 进行请求处理;
    jspDestroy() JSP引擎从服务器中删除servlet实例时,会调用jspDestroy();

  • 相关阅读:
    matcaffe的blob维度顺序
    ftp同步代码
    SpringCloud的微服务网关:zuul(实践)
    SpringCloud的微服务网关:zuul(理论)
    SpringCloud的服务消费者 (二):(rest+feign/ribbon)声明式访问注册的微服务
    SpringCloud的服务消费者 (一):(rest+ribbon)访问注册的微服务
    SpringCloud的服务注册中心(二)注册中心服务端和两个微服务应用客户端
    Jetty入门(1-3)Eclipse集成gradle-Gretty插件或maven-jetty插件运行应用
    HTTP协议扫盲(三)HTTP协议的请求头列表和分类描述
    Jetty入门(1-2)eclipse集成jetty插件并发布运行应用
  • 原文地址:https://www.cnblogs.com/xqzt/p/5637240.html
Copyright © 2011-2022 走看看