JSP 指令标识和脚本标识的使用

文章目录

  • 前言
  • 一、JSP 页面是什么?
  • 二、JSP 基本语法
    • 1.指令标识
      • (1)page 指令
      • (2)include 指令
      • (3)taglib 指令
    • 2.脚本标识
  • 总结

前言

        在进行Java Web 应用开发的过程中,JSP 是必不可少的。因此,我们应该熟练掌握 JSP 的语法。在学习 Java-EE 的过程中,建议选择 idea 进行开发,而不是 Vscode。因为  idea 会自动搭建 maven 并配置好 tomcat。但是在 Vscode 中这些都需要我们亲自动手配置。


一、JSP 页面是什么?

        JSP(Java Server Pages)是一种动态网页技术,可以将Java代码嵌入到HTML页面中,在服务器端生成动态的HTML页面。 

        JSP 页面是指拓展名为 .jsp 的文件。一个 jsp 文件可以包括指令标识、HTML 代码、JavaScript 代码、嵌入的 Java 代码、注释和 JSP 动作标识等内容。

        下面就来列举一个 JSP 页面:

<%@  page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat"%>
<!--以上是指令标识--><html>
<head>
<title>时钟显示网站</title>
</head>
<body>
<%Date date=new Date();SimpleDateFormat df =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = df.format(date);//以上获取到了当地时间
%>当前时间:<%=time%>
</body>
</html>
<!-- 以上是 HTML代码、嵌入的 Java代码、JSP注释-->

        以上就是一个简单的JSP页面代码,有指令标识、HTML代码、嵌入的 Java代码还有 JSP 注解。可以的话还能添加上 JavaScript 代码。

        运行结果:

        

二、JSP 基础语法 

1.指令标识

        指令标识用于设定整个 JSP 页面范围内都有效的相关信息,它是被服务器解释并执行的,不会产生任何输出到网页中。指令标识对于客户端服务器是不可见的。指令标识就相当于给页面添加了id信息,指令标识通常写在JSP文件的开头部分JSP 指令标识的语法如下:

<%@ 指令名 属性1="属性值1" 属性2="属性值2" ...... %>

        指令名:用于指定名称,在 JSP 中包含 page、include 和 taglib 3条指令。

        属性:用于指定属性名称,不同的指令包含不同的属性。在一条指令中,可以设置多个属性,各个属性之间用逗号或者空格分隔。

        属性值:用于指定属性值。

        注意,指令标识的 <@% 和 %> 两个标记是一体的,中间不能用空格分开,指令名和属性是有空格的。

        举一个指令标识的例子:

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

(1)page 指令

        page 是 JSP 页面中最常用的指令,用于定义整个 JSP 页面的相关属性,这些属性在 JSP 被服务器解析成 Servlet 时会转换成相应的 Java 程序代码。page 指令的语法如下:

<%@ page attr1="value1" attr2="value2" ...... %>

         page 指令包含着 15 个属性,也就是 attr 可填的值。下面对常见的属性进行介绍:

        1. language 属性

        该属性用于设置 JSP 页面嵌入的语言,当前支持嵌入 Java、JavaScript、Groovy 语言。如果在指令标识中忽略该属性,默认可嵌入语言为 Java。

        实操:

<%@ page language="java" %>

        2. import 属性

        该属性用于设置 JSP 导入的类包。JSP 页面可以嵌入 Java 代码片段,当这些 Java 代码需要时,可以调用 API 时需要导入相应的类包。

        实操:

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

        3. pageEncoding 属性

        该属性用于定义 JSP 页面的编码格式,也就是指定文件编码。JSP 页面中的所有代码都使用该属性指定的字符集。

        实操:

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

        4. contentType 属性

        该属性用于设置 JSP 页面的 MIME 类型和字符编码,浏览器会据此显示网页内容。如果你的页面出现了中文乱码,那么八成你没有在指令标识中定义该属性,定义值为 UTF-8 基本就解决了。

        实操:

