JSP

JSP

1、簡介

  • JSPJava Server Pages)是由Sun Microsystems公司主導創建的一種動態網頁技術標準。

  • JSPJava代碼和特定變動內容嵌入到靜態的頁面中,實現以靜態頁面爲模板,動態生成其中的部分內容。

  • JSP文件在運行時會被其編譯器轉換成更原始的Servlet代碼。JSP編譯器可以把JSP文件編譯成用Java代碼寫的Servlet,然後再由Java編譯器來編譯成能快速執行的二進制機器碼,也可以直接編譯成二進制碼。

2、JSP在運行時轉換的Servlet類

  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
  • index_jsp.java
  • 我的電腦此文件的路徑:C:\Users\73256\.IntelliJIdea2018.2\system\tomcat\Unnamed_javaweb-session-cookie\work\Catalina\localhost\ROOT\org\apache\jsp
package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {

  /*---------------------------------此處部分代碼省略-----------------------------------*/
  //初始化
  public void _jspInit() {
  }
  //銷燬
  public void _jspDestroy() {
  }
  //JSPService
  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, "JSP 只允許 GET、POST 或 HEAD。Jasper 還允許 OPTIONS");
        return;
      }
    }

    final javax.servlet.jsp.PageContext pageContext;//頁面上下文
    javax.servlet.http.HttpSession session = null;//session
    final javax.servlet.ServletContext application;//applicationContext
    final javax.servlet.ServletConfig config;//config
    javax.servlet.jsp.JspWriter out = null;//out
    final java.lang.Object page = this;//page:當前頁面
    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;
        
	  //HTML代碼,會被轉換爲下面的形式。
      out.write("\n");
      out.write("<html>\n");
      out.write("<body>\n");
      out.write("<h2>Hello World!</h2>\n");
      //Java代碼原封不動的轉換
      System.out.println("Hello World!");
      out.write("</body>\n");
      out.write("</html>\n");
    } 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);
    }
  }
}
  • 9大內置對象可在JSP腳本中直接調用
    • pageContext:可以取得任何範圍的參數,保存的數據只在一個頁面中有效
    • request:客戶端的請求,作用域爲一次請求
    • response: 響應
    • session:存數據,保存的數據只在一次會話中有效,即從打開到關閉瀏覽器
    • application:保存的數據在服務器中有效,從打開到關閉服務器
    • config:主要作用是取得服務器的配置信息
    • out :用於在Web瀏覽器內輸出信息
    • page :代表JSP本身
    • exception:顯示異常信息

3、JSP基礎語法

3.1、JSP表達式

  • 作用:用來將程序的結果,輸出到客戶端
  • **格式:<%= 變量或者表達式%>**
  <%= "你好!"%>

3.2、JSP腳本片段

  • 作用:寫Java代碼

  • 格式:<% Java代碼%>

<%
    int sum = 0;
    for (int i = 0; i <=100 ; i++) {
      sum+=i;
    }
    //將sum打印到頁面
    out.println("<h1>Sum="+sum+"</h1>");
%>
  • 腳本片段之間也可嵌入HTML元素
<%
    for (int i = 0; i < 5 ; i++) {
%>
	<h1>Hello World!--=<%=i%></h1>
<%
	}
%>
  • 測試訪問
    在這裏插入圖片描述

3.3、JSP聲明

  • 作用:JSP聲明中的代碼會被編譯到JSP生成的Java類中,即可以使用JSP聲明定義其Java類的成員變量、方法、靜態代碼塊等。

  • 格式:<%! Java代碼 %>

<%!
    static {
        System.out.println("<h1>static代碼塊執行了!</h1>");
    }
    private String name="JSP";
    public String getName(){
        return "<span style=\"font-size: 30px\">"+name+"</span>";
    }
%>

<%
    for (int i = 0; i < 5; i++) {
        out.write(getName());
%>
    <span style="color: red;font-size: 30px">--=<%=i%></span><br>
<%
    }
%>
  • 測試訪問:
    在這裏插入圖片描述

3.4、JSP指令

指令 描述
<%@ page … %> 定義網頁依賴屬性,比如腳本語言、error頁面、緩存需求等等
<%@ include … %> 包含其他文件
<%@ taglib … %> 引入標籤庫的定義
  • 合併網頁
<%--@include 合併三個頁面,形成一個頁面--%>
<%@include file="common/header.jsp"%>
    <h1>網頁主體</h1>
<%@include file="common/footer.jsp"%>
  • index_jsp.java中的代碼
    在這裏插入圖片描述
    在這裏插入圖片描述

3.5、JSP標籤

語法 描述
jsp:include 用於在當前頁面中包含靜態或動態資源
jsp:useBean 尋找和初始化一個JavaBean組件
jsp:setProperty 設置 JavaBean組件的值
jsp:getProperty 將 JavaBean組件的值插入到 output中
jsp:forward 從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象
jsp:plugin 用於在生成的HTML頁面中包含Applet和JavaBean對象
jsp:element 動態創建一個XML元素
jsp:attribute 定義動態創建的XML元素的屬性
jsp:body 定義動態創建的XML元素的主體
jsp:text 用於封裝模板數據
  • 拼接頁面
<jsp:include page="/common/header.jsp"/>
<h1>網頁主體</h1>
<jsp:include page="/common/footer.jsp"/>
  • index_jsp.java中的代碼
    在這裏插入圖片描述
  • 測試訪問
    在這裏插入圖片描述

3.6、EL表達式

  • 格式:${}

  • 作用:獲取數據、執行運算、獲取web開發常用對象

<h1>${"Hello World!"}</h1>
發佈了55 篇原創文章 · 獲贊 31 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章