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

news2024/9/24 4:00:53

文章目录

  • 前言
  • 一、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 display
                Date 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.coloradmin.cn/o/2159215.html

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

相关文章

9.19工作笔记

怎么做多空对冲 脚本2 read_coin选币单币涨跌幅计算单币资金曲线单币资金曲线均值得到周期总体资金曲线周期总体资金曲线得到周期总体涨跌幅周期总体涨跌幅计算得到总体资金曲线 脚本2怎么实现多空对冲的 首先读取factors和periods中的文件&#xff0c;然后read_coin得到结…

Proteus-7.8sp2安装

一、D盘新建空文件夹&#xff0c;名为Proteus。 二、安装软件 1.双击P7.8sp2.exe 2.next 三、破解 1.双击 Proteus Pro 7.8 SP2破解 1.0.exe 2. 升级 打开软件 四、汉化 1.将如下两个文件复制到 D:\Proteus\BIN 路径中 重新打开软件&#xff0c;汉化成功

【在.net6和WPF框架下进行海康SDK开发】(一)如何引用Dll

最近有个上位机项目&#xff0c;需要将海康VisionMaster的部分功能嵌入到统一的界面。项目使用WPFdotNet6开发&#xff0c;UI库使用HandyControl。 先说下需求&#xff0c;在某个TabItem内嵌入一个UserControl&#xff0c;UserContr内嵌入VisionMaster运行界面。 本以为按照海康…

10年计算机考研408-计算机网络

【题33】下列选项中&#xff0c;不属于网络体系结构所描述的内容是&#xff08;&#xff09; A.网络的层次 B.每一层使用的协议 C.协议的内部实现细节 D.每一层必须完成的功能 解析&#xff1a; 本题考查的是网络体系结构相关的概念。 图1描述了网络的7层架构以及每一层所要完成…

智能新突破:AIOT 边缘计算网关让老旧水电表图像识别

数字化高速发展的时代&#xff0c;AIOT&#xff08;人工智能物联网&#xff09;技术正以惊人的速度改变着我们的生活和工作方式。而其中&#xff0c;AIOT 边缘计算网关凭借其强大的功能&#xff0c;成为了推动物联网发展的关键力量。 这款边缘计算网关拥有令人瞩目的 1T POS 算…

某文书网爬虫逆向

一、抓包分析 请求参数和响应数据都有加密 二、逆向分析 老方法、下xhr断点 加密实现逻辑都在这个方法里 执行到这的时候&#xff0c;在向下跟栈数据就已经渲染出来了&#xff0c;说明是在这个方法里进行的解密 解密方法&#xff0c;data.result为加密数据&#xff0c;data.s…

Plant Disease Expert:植物病害数据集(猫脸码客 第197期)

Plant Disease Expert 数据集详细介绍 一、引言 在农业生产的广阔领域中&#xff0c;植物病害始终是一个不可忽视的挑战。它不仅直接威胁到作物的健康生长&#xff0c;还可能导致严重的产量下降&#xff0c;进而影响全球粮食安全和农业经济稳定。据权威机构估计&#xff0c;全…

18 基于51单片机的心率体温监测报警系统(包括程序、仿真、原理图、流程图)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机 ds18B20读取温度&#xff0c; 设置初始心率65 设置温度阈值38 心率阈值60 100 如果超过阈值&#xff0c;蜂鸣器报警&#xff0c;led灯亮 二、硬件资源 基于KEIL5编写C代码&#xf…

栈的操作:进栈,出栈,读栈顶元素

代码&#xff1a; #include<iostream> using namespace std; template<class T> class sq_Stack {private:int mm;int top;T *s;public:sq_Stack(int);void prt_sq_Stack();int flag_sq_Stack();void ins_sq_Stack(T);T del_sq_Stack();T read_sq_Stack(); }; tem…

高等代数笔记(2)————(弱/强)数学归纳法

