1. 程式人生 > >JSP JSP語法 JSP註釋 JSP指令 JSP九大內建物件 pageContext域物件 JSP動作標籤

JSP JSP語法 JSP註釋 JSP指令 JSP九大內建物件 pageContext域物件 JSP動作標籤

(1)jsp概述

1.1 什麼是jsp

jsp(java Server Pages)是JavaWeb服務端的動態資源,它與html作用是相同的 顯示資料和獲取資料

1.2 jsp的組成

JSP=html+Java指令碼(程式碼片段)+JSP動態資源

(2)JSP語法

2.1 jsp指令碼

jsp指令碼就是Java程式碼片段 分為三種

<%...%> java語句 在標籤當中可以定義Java語句 翻譯後的Java指令碼定義在servler的Service方法當中

<%=...%>java表示式 可以使用它往頁面上輸出內容 翻譯後的變數作為printlin() 或 writer() 方法的引數

<%!...%> java類成員 定義成員變數 方法

2.2 內建物件out(jsp有9大內建物件)

out物件在JSP頁面種無需建立就可以使用,它的作用是向客戶端輸出

<%=…%>out.print()功能是相同的!它們都是向客戶端輸出,例如:

<%=s1%>等同於<% out.print(s1); %> 

<%=”hello”%>等同於<% out.print(“hello”); %>,也等同於直接在頁面中寫hello一樣。

(3)JSP原理

3.1 jsp是特殊的Servlet

JSP本質是一個servlet,當客戶端首次訪問服務端的時候 伺服器會把jsp編譯成servlet 然後再去執行

3.2 jsp真身存放目錄

JSP生成的Servlet存放在${CATALANA}/work目錄下

(4)JSP註釋

jsp當中的註釋 語法 <%--  --%>

jsp當中的註釋在翻譯成.java檔案時會被忽略 (效率高)

也可以在JSP頁面中使用html註釋 <!--  --> ,但這個註釋在.java中存在 而且會被out物件輸出到客戶端 但客戶端瀏覽器不顯示 因為這是html註釋

(5)JSP指令

1.JSP指令概述

jsp指令的格式   <%@ 指令名 attr1="" attr2=""%> 一般都會把jsp指令放在JSP檔案的最上方 但這不是必須的

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

jsp中有三大指令: page include  tiglib  最為常用 最複雜的是page

2.page指令(一)

page指令沒有必須屬性 都是可選屬性 例如 <%@ page%>,沒有給出任何屬性也是可以的

在JSP頁面中,任何指令都可以重複出現

<%@ page language="java"%>

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

<%@ page pageEncoding="utf-8"%>

這也是可以的

在jsp頁面中有4個包內容不需要匯入

java.lang.*

javax.servlet.*

javax.servlet.http.*

javax.servlet.jsp.*

2.1 page指令的pageEncoding 和 contentType

pageEncoding 指定當前jsp頁面的編碼 這個編碼是給伺服器看的 伺服器需要知道當前jsp使用的編碼 不然伺服器無法正確被jsp編譯成.java檔案 所以這個編碼只需要與真實的頁面編碼一致即可

contentType 屬性與response.setContentType()方法的作用相同 它會完成兩項工作 一是設定響應字元流的編碼 二是設定content-type響應頭 例如: <%@ contentType="text/html;charser=utf-8"%>

預設值都為ISO-8859-1 是無法顯示中文的 如果頁面有中文 就要設定這兩個值

兩個只需設定一個即可 當pageEncoding和contentType 只出現一個時 那麼另一個值與出現的值相同

如果兩個都不出現 那麼兩個屬性的值都是ISO-8859-1

2.2page指令的import屬性

方式一 同一個import可以匯入多個包 多個包之間使用逗號間隔

        <%@page impor=”java.net.*,java.util.*,java.sql.*”%>

方式二 使用多個page指令匯入多個包

<%@ pageimport=”java.util.*”%>

<%@ pageimport=”java.net.*”%>

<%@ pageimport=”java.text.*”%>

2.3 page指令的errorPage和isErrorPage

在一個jsp頁面出錯後Tomcat會響應給使用者錯誤資訊(500) 如果不希望Tomcat給使用者輸出錯誤資訊

那麼可以使用page指令的errorPage來指定錯誤頁面!也就是自定義錯誤頁面

例如:<%@ page errorPage="xxx.jsp"%> 這時 在當前jsp頁面出錯時 就會跳轉到xxx.jsp頁面