<%@ page contentType="text/html;charset=UTF-8"%>

        JSP 页面的默认编码格式为 ISO-8859-1,该编码格式 不支持中文,会出现中文乱码,必须手动更改该属性为 UTF-8 或者是 GBK 的形式。

        5. session 属性

        该属性指定 JSP 页面是否使用 HTTP 的 session 会话对象。其属性值是 boolean 类型,可选值为 true 和 false。默认值为 true,可以使用 session 会话对象;如果设置为 false,则当前 JSP 页面将无法使用 session 会话对象,那么任何对 session 对象的引用都会发生错误。

        实操:

<%@ page session="false"%>

         session 是 JSP 的内置对象之一。

        6. buffer 属性

        该属性用于设置 JSP 的 out 输出对象使用的缓冲区大小,默认大小为 8KB,且单位只能使用 KB。推荐要使用时设置为 8*n,(n为正整数)作为该属性的属性值。

        实操:

<%@ page buffer="128kb"%>

         out 对象是 JSP 的内置对象之一。

        7. autoFlush 属性

        该属性用于设置 JSP 页面缓存满时,是否自动刷新缓存。默认值为 true;如果设置为 false,则会在缓存满时抛出异常。

        实操:

<%@ page autoFlush="false"%>

        8. isErrorPage 属性

        该属性可以将当前 JSP 页面设置成错误处理页面来处理其他 JSP 页面的错误,称为异常处理。

        实操:

<%@ page isErrorPage="true"%>

        9. errorPage 属性

        该属性用于指定处理当前 JSP 页面异常错误的另一个 JSP 页面,指定的 JSP 错误处理页面必须设置 isErrorPage 属性为 true。errorPage 属性的属性值是一个 url 字符串。

        实操:

<%@ page errorPage="error/loginErrorPage.jsp"%>

        如果设置该属性,那么在 web.xml 文件中定义的任何错误页面都将被忽略,而优先使用该属性定义的错误处理页面。

(2)include 指令

        include 文件包含指令,是 JSP 的另一条指令标识。通过指令可以在一个 JSP 页面中包含另一个 JSP 页面。不过该指令是静态包含,也就是说被包含文件中所有内容会被原样包含到 JSP 页面中,即使被包含文件中有 JSP 代码,在包含时也不会被编译执行。使用 include 指令,最终形成的 JSP 文件,还不能有相同名称的变量。

        include 指令的语法如下:

<%@ include file="path"%>

        不同于 page 指令,include 指令只有一个 file 属性,用于指定要包含文件的路径。路径可以是相对路径,也可以是绝对路径。但是不可以用 <%=%> 表达式所代表的文件。

        使用 include 指令包含文件可以大大提高代码的重用性,而且也便于之后的维护和升级。

实操:创建三个 JSP 文件,一个作为主页面,显示博客内容,另外两个作为主页面的页眉和页码。

        主页面 JSP 代码:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat"%>
<!--以上是指令标识--><html>
<head>
<meta http-equiv="Content-Type" Content="text/html;charset=UTF-8">
<title>展示使用include指令</title>
</head>
<body>
<center>
<%@ include file="start.jsp"%><br>  <!--使用include指令,将start.jsp放置于该jsp文件中-->
<img src="mid.png">
<%@ include file ="end.jsp"%> <>
</center>
</body>
</html>

        页眉 JSP 代码:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<img src="start.png">

        页码 JSP 代码:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%String copyright="版权所有 ©:2024 喵果森森";
%>
<table width="778" height="61" border="0" cellpadding="0"
cellpadding="0"><tr><td><%= copyright%></td><br></tr>
</table>
<img src="end.png">

 运行结果:

        不使用 include 指令标识引入页眉和页码:      

        使用 include 指令标识引入页眉和页码:

         在使用 include 指令进行文件包含时,为了整个页面的层次结构不发生冲突,通常将被包含的子页面中的 <html>、<body>等标记进行删除。因为主页面已经有了这些标签。

