JSP程序設計之JSP指令

1、JSP指令概念與分類

(1)概念

JSP指令相當于在編譯期間的命令,用來設置與整個JSP頁面相關的屬性,它并不直接產生任何可見的輸出,用來設置全局變量、聲明類、要實現的方法和輸出內容的類型等。在JSP文件被解析為Java文件時,Web容器會將它們翻譯為對應的Java代碼,在JSP頁面轉Servlet類過程中起作用,影響由JSP頁面生成的Servlet類的整體結構。例如,通過page指令可以設置JSP的腳本語言、設置JSP的編碼格式、在JSP中引入其他的Java類或者Java包,通過include指令引入其他的Java代碼段等

(2)分類

JSP中主要包含3種指令,分別為page指令、include指令和taglib指令,如圖所示。

在這里插入圖片描述

JSP 指令的語法如下。

寫法一:

<%@ 指令名稱 屬性1=“屬性值1” 屬性2=“屬性值2” … 屬性n=“屬性值n”%>

寫法二:

<%@ 指令名稱 屬性1=“屬性值1”%> <%@ 指令名稱 屬性2=“屬性值2”%><%@ 指令名稱 屬性n=“屬性值n”%>

說明:屬性值兩邊的雙引號可以替換為單引號,但引號標記不能完全省略。如果要在屬性值中使用引號,則要在它們之前添加反斜杠,即“\”符號。

2、page指令

(1)page指令概念

page指令即頁面指令,用來定義整個JSP頁面的一些屬性和這些屬性的值。page指令的屬性可以定義MIME類型、定義需要導入的包、錯誤頁的指定、頁面編碼、腳本語言等。page指令格式如下。

用一個page指令指定多個屬性的值。

<%@ page 屬性1= “屬性1的值” 屬性2= “屬性2的值” ……%>

用多個page指令為每個屬性指定值。

<%@ page 屬性1= “屬性1的值” %>

<%@ page 屬性2= “屬性2的值” %>

……

<%@ page 屬性n= “屬性n的值” %>

page指令的作用對整個JSP頁面有效,與其書寫位置無關,可以放在文檔中的任何地方,但通常把page指令寫在JSP頁面的最前面。

page 指令中除import屬性外,其他屬性只能在指令中出現一次。page指令有如下屬性(大小寫敏感),每個屬性完成的功能不同。

按照使用的頻率列出:import、contentType、pageEncoding、session、isELIgnored(只限JSP 2.0)、buffer、autoFlush、info、errorPage、isErrorPage、isThreadSafe、language 和 extends。

page指令每個屬性的作用和默認取值如圖所示。

屬性名作用舉例說明默認值
import該屬性的作用是為 JSP 頁面引入 Java 核心包中的類,可以為該屬性指定多個值,值以逗號分隔,就像在通常的 Java 代碼中所使用的 import 語句<%@ page import="java.util.*, cn.foooldfat.*" %>
contentType定義 JSP 的字符編碼方式和 JSP 頁面響應的 MIME 類型<%@ page contentType="application/vnd.ms-excel" %>text/html;charset=iso-8859-1
pageEncodingJSP 頁面的字符編碼<%@ page pageEncoding="GBK" %>"iso-8859-1"
session控制頁面是否參與 HTTP 會話<%@ page session="true" %>"true"
isELIgnored忽略(true)JSP 2.0 表達式語言(EL),還是進行正常的求值(false)<%@ page isELIgnored="true" %>true 或 false(依賴于 Web 應用的 web.xml 版本)
buffer指定 out 變量(類型為 JspWriter)使用的緩沖區的大小<%@ page buffer="none" %>"8KB"
autoFlush設置頁面緩存滿時是否自動刷新緩存(默認 true;false 時拋異常)<%@ page autoFlush="true" %>"true"
info定義可在 servlet 中通過 getServletInfo 方法獲取的字符串<%@ page info="Some Message" %>
errorPage指定處理當前頁面未捕獲異常的 JSP 頁面(異常類型為 Throwable)<%@ page errorPage="Relative URL" %>
isErrorPage表示當前頁是否可作為其他 JSP 頁面的錯誤頁面<%@ page isErrorPage="false" %>false
isThreadSafe控制 JSP 生成的 servlet 是并行訪問(默認)還是單線程訪問<%@ page isThreadSafe="true" %>true
extends指定 JSP 生成的 servlet 的超類<%@ page extends="package.class" %>
language指定頁面使用的腳本語言<%@ page language="java" %>java