isErrorPage="true" 預設值為false 設定為true 說明當前頁面為專門處理錯誤頁面 


2.4 還可以在web.xml 中配置錯誤頁面

<error-page>有兩種使用方式

<error-code>指定響應碼</error-code>

<localhost>指定轉發的頁面</localhost>

<exception-type>指定丟擲的異常型別</exception-type>

<localhost>指定轉發頁面</localhost>

這種方式會在控制檯看到異常資訊 而使用page指令時不會在控制檯列印異常資訊

2.5 page指令的isELlgnored

page指令的isELlgnored屬性表示當前jsp頁面是否忽略EL表示式 預設值為false 表示不忽略

2.6 page指令的其他屬性

language:只能是java

info:jsp說明性資訊

isThreadSafe:預設為false 為true時 jsp就只能處理單執行緒的訪問(不允許)

session:預設為true 表示當前jsp頁面可以使用session

extends:指定當前jsp頁面生成的servlet的父類

3 tiglib指令(二)

在jsp頁面使用第三方的標籤庫時 需要使用taglib指令來“導包”

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

其中 prefix表示標籤的字首,這個名稱可以隨意起,uri是第三方標籤庫定義的,所以你要知道第三方定義的uri

4 include指令(三)

include指令表示靜態包含,即目的是把多個jsp合併成一個jsp檔案!

include指令只有一個屬性:file 指定要包含的頁面 例如:<%@ include file="b.jsp"%>

動態包含:request.getRequestDispatcher("/JSP/02.jsp").include(request, response);

靜態包含:當hel.jsp 頁面包含了lo.jsp頁面後,在編譯hel.jsp頁面時,需要把hel.jsp和lo.jsp合併成一個檔案 然後再編譯成Servlet(.java)檔案

<%@ include file="lo.jsp"%>

(6) JSP九大內建物件(面試問題)

1.什麼是jsp九大內建物件

再JSP中無需建立就可以使用的9個物件

request 物件  型別 HttpServletRequest

response物件  型別HttpServletResponse

session物件    型別 HttpSession

application物件  型別 ServletContext

out物件       型別JspWriter

page物件     型別Object

exception物件  型別Throwable

config物件        型別ServletConfig

pageContext物件   型別 PageContext

2.JavaWeb4個域物件

request   作用域  在一個請求鏈裡

session   作用域   在一個會話中

ServletContext  作用域  在整個web應用

pageContext   作用域  在當前頁面

(7)pageContext物件 

1.作用一 域物件功能

pageContext域物件 它的範圍是當前頁面 範圍是4個域物件最小的

方法:  setAttribute(String name,Object value);

            getAttribute(String name);

            removeAttribute(String name);


2.作用二 代理其他域物件功能

還可以使用pageContext來代理其他3個域物件的功能 也就是說可以通過pageContext向其他3個域物件儲存資料

pageContext.setAttribute(String name, Object value, int scope); // 在指定範圍中新增資料


pageContext.getAttribute(String name, int scope);   //獲取指定範圍的資料 


pageContext.removeAttribute(String name, int scope);  //移除指定範圍的資料

pageContext.findAttribute(String nama);   

//依次在pagerequestsessionapplication範圍查詢名稱為name的資料,如果找到就停止查詢 page在範圍優先順序最高


3 作用三 獲取其他內建物件


(8)JSP動作標籤

動作標籤的作用是簡化Java指令碼的

jsp動作標籤是javaWeb內建的動作標籤 可以直接使用

jsp動作標籤的格式 :<jsp:標籤名 ...>

<jsp:include> 動態包含

include動作標籤是在執行級別完成的包含,即當前JSP和被包含的JSP都會各自生成Servlet,然後在執行當前JSPServlet時完成包含另一個JSPServlet。它與RequestDispatcherinclude()方法是相同的!

例如:<jsp:include page="08.jsp"/>

<jsp:forward> 請求轉發

forward標籤的作用是請求轉發!forward標籤的作用與RequestDispatcher#forward()方法相同。

請求轉發:當前頁面內容不會輸出到客戶端 轉發到的頁面會顯示輸出

<jsp:forward>的作用是“別在顯示我,去顯示它吧!”。

例如:<jsp:forward page="09.jsp"/>

<jsp:param> 傳遞引數

<jsp:include page="08.jsp">
     <jsp:param value="xxx" name="username"/>
</jsp:include>