(3)taglib 指令

        在 JSP 文件中,可以通过 taglib 指令标识声明页面中所使用的的标签库,同时引用标签库,并指出标签的前缀, 并指定标签的前缀。在页面中引用标签库后,可以通过前缀来引用标签库的标签。taglib 的语法格式如下:

<%@ taglib prefix="tagPrefix" url="tagURL"%>

参数说明:

        prefix:用于指定标签的前缀。该前缀不能命名为 jsp、jspx、java、javax、sun、servlet 和 sunw。

        url:用于指定标签库文件的存放位置。

        实操:

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

        该实例引用了 JSTL 中的核心标签库,以及使用 JSTL 核心标签库的标签的相关内容。 

2.脚本标识

        在 JSP 页面中,脚本标识最为常用。脚本标识可以灵活地生成页面中的动态内容。JSP 脚本标识包括 3 部分,即 JSP 表达式(Expression)、声明标识(Declaration)和脚本程序(Scriptlet)。通过脚本标识,就在 JSP 页面中编写或嵌入 Java 程序了。 

(1)JSP 表达式

        JSP 表达式用于向页面输出信息语法格式如下:

<%= 表达式%>

参数说明:

        <%和=之间不可以有空格,但是=和表达式之间可以有空格。

        实操:使用 JSP 表达式,向 HTML 中输出内容。

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<html>
<head><title>test</title>
</head>
<body><% String manager = "mr"; %>管理员:<%= manager %><br><% boolean power = true; %>是否具有管理器:<%= power ? "是" : "否" %>
</body>
</html>

        运行结果:

        JSP 表达式不仅可以插入页面的文本中,用于输出文本内容,也可以插入 HTML 标记中,用于动态设置属性值。 相当于 java 的 system.out 。

(2)声明标识

                声明标识用于 JSP 页面中定义全局的变量或方法。通过声明标识定义的变量和方法可以被整个 JSP 页面访问,通常使用该标识定义整个 JSP 页面需要引用的变量和方法(通常是 Java 语言)。声明标识的语法如下:

<%! 声明变量或方法的代码%>

        <%与!之间不可以有空格,但是!和后面的代码之间可以有空格。另外,<%!与%>可以不在同一行,如下方代码所示:        

实操: 

<%!int number=0;    //声明全局变量int count(){     //声明全局方法number++;return number;}
%> <%= count()%>    //每次页面刷新,输出值都会+1 

        服务器执行 JSP 页面时,会将 JSP 页面转换为 Servlet 类,在该类中会把使用 JSP 声明标识定义的变量和方法转换为 java 类的成员变量和方法。

(3)代码片段

        代码片段就是在 JSP 页面中嵌入的 Java 代码或者是其他的脚本代码。代码片段将在页面请求的处理期间被执行。通过脚本代码可以应用 JSP 的内置对象在页面输出内容、处理请求和响应、访问 session 会话。语法格式如下:

<% Java代码或者是其他脚本代码 %>

        JSP 表达式负责输出内容到页面上,代码片段负责编写 java或其他脚本代码。

        实操:通过 JSP 页面,显示当前打开页面时的时间。

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<%@ page import="java.util.Date"%>
<%@ page import="java.text.SimpleDateFormat"%>
<html>
<head><title>test</title>
</head>
<body><h1>Current Time:</h1><div id="timeDisplay"><%// Initial time displayDate date = new Date();SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = df.format(date);out.print(time);%></div>
</body>
</html>

        代码片段与声明标识的区别是:通过声明标识创建的是全局的变量和方法,在当前 JSP 页面中有效,它的生命周期是从创建到服务器关闭结束的;而代码片段创建的变量和方法,也是在当前 JSP 页面中有效,但它的生命周期是关闭页面后自动销毁。

        运行结果:       

         由此看出,嵌入 java 代码和直接使用 javaScript 脚本语言之间还有有差别的,需要手动刷新来更新时间。而javaScript 脚本可以轻而易举地显示出实时的时间。在开发网站时,不要死板地使用一个语言进行开发。


