JSP 基本语法
JSP 运行平台
- Caucho 公司的 Resin 平台
- Apache 公司的 Tomcat 平台
- BEA 公司的 WebLogic 平台
- IBM WebSphere Application Server 平台
注释方式
<%-- 注释内容 --%>
隐式隐藏,注释的内容不会传递到客户端<!-- 注释内容 -->
显式隐藏,注释的内容会被传递到客户端<% /* 注释内容 */ %>
和<% //注释内容 %>
实际是利用了插入脚本的方式插入了注释,同样不会被传递给客户端
变量声明
在 <% %>
中声明的变量是局部变量,而在 <%! %>
中声明的变量是在整个 JSP 页面内有效的,在 JSP 被编译为类的实例对象时,这种变量就是对象的属性。所以当 JSP 第一次编译执行后,其中声明的全局变量是会被之后的请求共享的。如此,刷新 JSP 界面时,可以看到他的变化是连续性的。
注意在 <% %>
是不能声明方法的,这是因为其中的代码会被放到方法中去执行,而方法是无法嵌套声明的。
除了在 <% %>
中使用默认的 out 对象输出值外,还可以使用 <%=expression %>
输出值,expression
是可以计算的表达式。
内置对象
JSP 界面中存在着一些不需要声明就可以直接使用的对象,称为内置对象或隐藏对象。
包括:request、response、out、session、application、pageContext、config、page 以及 exception 。
默认对象 exception 是一个 java.lang.Throwable
对象,用来表示界面获取到的错误,但是该对象只有当 JSP 界面被设置为错误界面时才可使用。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>错误</title>
</head>
<body>
发生错误:<%=exception.getMessage() %>
</body>
</html>
要使用上述的错误界面,需要在可能发生错误的界面设置该错误界面。
<%@ page errorPage="error.jsp" %>
如此,当当前界面发生错误时,则返回指定的 error.jsp 错误界面。
指令元素
-
page 指令,用来定义 JSP 页面中的全局属性,常用来设置脚本语言、内容类型、导入包等。
<%@ page language="java" contentType="text/html; charset=uft-8" %> <%@ page import="java.util.Vector,java.util.Calendar" %>
-
include 指令
JSP 中的 include 指令,用来包含一个静态的文件,当当前 JSP 被解析时,被包含的文件内容会被复制到当前页面中,同当前的 JSP 页面一起编译。
指令格式:
<%@ include file="file path"%>
这个路径是相对路径,如果是以
/
开头,那么就是相对于 JSP 应用的上下关系路径,否则就是当前文件的路径。并且,这个路径不能是动态的,即不能是类似下面的变量。<% String filePath="header.htmlf"; %>
<%@ include file="<%=filePath%>" %>
如果一个 JSP 文件使用这种方式引用其他文件内容,那么就意味着引用的文件可以存在语法格式的错误(但是要修改文件后缀名以规避语法检查),主文件中的内容同样可以是不完整的,只要主文件在编译时,拷贝了引用的文件中的内容后,语法格式正确即可。
-
taglib 指令
该指令可以用来定义一个自定义的标签库,语法格式为:
<%@ taglib uri="tagLibUri" prefix="tagPrefix" %>
。uri 表示标签库的路径,可以是一个网络链接地址,也可以是本地相对地址。
动作元素
同 JSP 指令元素不同,其是在客户端请求时动态执行的,是通过 XML 语法格式的标记来实现控制 Servlet 引擎行为的。
<jsp:include>
同样可以包含静态或动态页面,只是被包含的页面是在主页面被请求时添加的。
<jsp:include page="filePath" flush="false|true" />
这种包含方式需要注意的是,包含动作是在各个文件编译完成后进行的,即被包含文件的语法格式必须是正确的。
<jsp:forward>
表示重定向到其他指定的网页,可以结合 Java 脚本来根据不同条件实现不同页面的跳转。
<%
if (condition) {
%>
<jsp:forward page="success.jsp">
<jsp:param name="paramName" value="<%=value%>">
</jsp:forward>
<%}else {%>
<jsp:forward page="error.jsp" />
<%}%>
在进行跳转时,可以使用 <jsp:param>
传递参数。
<jsp:userBean> 、<jsp:setProperty> 和 <jsp:getProperty>
这三个动作元素通常一起使用。
这是一种在 JSP 中快速创建示例对象的一种方式,<jsp:userBean>
是用来在一个指定范围内声明一个指定类型的对象实例。
id 属性是声明的对象的名称,scope(page、request、session、application)是变量的有效范围,type 则表示变量的所属类型,他可以是该变量实际引用对象的类型名称,也可以是其超类,或者是其实现的接口之一。
beanName 表示使用 Bean 的名字,该属性和 type 属性可以确定具体的 bean 的类型。
class 属性表示具体的 Bean 的完整包,使用该属性,可以省略 type 和 beanName 属性,但是这就意味着变量类型和实际创建的实例对象类型一致。
<jsp:setProperty>
用来设置指定 bean 的指定属性的值。其 name 属性是已经声明的 bean 变量,property 则表示 bean 的属性,而 value 则指定该属性的值,或者使用 param 属性表示属性的值来自 param 所指定的参数的值。注意,value 和 param 不能同时存在。
如果 bean 的值来自参数,并且参数的名称同属性名称一致,则可以使用下面的方式来指定 bean 的属性值。
<jsp:setProperty name="beanID" property="*" />
否则,需要使用 param 将参数同属性一一对应起来。
<jsp:setProperty name="beanID" property="propertyName" param="paramName" />
还可以使用 value 直接指定属性的值,value 可以是一个表达式。
<jsp:setProperty name="beanID" property="propertyName" value="<%=2+5%>" />
<jsp:getProperty>
则十分简单,表示获取指定 bean 的指定属性的值。
<jsp:getPropery name="beanName" property="propertyName" />
但是,还可以有另一种取值方式,如下:
<%=beanName.getPropertyName()%>
实际是利用了 <%=expression%>
表达式。
实际上,只要是 bean 中声明的方法,都是可以利用脚本的方式进行调用的。
<jsp:plugin>
可以从 JSP 网页中加载 Java Applet 或 JavaBean 程序组件。
在加载 code 属性指定的类时,可以使用 <jsp:params>
指定参数,当然该标签下是使用 <jsp:param>
来指定具体参数的。