(2)實例:page指令應用

(1)實例一:在登錄login.jsp頁面中,首行代碼如下,請思考其作用。

<%@ page language="java" pageEncoding="UTF-8"%>

通過page指令來設定JSP頁面的腳本語言為Java,頁面的編碼格式為“UTF-8”。

(2)實例二:在某個JSP頁面中,首行代碼如下,請思考import屬性的作用和用法。

<%@ page language="java" import="java.util.*,com.inspur.vo.person" pageEncoding="UTF-8"%>

通過page指令的import屬性來引入java.util包和com.inspur.vo.person類,在該JSP頁面中可以直接使用java.util包和所有的類或者接口,以及com.inspur.vo.person類。

當然,上面的代碼也可以修改為:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="java.util.*,com.inspur.vo.person"%>

或者

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<%@ page import="com.inspur.vo.person"%>

3、include指令

(1)include 指令概念

include 指令用于在JSP頁面靜態插入一個文件,被插入的文件可以是JSP頁面、HTML頁面、文本文件或一段Java代碼。使用了include指令的JSP頁面在轉換成Java文件時,將被插入的文件在當前JSP頁面該指令的位置做整體的插入,合并成一個新的JSP頁面,然后JSP引擎再將這個新的JSP頁面轉譯成Java文件。因此,必須保證插入文件后形成的新的JSP頁面符合JSP語法和邏輯規則。include指令格式如下。

<%@ include file = "文件名"%>

include指令特點如下。

include 指令稱為靜態包含(在編譯之前已經做了處理),即先將要包含的文件信息嵌入相應的JSP頁面,再統一轉換成一個servlet類。

include指令不能傳參數。

使用include指令時,包含頁面和被包含頁面訪問的是同一個request內嵌對象。

(2)實例:include指令應用

在界面includeDemo02.jsp中,利用include指令引入top.jsp和bottom.jsp。

includeDemo02.jsp如下。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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>案例</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><%@ include file="top.jsp" %><br>主界面<br><%@ include file="bottom.jsp" %><br></body>
</html>

在這里插入圖片描述

4、taglib指令

taglib 指令的作用是在JSP頁面中,將標簽描述符文件(tld文件)引入該頁面中,設置前綴,并利用標簽的前綴去使用標簽描述符文件(tld文件)中的標簽。

其中,tld文件是一個符合規范的XML文件,它描述一個或者更多標簽和它們的屬性。將這個文件放置在WEB-INF目錄中,放置該文件的目的是指定關于標簽處理程序的類名和標簽允許的屬性,可以提供標簽庫中類和JSP中對標簽引用的映射關系。

taglib指令格式如下。

<%@taglib uri=“標簽描述符文件” prefix=“前綴名” %>

其中,uri 屬性用來指定標簽庫的存放位置,prefix 屬性用來指定該標簽庫使用的前綴。當把某個標簽庫引入JSP文件時,<%@ taglib prefix=“c” uri=“myjstl”%>中的uri有兩種寫法。

(1)自定義

自定義可以為uri屬性值設定一個有個性的名字,但這樣做的后果就是編譯器會找不到所用的標簽描述符文件,從而找不到這個標簽的功能支持類,導致標簽無法正常工作。

如果使用了自定義uri的話,就需要在該工程的web.xml下加入如下信息,這樣編譯器就能通過這座“橋”找到對應的tld文件了。

<jsp-config><taglib>  <taglib-uri>myjstl</taglib-uri>  <taglib-location>/WEB-INF/tld/c.tld</taglib-location> </taglib>
</jsp-config>

(2)標準定義

標準定義設定的uri值需要和標簽描述符文件中uri節點的文本信息一致。當打開一個標簽描述符文件時,在文件的頭部會有一個節點,里面的內容即為uri的標準定義。使用標準定義的優點在于不用在web.xml中加入上面的代碼。假如在JSP頁面中使用JSTL中的核心標簽庫,則需要在JSP頁面中使用taglib指令引入標簽描述符文件(c.tld),下面的代碼uri是標準定義。

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

(3)實例:taglib指令應用

JSP標準標簽庫(JSP Standard Tag Library,JSTL)中核心標簽庫out標簽的使用案例。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>My JSP 'outDemo01.jsp' starting page</title></head><body><c:out value="Hello JSP 2.0 !! " /> <br/></body>
</html>

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97659.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Generative Art with p5.js: Creating Beauty from Code