总结

        以上就是 JSP 基本语法的部分讲解,本文简单介绍了指令标识和脚本标识的使用,它们的功能还需要我们在实际项目中练习出来。有补充或指正的内容,欢迎在评论区中留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1543351.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

全流程管理的商标管理软件如何实现一站式品牌保护?

如今&#xff0c;企业对于商标管理的需求已不再局限于单一的申请流程&#xff0c;而是扩展到了包括撤三、无效宣告、异议处理、维权行动乃至诉讼解决在内的全业务范畴。面对这一复杂多变的挑战&#xff0c;一款能够灵活应对、全面覆盖的可全业务管理商标管理软件成为了企业品牌…

湖北智彩星科技有限公司:AR共享游乐设备,让快乐加倍升级!

在科技日新月异的今天&#xff0c;娱乐方式正经历着前所未有的变革。湖北智彩星科技有限公司&#xff0c;作为行业内的佼佼者&#xff0c;凭借其创新的AR&#xff08;增强现实&#xff09;共享游乐设备&#xff0c;为大众带来了一场前所未有的娱乐盛宴&#xff0c;让快乐体验实…

在项目管理中,项目进度由哪些要素决定?

在项目管理领域&#xff0c;项目进度受到多种要素的综合影响。以下是一些关键的决定要素&#xff1a; 一、项目范围 1、任务清单 明确的任务清单是项目进度的基础。详细列出项目中需要完成的各项任务&#xff0c;包括任务的先后顺序、并行任务等&#xff0c;直接关系到进度规划…

中国土地利用覆盖和变化数据集(1980-2021)

该数据集通过融合森林资源清查数据和20种遥感土地利用产品&#xff0c;重建生成了1980-2015年中国森林覆盖数据集&#xff0c;空间分辨率为11公里。并且在此基础上进一步获得高精度森林覆被信息和土地利用覆盖数据集相融合&#xff0c;生成了中国1980-2021年土地利用覆盖和变化…

Vue3 + Vite Web项目 Electron 打包桌面应用程序

在根目录下创建 electron 文件夹 创建 electron/main.js 文件&#xff1a; // 导入模块 const { app, BrowserWindow ,Menu } require(electron) const path require(path)// 创建主窗口 const createWindow () > {const mainWindow new BrowserWindow({width: 1440…

RHEL7(RedHat红帽)软件安装教程

目录 1、下载RHEL7镜像 2、安装RedHat7 注&#xff1a;如果以下教程不想看&#xff0c;可以远程控制安装V:OYH-Cx330 【风险告知】 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;本次安装图解是在一个全新的演…

【网络安全】TCP和UDP

一、TCP/UDP对比 1.共同点&#xff1a; 都是工作在TCP/IP体系结构的传输层的协议 工作主要都是把端口号往原始数据封装 在 TCP 协议中&#xff0c;原始数据指的是应用程序产生的需要通过网络进行传输的数据。这些数据可以是各种类型的信息&#xff0c;例如文本、图像、音频、…

【项目】多设计模式下的同步异步日志系统

文章目录 项目介绍开发环境核心技术日志系统介绍为什么需要日志系统日志系统技术实现同步写日志异步写日志 相关技术知识补充不定参函数不定参宏函数的使用C中不定参函数的使用C中不定参函数的使用 设计模式单例模式工厂模式建造者模式代理模式 日志系统框架设计模块划分日志等…

高校大数据实训管理平台怎么选择?

泰迪智能科技大数据实训管理平台分为多个方向包括&#xff1a;人工智能方向、大数据方向、商务数据分析方向&#xff0c;不同高校可以结合高校情况选择合适自己院校的相关产品平台。 高校实训管理平台是实验室模块的核心母平台&#xff0c;对实验室的所有课程及实训资源进行统…

