<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • jsp轉html靜態頁面(高并發web架構介紹)


    選中Eclipse里創建的jsp文件:

    jsp文件的請求是如何被服務器的JSP容器轉換成靜態網頁的

    test.jsp的源代碼:

    “`jsp

    <%@ page language=”java” contentType=”text/html; charset=UTF-8″

    pageEncoding=”UTF-8″%>

    <!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>

    <html>

    <head>

    <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>

    <title>w3cschool教程 2</title>

    </head>

    <body>

    <%

    out.println(“Hello World 2!”);

    %>

    </body>

    </html>

    “`

    點擊Run As server:

    jsp文件的請求是如何被服務器的JSP容器轉換成靜態網頁的

    在我本機tomcat文件夾的路徑work/catalina/localhost下面,自動生成了一個以JSP項目命名的文件夾jerryjsp:

    jsp文件的請求是如何被服務器的JSP容器轉換成靜態網頁的
    jsp文件的請求是如何被服務器的JSP容器轉換成靜態網頁的

    打開這個自動被Apache Tomcat Jasper組件生成的test_jsp.java文件:

    /*
     * Generated by the Jasper component of Apache Tomcat
     * Version: Apache Tomcat/9.0.29
     * Generated at: 2020-07-15 09:04:14 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.*;
    
    public final class test_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 = null;
      }
    
      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 {
    
        if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
          final java.lang.String _jspx_method = request.getMethod();
          if ("OPTIONS".equals(_jspx_method)) {
            response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
            return;
          }
          if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
            response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
            response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET, POST or HEAD. Jasper also permits 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,
          			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("n");
          out.write("<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">n");
          out.write("<html>n");
          out.write("<head>n");
          out.write("<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">n");
          out.write("<title>w3cschool教程 2</title>n");
          out.write("</head>n");
          out.write("<body>n");
    
        out.println("Hello World 2!");
    
          out.write("n");
          out.write("</body>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);
        }
      }
    }

    終端用戶在瀏覽器里看到的靜態頁面的源代碼:

    jsp文件的請求是如何被服務器的JSP容器轉換成靜態網頁的

    是在這個java文件此處被拼接的:

    jsp文件的請求是如何被服務器的JSP容器轉換成靜態網頁的

    關于對jsp文件的請求是如何被服務器的JSP容器轉換成靜態網頁并發送給瀏覽器,可以參考w3c的jsp教程:
    https://www.w3cschool.cn/jsp/jsp-architecture.html

    網絡服務器需要一個JSP引擎,也就是一個容器來處理JSP頁面。容器負責截獲對JSP頁面的請求。本教程使用內嵌JSP容器的Apache來支持JSP開發。

    JSP容器與Web服務器協同合作,為JSP的正常運行提供必要的運行環境和其他服務,并且能夠正確識別專屬于JSP網頁的特殊元素。

    下圖顯示了JSP容器和JSP文件在Web應用中所處的位置。

    jsp文件的請求是如何被服務器的JSP容器轉換成靜態網頁的

    # JSP處理

    以下步驟表明了Web服務器是如何使用JSP來創建網頁的:

    (1) 就像其他普通的網頁一樣,瀏覽器發送一個HTTP請求給服務器。

    (2) Web服務器識別出這是一個對JSP網頁的請求,并且將該請求傳遞給JSP引擎。通過使用URL或者.jsp文件來完成。

    (3) JSP引擎從磁盤中載入JSP文件,然后將它們轉化為servlet。這種轉化只是簡單地將所有模板文本改用println()語句,并且將所有的JSP元素轉化成Java代碼。

    (4) JSP引擎將servlet編譯成可執行類,并且將原始請求傳遞給servlet引擎。

    (5) Web服務器的某組件將會調用servlet引擎,然后載入并執行servlet類。在執行過程中,servlet產生HTML格式的輸出并將其內嵌于HTTP response中上交給Web服務器。

    (6) Web服務器以靜態HTML網頁的形式將HTTP response返回到您的瀏覽器中。

    (7) 最終,Web瀏覽器處理HTTP response中動態產生的HTML網頁,就好像在處理靜態網頁一樣。

    以上提及到的步驟可以用下圖來表示:

    jsp文件的請求是如何被服務器的JSP容器轉換成靜態網頁的

    一般情況下,JSP引擎會檢查JSP文件對應的servlet是否已經存在,并且檢查JSP文件的修改日期是否早于servlet。如果JSP文件的修改日期早于對應的servlet,那么容器就可以確定JSP文件沒有被修改過并且servlet有效。這使得整個流程與其他腳本語言(比如PHP)相比要高效快捷一些。

    總的來說,JSP網頁就是用另一種方式來編寫servlet而不用成為Java編程高手。除了解釋階段外,JSP網頁幾乎可以被當成一個普通的servlet來對待。

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费