Are you ready to make something truly beautiful with p5.js? Forget about boring bar charts and sales data—let’s create art that moves, breathes, and responds to your touch. We’re going to explore generative art, where code becomes your paintbrush and a…

Wi-Fi技術——網絡安全

一、數據幀的安全 1、無線網絡安全的發展 理論上無線電波范圍內的任何一個站點都可以監聽并登錄無線網絡&#xff0c;所有發送或接收的數據&#xff0c;都有可能被截取&#xff0c;因此無線網絡安全十分重要。 原始802.11的安全策略為WEP&#xff0c;其存在根本性的漏洞&#x…

Java提供高效后端支撐,Vue呈現直觀交互界面,共同打造的MES管理系統,含完整可運行源碼,實現生產計劃、執行、追溯一站式管理,提升制造執行效率

前言在當今競爭激烈的制造業環境中&#xff0c;企業面臨著提高生產效率、降低成本、保證產品質量以及快速響應市場變化等多重挑戰。制造執行系統&#xff08;MES&#xff0c;Manufacturing Execution System&#xff09;作為連接企業上層計劃管理系統&#xff08;如ERP&#xf…

【macOS】垃圾箱中文件無法清理的常規方法

【macOS】垃圾箱中文件無法清理的方法如果外接 SSD 移動盤上的垃圾文件無法刪除&#xff0c; 可能是由于文件系統格式不兼容、文件被占用、權限不足等原因導致的&#xff0c; 以下是一些常見的解決方法&#xff1a;檢查移動硬盤文件系統格式&#xff1a;如果移動硬盤是 NTFS 格…

鴻蒙ArkTS 核心篇-15-條件渲染(組件)

目錄 根據邏輯條件結果&#xff0c;渲染不同的 UI 內容 DevEco Studio代碼實戰 預覽效果 總結 根據邏輯條件結果&#xff0c;渲染不同的 UI 內容 DevEco Studio代碼實戰 let num: number 20Entry Component struct Index {build() {Column() {if (num 1) {Text(文本 1)} …

大模型微調顯存內存節約方法

大模型微調時節約顯存和內存是一個至關重要的話題&#xff0c;尤其是在消費級GPU&#xff08;如RTX 3090/4090&#xff09;或資源有限的云實例上。下面我將從顯存&#xff08;GPU Memory&#xff09; 和內存&#xff08;CPU Memory&#xff09; 兩個方面&#xff0c;為你系統地…

Linux筆記12——shell編程基礎-6

字符截取命令一、cut命令功能&#xff1a;用于從文件或標準輸入中提取指定字段或列語法&#xff1a;cut [選項] 文件名-f&#xff1a;列號&#xff0c;提取第幾列&#xff0c;默認識別制表符分割出來的列&#xff08;列號之間用,隔開&#xff09;-d&#xff1a;分隔符&#xff…

高效瀏覽器標簽頁管理:Chrome擴展開發完全指南

Hi&#xff0c;我是前端人類學&#xff08;之前叫布蘭妮甜&#xff09;&#xff01; 在信息過載的時代&#xff0c;瀏覽器標簽頁管理已成為提高工作效率的關鍵技能。本文將介紹如何開發一個功能完整的Chrome擴展&#xff0c;幫助用戶高效管理瀏覽器標簽頁&#xff0c;并探討其實…

從 WPF 到 Avalonia 的遷移系列實戰篇3:ResourceDictionary資源與樣式的差異與遷移技巧

從 WPF 到 Avalonia 的遷移系列實戰篇3:ResourceDictionary資源與樣式的差異與遷移技巧 我的GitHub倉庫Avalonia學習項目包含完整的Avalonia實踐案例與代碼對比。 我的gitcode倉庫是Avalonia學習項目。 文中主要示例代碼均可在倉庫中查看&#xff0c;涵蓋核心功能實現與優化方案…

基于Springboot的音樂媒體播放及周邊產品運營平臺(有報告)。Javaee項目,springboot項目。

演示視頻&#xff1a; 基于Springboot的音樂媒體播放及周邊產品運營平臺&#xff08;有報告&#xff09;。Javaee項目&#xff0c;springboot項目。項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

【項目思維】嵌入式產業鏈與技術生態