【Linux】手把手教你制作一个简易shell——(进程创建fork进程替换wait与进程等待exec的应用)(自定义shell程序设计)

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

HTTP协议:发展、请求响应、状态码 等

文章目录 HTTP发展历程HTTP请求URL和URIHTTP协议版本HTTP请求方法GET 和 POST 区别HTTP状态码HTTP 请求与响应报文HTTP 请求流程 HTTP 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在…

快速数据检索最佳闪存驱动器恢复下载

当你意识到你的闪存盘丢失了重要文件时&#xff0c;你是否曾有过心脏停跳的时刻&#xff1f;丢失数据可能会毁掉你的一天&#xff0c;并带来很大的压力&#xff0c;无论是重要的工作文件&#xff0c;你喜欢的照片&#xff0c;还是备份你需要保持。好消息是&#xff0c;在闪存驱…

Leetcode 合并区间

我们借助一个辅助链表(元素类型是一维数组)来进行结果统计。 这个算法解决了“合并区间”的问题&#xff0c;具体要求是给定一组区间&#xff08;每个区间有开始和结束位置&#xff09;&#xff0c;如果两个区间有重叠&#xff0c;那么需要将它们合并成一个区间&#xff0c;并…

Cisco Packet Tracer超详细下载安装教程(附中文版插件)

一、安装包下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1RK8iQ9lJG__vBEGCYVYNSA 提取码&#xff1a;1lvb 压缩包解压密码&#xff1a;66668888&#xff0c;不能正常解压的&#xff0c;推荐使用360压缩解压 二、安装教程&#xff1a; 1.双击启动安装包 2.点击N…

使用功率谱密度 (PSD) 表征噪声

传递函数塑造噪声 图 1 显示了假设噪声源的频谱&#xff0c;该噪声源在所有频率下均表现出相同的平均功率&#xff0c;即 &#xff0c;其中 η 是常数。 假设噪声源的频谱。 图 1. 假设噪声源的频谱。 如果我们将此噪声应用于 LTI 系统&#xff0c;系统的传递函数将决定不同…

基于丹摩智算平台-手把手拿下经典目标检测模型 Faster-Rcnn

文章目录 1. 前言1. 1 丹摩智算平台1.2 经典目标检测模型 Faster-Rcnn 2. 前置准备2.1 WindTerm&#xff08;远程连接服务器&#xff09;2.2 项目源码 3. 服务器平台配置3.1 创建实例3.2 远程链接 4. Faster-rcnn 的环境配置4.1 上传文件&#xff0c;解压4.2 安装所需环境 5. 数…

springboot框架VUE3学院网站系统开发mysql数据库设计java编程计算机网页源码maven项目

博主介绍&#xff1a;专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

专业软件测试服务机构介绍:软件确认测试的类型和方法

随着现代科技的迅猛发展&#xff0c;软件开发逐渐成为各类企业发展的核心。然而&#xff0c;软件的质量直接关系到企业的运营效率和用户体验。因此&#xff0c;软件确认测试作为确保软件质量的重要环节&#xff0c;正受到越来越多的关注。 软件确认测试是指在软件开发周期的最…

tensorboard展示不同运行的曲线结果

运行tensorboard曲线如下&#xff1a; tensorboard --logdir .有时候&#xff0c;曲线图会展示多条曲线&#xff0c;以至于我们想分辨哪条线来自哪次训练都做不到了。如下图是设置smoothing-0.6的结果&#xff1a; smoothing可以在页面找到设置按钮&#xff0c;呼出设置侧边…

Llama 3.1 技术研究报告-2

3.3 基础设施、扩展性和效率 我们描述了⽀持Llama 3 405B⼤规模预训练的硬件和基础设施&#xff0c;并讨论了⼏项优化措施&#xff0c;这些措施提⾼了训练效率。 3.3.1 训练基础设施 Llama 1和2模型在Meta的AI研究超级集群&#xff08;Lee和Sengupta&#xff0c;2022&#x…