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…