数学归纳法的引入情景其实很简单&#xff0c;就是多米诺骨牌。 推倒所有多米诺骨牌的关键就是推倒第一块&#xff0c;以及确保第一块倒下后会带动第二块&#xff0c;第二块带动第三块&#xff0c;以此类推&#xff0c;也就是可以递推。由此我们可以归纳出所有的多米诺骨牌都可…

开箱元宇宙| 探索 Great Entertainment Group 如何利用 Web3 和数字创新重新定义活动体验

有没有想过 Web3 等尖端技术是如何改变娱乐行业的&#xff1f;在本期「开箱元宇宙」系列中&#xff0c;我们与 Great Entertainment Group (GEG) 的 Web3 顾问 Rob Lacey 深度访谈&#xff0c;探讨这家充满活力的公司如何在其活动中开拓数字创新。 与我们一起揭示 GEG 如何将 …

力扣 LCR 020 回文子串 -Python

题目链接&#xff1a;LCR 020. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给定一个字符串 s &#xff0c;请计算这个字符串中有多少个回文子字符串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视…

python全栈学习记录(十七)logging、json与pickle、time与datatime、random

logging、json与pickle、time与datatime、random 文章目录 logging、json与pickle、time与datatime、random一、logging二.json与pickle三.time与datatime四.random 一、logging logging模块用来记录日志信息。 import logging # 进行基本的日志配置 logging.basicConfig( fi…

pycharm安装教程,超详细

引言 PyCharm官网提供了两个版本&#xff0c;第一个版本是Professional&#xff08;专业版本&#xff09;&#xff0c;这个版本功能更加强大&#xff0c;主要是为Python和web开发者而准备&#xff0c;是需要付费的。第二个版本是社区版&#xff08;Community&#xff09;&…

Qanything 2 0源码解析系列4 图片解析逻辑

Qanything 2.0源码解析系列4: 图片解析逻辑 文章转载自&#xff1a;https://www.feifeixu.top/article/8bb8401b-9689-453f-ab86-e3ecae414e12 &#x1f600; 前言&#xff1a; 这篇文章介绍Qanything针对图片类型文件的处理逻辑 qanything_kernel/core/retriever/general_doc…

面向对象 vs 面向过程

Java 和 C 语言的区别&#xff1a;面向对象 vs 面向过程 在编程世界中&#xff0c;不同的编程语言承载着不同的编程范式。C 语言作为一门经典的面向过程编程语言&#xff0c;注重函数的调用和操作&#xff1b;而Java则是典型的面向对象编程语言&#xff0c;重视对象与类的设计…

【LLM多模态】Animatediff文生视频大模型

note AnimateDiff框架&#xff1a;核心是一个可插拔的运动模块&#xff0c;它可以从真实世界视频中学习通用的运动先验&#xff0c;并与任何基于相同基础T2I的个性化模型集成&#xff0c;以生成动画。训练策略&#xff1a;AnimateDiff的训练包括三个阶段&#xff1a; 领域适配…

揭秘!高校如何逆袭,在算法与科技竞技场中脱颖而出?

目录 揭秘!高校如何逆袭,在算法与科技竞技场中脱颖而出? 一、算法秘境:深度挖掘,教学相长 二、跨界融合:场景为王,合作共赢 企业和高校之间在:场景,算法,数据,算力的优势,高校优势不明显,仅仅在算法方面存在一些优势但并不明显。高校怎样做 揭秘!高校如何逆袭…

初始docker以及docker的基本使用!!!

文章目录 虚拟化技术Docker/podman 命令通用命令查看docker 当前版本管理docker运行 镜像操作[image]列出本地所有镜像拉取镜像删除镜像把docker中的镜像打包成文件把镜像文件加载到docker中上传镜像 容器操作[container]创建容器docker run的参数选项列出所有容器启动容器停止…

【Mysql】为modified_time和created_time设置默认值

建立表SQL&#xff1a; CREATE TABLE your_table_name (id int(11) NOT NULL AUTO_INCREMENT,/* 其他字段 */created_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT 创建日期,modified_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 修改…