当前位置: 首页 > news >正文

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 828 华为云征文|华为 Flexus 云服务器搭建 SamWaf 开源轻量级网站防火墙
  • 快速搭建Kubernetes集群
  • SpringBoot3核心特性-核心原理
  • 【已解决】使用JAVA实现递归算法-从自然数中取3个数进行组合之循环算法
  • Vue3教程 - 1 Vue简介
  • JavaScript 网页设计案例详解( 最新技术趋势)
  • linux中怎么一次提交多条命令
  • BiRefNet 教程:基于 PyTorch 实现的双向精细化网络
  • word批量裁剪图片,并调整图片大小,不锁定纵横比
  • 付费电表系统的通用功能和应用过程参考模型(上)
  • 如何使用Optuna在PyTorch中进行超参数优化
  • OpenCV特征检测(12)检测图像中的潜在角点函数preCornerDetect()的使用
  • 网络管理:网络故障排查指南
  • HarmonyOS元服务与卡片
  • iOS 顶级神器,巨魔录音机更新2.1正式版
  • 345-反转字符串中的元音字母
  • flask接收请求并推入栈
  • input实现文字超出省略号功能
  • Mac转Windows的拯救指南
  • node.js
  • nodejs调试方法
  • Promise面试题,控制异步流程
  • scala基础语法(二)
  • Shadow DOM 内部构造及如何构建独立组件
  • TCP拥塞控制
  • Vue 动态创建 component
  • windows下如何用phpstorm同步测试服务器
  • 测试如何在敏捷团队中工作?
  • 初探 Vue 生命周期和钩子函数
  • 基于web的全景—— Pannellum小试
  • 如何在GitHub上创建个人博客
  • 新版博客前端前瞻
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​马来语翻译中文去哪比较好?
  • # 数论-逆元
  • # 职场生活之道:善于团结
  • #QT(QCharts绘制曲线)
  • #传输# #传输数据判断#
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $ git push -u origin master 推送到远程库出错
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (十六)视图变换 正交投影 透视投影
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)Unity3DUnity3D在android下调试
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ./configure,make,make install的作用
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 设计模式初探