這篇文章深入解析嵌入式產業鏈與技術生態上下游關系&#xff0c;輔助建立嵌入式工程師職業發展認知。嵌入式行業并不是“寫單片機程序”那么簡單&#xff0c;而是一個 從芯片設計到系統集成再到最終產品落地 的復雜生態鏈。理解上下游價值鏈&#xff0c;有助于你成為系統型工程…

機器學習(講解)

一、引言&#xff1a;什么是監督學習&#xff1f;監督學習&#xff08;Supervised Learning&#xff09;是機器學習中最基礎且應用最廣泛的范式之一。其核心思想是利用已標記的數據&#xff08;即輸入-輸出對&#xff09;訓練模型&#xff0c;使其能夠對新的、未標記的數據進行…

使用 Bright Data Web Scraper API + Python 高效抓取 Glassdoor 數據:從配置到結構化輸出全流程實戰

使用 Bright Data Web Scraper API Python 高效抓取 Glassdoor 數據&#xff1a;從配置到結構化輸出全流程實戰 摘要 本文詳細介紹了如何使用 Bright Data 的 Web Scraper API 搭配 Python&#xff0c;實現對 Glassdoor 平臺信息的高效抓取。通過 API 請求構建器、反爬機制集成…

Burgan Bank Türkiye 如何借助 Elastic 改造可觀測性和安全性

作者&#xff1a;來自 Elastic Jon Ashley, Ido Friedman, Burak Dz Burgan Bank Trkiye Burgan Bank K.P.S.C. 是科威特項目公司 (KIPCO) 集團的子公司&#xff0c;成立于 1977 年&#xff0c;是中東和北非 (MENA) 地區最大的控股集團和重要銀行集團之一。 該銀行作為客戶的解…

LeetCode 165. 比較版本號 - 優雅Java解決方案

文章目錄LeetCode 165. 比較版本號 - 優雅Java解決方案題目描述示例分析示例 1示例 2示例 3算法思路Java實現方案方案一&#xff1a;雙指針法&#xff08;推薦&#xff09;方案二&#xff1a;優化的單次遍歷法可視化執行過程示例&#xff1a;compareVersion("1.2", &…

基于Kubernetes StatefulSet的有狀態微服務部署與持久化存儲實踐經驗分享

基于Kubernetes StatefulSet的有狀態微服務部署與持久化存儲實踐經驗分享 在傳統微服務架構中&#xff0c;大多數服務都是無狀態的&#xff08;Stateless&#xff09;&#xff0c;可以通過 Deployment、ReplicaSet 等控制器實現水平自動擴縮容。但在生產環境中&#xff0c;仍有…

MySQL編程開發

變量系統變量&#xff1a;MySQL內置變量#查看所有系統變量show variables \G;#通過模糊查詢篩選變量show variables like “%path%”;全局變量&#xff1a;在所有終端中都生效&#xff1b;會話變量&#xff1a;在當前會話&#xff08;本次登錄&#xff09;&#xff1b;#可以通過…

20250830_Oracle 19c CDB+PDB(QMS)默認表空間、臨時表空間、歸檔日志、閃回恢復區巡檢手冊

PDB 關業務,CDB 管底層;每天緊盯 PDB,必要時看 CDB。 一、CDB 與 PDB 的關系 Oracle 12c 以后引入 多租戶架構(Multitenant),分成兩類容器: 層級 名稱 作用 存儲內容 典型操作 CDB CDB$ROOT(容器數據庫) 數據庫實例的根容器 Oracle 元數據、系統表字典、公共用戶、PDB…

什么是MIPS架構?RISC-V架構?有什么區別?【超詳細初學者教程】

什么是MIPS架構&#xff1f;RISC-V架構&#xff1f;有什么區別&#xff1f;【超詳細初學者教程】 關鍵詞&#xff1a;MIPS架構&#xff0c;RISC-V架構&#xff0c;精簡指令集RISC&#xff0c;嵌入式系統&#xff0c;CPU架構對比&#xff0c;指令集架構&#xff0c;開源處理器&…

IDEA Spring屬性注解依賴注入的警告 Field injection is not recommended 異常解決方案

一、異常錯誤 在使用 IntelliJ IDEA 進行 Spring 開發時&#xff0c;當使用 Autowired 注解直接在字段上進行依賴注入時&#xff0c;IDE 會顯示黃色警告&#xff1a; Field injection is not recommended這個警告出現在以下代碼模式中&#xff1a; Service public class UserSe…