1. 程式人生 > >JSP的3指令6動作9物件4大域

JSP的3指令6動作9物件4大域

jsp的3個指令

  • JSP指令(directive)是為JSP引擎而設計的,它們並不直接產生任何可見輸出,而只是告訴引擎如何處理JSP頁面中的其餘部分。 在JSP 2.0規範中共定義了三個指令:page指令Include指令taglib指令

  • 語法:

    • <%@ 指令名稱 屬性1=“屬性值1” 屬性2=“屬性值2”。。。%> 或者:
    • <%@ 指令名稱 屬性1=“屬性值1”%>
    • <%@ 指令名稱 屬性2=“屬性值2”%>

      • <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

      • <%@ page language="java" %>

      • <%@ page import="java.util.*" %>

1、page:

  • 作用:用於定義JSP頁面的各種屬性
  • 屬性:

    • 1.1、 import 和java程式碼中的import是一樣的
    • <%@ page import="java.util.Date,java.util.List"%>
      或者:
      <%@ page import="java.util.Date"%>
      <%@ page import="java.util.List"%>
      JSP會自動匯入以下的包:
      import java.lang.*;
      import javax.servlet.*;
      import javax.servlet.http.*;
      import javax.servlet.jsp.*;
      
    • 1.2、 session: 是否會自動建立session物件。預設值是true;
    • 1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter輸出字元流。設定。輸出資料的快取大小,預設是8kb.
    • 1.4 errorPage: 如果頁面中有錯誤,則跳轉到指定的資源。
    • errorPage="/uri" 如果寫“/”則代表當前應用的目錄下,絕對路徑。
      如果不寫“/”則代表相對路徑。
      
    • 1.5、 isErrorPage: 是否建立throwable物件。預設是false;
    • 1.6、 contextType: 等同於response.setCotntextType("text/html;charset=utf-8");
    • 1.7、 pageEncoding: 告訴JSP引擎要翻譯的檔案使用的編碼。
    • 1.8、 isELIgnored: 是否支援EL表示式。 預設是false

      <%@ page  pageEncoding="gbk" %>
      

2、include:

  • 靜態包含:把其它資源包含到當前頁面中。 <%@ include file="/include/header.jsp" %>
  • 動態包含: <jsp:include page="/include/header.jsp"></jsp:include>

  • 兩者的區別:翻譯的時間段不同

    • 前者:在翻譯時就把兩個檔案合併
    • 後者:不會合並檔案,當代碼執行到include時,才包含另一個檔案的內容。
  • 原則:能用靜的就不用動的。

3、taglib

  • 作用:在JSP頁面中匯入JSTL標籤庫。替換jsp中的java程式碼片段。

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

jsp的6個動作

  • 使用標籤的形式來表示一段java程式碼。 如: <jsp:include page="2.jsp"></jsp:include>

    <jsp:include > 動態包含
    <jsp:forward> 請求轉發
    <jsp:param> 設定請求引數
    <jsp:useBean> 建立一個物件
    <jsp:setProperty> 給指定的物件屬性賦值
    <jsp:getProperty> 取出指定物件的屬性值
    

jsp的9個內建物件

  • 指在JSP的<%=%> 和<% %>中可以直接使用的物件

    物件名 型別 說明

    request javax.servlet.http.HttpServletRequest   
    response    javax.servlet.http.HttpServletResponse  
    session javax.servlet.http.HttpSession  由session="true"開關
    application javax.servlet.ServletContext    
    exception   java.lang.Throwable 由isErrorPage="false"開關
    page    java.lang.Object當前物件this    當前servlet例項
    config  javax.servlet.ServletConfig 
    out  javax.servlet.jsp.JspWriter    字元輸出流,相當於 printWriter物件
    pageContext  javax.servlet.jsp.PageContext  
    
  • pageContext(重要)

    • 1、本身也是一個域物件:它可以操作其它三個域物件(request session application)的資料

      void setAttribute(String name,Object o);
      Object getAttribute(String name);
      void removeAttribute(String name);
      操作其它域物件的方法
      void setAttribute(String name,Object o,int Scope);
      Object getAttribute(String name,int Scope);
      void removeAttribute(String name,int Scope);
      scpoe的值:
      PageContext.PAGE_SCOPE 
      PageContext.REQUEST_SCOPE 
      PageContext.SESSION_SCOPE 
      PageContext.APPLICATION_SCOPE
      
      findAttribute(String name); 自動從page request session application依次查詢,找到了就取值,結束查詢。
      
    • 2、它可以建立其它的8個隱式物件

      在普通類中可以通過PageContext獲取其他JSP隱式物件。自定義標籤時就使用。
      

    3、提供了的簡易方法

        pageContext.forward("2.jsp");
        pageContext.include("2.jsp"); 
    

四大域物件:實際開發

  • PageContext : pageConext 存放的資料在當前頁面有效。開發時使用較少。
  • ServletRequest: request 存放的資料在一次請求(轉發)內有效。使用非常多。
  • HttpSession: session 存放的資料在一次會話中有效。使用的比較多。如:存放使用者的登入資訊,購物車功能。
  • ServletContext: application 存放的資料在整個應用範圍內都有效。因為範圍太大,應儘量少