JSP基本语法
了解JSP页面
在一个 JSP 页面中,可以包括制定标识、HTML 代码、JavaScript 代码、嵌入的 Java 代码、注释和 JSP 动作标识等内容。这些内容并不是一个 JSP 页面所必需的。
指令标识
page指令
这是 JSP 页面最常用的指令,用于定义整个 JSP 页面的相关属性,这些属性在 JSP 被服务器解析成 Servlet 时会转换为相应的 Java 程序代码
language | 用于设置 JSP 使用的语言,目前只支持 a Java 语言,以后可能会支持其他语言,如 C++ 、 C# 等。该属性的默认值为 Java 。 |
import | 用于设置 p jsp 导入的类包。p Jsp 页面可以嵌入 a Java 代码片段,这些 a Java 代码在调用 I API |
contentType |
用于设置 p jsp 页面的 MIME 类型和字符编码,浏览器会据此显示网页内容。默认编码格式为 ISO-8859-1 ,该编码格式是不支持中文 |
autoFlush | 用于设置 p jsp 页面缓存满时,是否自动刷新缓存。默认值为 true ;如果设置为 false |
buffer |
用于设置 p jsp 的 t out 输出对象使用的缓冲区大小,默认大小为 8KB ,且单位只能使用 kb ,建议程序员使用 8 8 的倍数 8 16,32,64,128 等 |
errorPage |
用于指定处理当前 p jsp 页面异常错误的另一个 p jsp 页面,指定的 p jsp 错误错误页面必须设置 e isErrorPage 属性为 true. |
isErrorPage |
通过该属性可以将当前 p jsp 页面设置成错误处理页面来处理另一个 p jsp 页面的错误,也就是异常处理。这意味着当前 p jsp 页面业务的 |
isThreadSafe | 控制从 JSP 页中产生的 t Servlet 是否将实现 l SingleThreadModel 接口。(默认是 true) |
session | 指定 p jsp 页面是否使用 p http 的 的 n session 会话对象。(默认是 true ) |
isELIgnored | 表示是否在此 JSP 页面中 EL 表达式。e true 则忽略,反之 e false 则支持。默认为 false |
info | 定义一个通过 o getServletInfo 方法可以从 t Servlet 中检索到的串 |
extends |
指定为 JSP 页生成的 t Servlet 的超类。格式: <%@ page extends= “ package.class” ” %> |
include指令
文件包含指令 include 是 jsp 的另一条指令标识。通过该指令可以再一个 jsp 页面中包含另一个 jsp 页面。不过该指令是静态包含,也就是说被包含文件中所有内
容会被原样包含到该 jsp 页面中,即使被包含文件中有 jsp 代码,在包含时也不会被编译执行。使用 include 指令,最终将生成一个文件,所以在被包含和包含的文件
中,不能有相同名称的变量。Include 指令包含文件的过程如图所示
说明 使用 include 指令包含文件可以大大提高代码的重用性,而且也便于以后的维护和升级
例子 2 10.2 用 e include 指令包含网站 r Banner 和版本信息栏。
(1 )编写一个名称为 p top.jsp 的文件,用于放置网站的Banner 信息和导航条。这里将Banner 信息和导航设计为一张图片。这样完成top.jsp 文件,只需要在该
页面通过 <img> 标记引入图片即可。top.jsp 文件的具体代码如下:
(2 )编写一个名称为 copyright.jsp 的文件,用于放置网站的版权信息。 Copyright.jsp 文件的具体代码如下:
(3 )创建一个名称为 p index.jsp 的文件,在该页面中包括top.jsp 和 copyright.jsp 文件,从而实 一 完整的页面。
效果图
taglib指令
在 JSP 文件中,可以通过 taglib 指令标识声明该页面中所使用的标签库,同时引用标签库,并指定标签的前缀。在页面中,引用标签库后,就可以通过前缀来引
用标签库中的标签。taglib 指令的语法格式如下:
<%@ taglib prefix="tagPrefix" uri="tagURI" %>
参数说明:
1.prefix:用于指定标签的前缀。该前缀不能命名为 jsp,jspx,java,javax,sum,servlet 和 sunw,.
2.uri:用于指定标签库文件的存放位置。
例如:在页面中引用 JSTL 中的核心标签库。 <%@taglib prefix=”c” uri=”http:java.sun.com/jsp/jstl/core”%>
脚本标识
在 jsp 页面中,脚本标识使用得最为频繁。因为它们能够很方便、灵活的生成页面中的动态内容,特别是 Scriptlet 脚本程序。JSP 中的脚本标识包括 3 部分,即
jsp 表达式、声明标识和脚本程序。通过这些标识,在 jsp 页面中可以像编写 Java 程序一样声明变了、定义函数或进行各种表达式的运算。
代码片段
所谓代码片段就是在 JSP 页面中嵌入的 Java 代码或是脚本代码。代码片段将在页面请求的处理期间被执行,通过 Java 代码可以定义变量或是流程控制语句等;
而通过脚本代码可以应用 JSP 的内置对象在页面输出内容、处理请求和响应、访问 session 会话等。代码片段的语法格式如下:
<% Java 代码或是脚本代码 %>
代码片段的使用比较灵活,它所实现的功能是 jsp 表达式无法实现的。
例:
JSP表达式
JSP 表达式用于向页面中输出信息,其语法格式如下: <% = 表达式%>。表达式:可以是任何 Java 语言的完整表达式。该表达式的最终运算结果将被转换为
字符串。
注意:<%与=之间不可以有空格,但是=与其后面的表达式之间可以有空格>
例:
说明
Jsp 表达式不仅可以插入到网页的文本中,用于输出文本内容。也可以插入到 HTML 标记中,用于动态设置属性值
声明标识
声明标识用于在 JSP 页面中定义全局的变量或方法。通过声明标识定义的变量和方法可以被整个 JSP 页面访问,所以通常使用该标识定义整个 JSP 页面都需要引
用的变量或方法。
说明:
服务器执行 sql 页面时,会将 jsp 页面转换为 Servlet 类,在该类中会把使用 jsp 声明标识定义的变量和方法转换为类的成员变量和方法。
声明标识的语法格式如下:
<%! 声明变量或方法的代码 %>
注意:
<%与!之间不可以有空格,但是!其后面的代码之间可以有空格。另外,<%!与%>可以不在同一行。
例:
通过上面的代码声明全局变量和全局方法后,在后面如果通过<%=count()%>调用全局方法,则每次刷新页面,都会输出前一次值+1 的值。
说明:
代码片段与声明标识的区别是,通过声明标识创建的变量和方法,在当前 jsp 页面中有效,它的生命周期是从创建开始到服务器关闭结束;而代码片段创建的变
量或方法,也是在当前 jsp 页面中有效,但它的生命周期是页面关闭后,就是被销毁。即声明标识与代码片段的存活周期不同
JSP注释
由于 jsp 页面由 HTML、jsp、Java 脚本等组成,所以在其中可以使用多种注释格式
HTML中的注释
HTML 语言的注释不会被显示在网页中,但是在浏览器中选择查看网页源代码时,还是能够看到注释信息的。语法:<!-- 注释文本 -->
带有JSP表达式的注释
在 JSP 页面中可以嵌入代码片段,在代码片段中也可加入注释。在代码片段中加入的注释同 Java 的注释相同,同样也是包括以下 3 种情况。
1、单行注释 // 注释
2、多行注释 /* 注释 */
3、文档注释 /** 注释 */
隐藏注释
通过在文档中添加的 HTML 注释虽然在浏览器中不显示,但是可以通过查看源代码看到这些注释信息。所以严格来说,这种注释是不安全的。不过 JSP 还提供
了一种隐藏注释,这种注释不仅在浏览器中看不到,而且在查看 HTML 源代码时,也看不到,所以这种注释的安全性比较高。
隐藏注释的语法格式如下:<%-- 注释内容 --%>
说明:
Jsp 编译时会忽略掉隐藏注释,即使有错误,也不影响程序的运行。
动态注释
由于 HTML 注释对 JSP 嵌入的代码不起作用,因此可以利用它们的组合构成动态的 HTML 注释文本。在 JSP 页面中添加动态注释。示例代码如下:
<!-- <%=new Date()% -->
动态标识
包含文件标识
Jsp 的动作标识<jsp:include>用于向当前包含其他的文件。被包含的文件可以是动态文件,也可以是静态文件。<jsp:include>动作标识包含文件的过程如图所
示
<jsp:include>动作标识的语法格式如下:
<jsp:include page=”url” flush=”false|true”>
子动作标识<jsp:param>
</jsp:include>
参数说明:
1.page:用于指定被包含文件的相对路径。例如,指定属性值为 top.jsp.则标识包含的是与当前 jsp 文件相同文件夹中的 topjsp 文件包含到当前 jsp 页面中。
2.Flush:可选属性,用于设置是否刷新缓冲区。默认值为 false,如果设置为 true,在当前页面输出使用了缓冲区的情况下,先刷新缓冲区,然后再执行包含工作。
3.子动作标识<jsp:param>:用于向被包含的动态页面中传递参数
说明:
<jsp:include>标识对包含的动态文件和静态文件的处理方式是不同的,如果被包含的是静态的文件,则页面执行后,在使用了该标识的位置将会输出这个文
件的内容。如果<jsp:include>标识包含的是一个动态文件,那么 jsp 编译器将编译并执行这个文件。<jsp:include>标识会识别出文件的类型,而不是通过文件的名称来
判断该文件时静态的还是动态的
例子:
(1)top.jsp
(2)copyright.jsp
(3)index.jsp
<include>指令与<jsp:include>指令的区别:
(1)include 指令通过 file 属性指定被包含的文件,并且 file 属性不支持任何表达式;<jsp:include>动作标识通过 page 属性指定被包含的文件,而且 page 属性支
持 jsp 表达式。
(2)使用 include 指令时,被包含的文件内容会原封不动地插入到包含页中,然后 jsp 编译器再将合成后的文件最终编译成一个 Java 文件;使用<jsp:include>动
作标识包含文件时,当该标识被执行时,程序会将请求转发(注意是转发不是请求重定向)到被包含的页面,并将执行结果输出到浏览器中,然后返回包含页继续执
行后面的代码。因为服务器执行的是多个文件,所以 jsp 编译器会分别对这些文件进行编译。
(3)在应用 include 指令包含文件时,由于被包含的文件最终会生成一个文件,所以在被包含文件,包含文件中不能有重名的变量或方法;而在应用<
jsp:include>动作标识包含文件时,由于每个文件时单独编译的,所以在被包含文件和包含文件中重名的变量和方法是不相冲突的。
请求转发标识
通过<jsp:forward>动作标识可以将请求转发到其他的 web 资源。流程图如下:
<jsp:forward>动作标识语法格式如下:
<jsp:forward page=”url”>
或
<jsp:forward page=”url”>
子动作标识<jsp:param>
</jsp:forward>
参数说明:
(1)page: 用于指定请求转发的目标页面。该属性值可以是一个指定文件路径的字符串,也可以是表示文件路径的 jsp 表达式。但是请求被转向的目标文件必须是
内部的资源,即当前应用中的资源。
(2)子动作标识<jsp:param>:用于向转向的目标文件中传递参数。
例子:
(1)index.jsp 主要代码
(2)login.jsp 主要代码
传递参数标识
JSP 的动作标识<jsp:param>可以作为其他标识的子标识,用于为其他标识传递参数。
语法格式如下:
<jsp:param name="参数名" value="参数值" />
参数说明:
(1)name: 用于指定参数名称
(2)value: 用于设置对应的参数值。
例子:
1 <jsp:forward page=”modify.jsp”> 2 <jsp:param name=”userId” value=”7” /> 3 </jsp:forward>
在上面的代码中,实现了在请求转发到 modify.jsp 页面的同时,传递了参数 userId,期参数值为 7