文章目录
- 前言
- 一、JSP 页面是什么?
- 二、JSP 基本语法
- 1.指令标识
- (1)page 指令
- (2)include 指令
- (3)taglib 指令
- 2.脚本标识
- 1.指令标识
- 总结
前言
在进行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 基本语法的部分讲解,本文简单介绍了指令标识和脚本标识的使用,它们的功能还需要我们在实际项目中练习出来。有补充或指正的内容,欢迎在评论区中留言。