脚本程序
脚本程序可以包括任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。
脚本程序的语法格式:<% 代码片断 %>
任何文本、HTML标签、JSP元素必须写在脚本程序的外面。
<html> <head><title>HelloWorld</title></head> <body> HelloWorld!<br/> <% out.println("Your IP address is " +request.getRemoteAddr()); %> </body> </html>
JSP声明
1个声明语句可以声明1个或多个变量、方法,供后面的Java代码使用。在JSP文件中,必须先声明这些变量和方法然后才能使用它们。
JSP声明的语法格式: <%!declaration; [ declaration; ]+ ... %>
<%! int i =0; %> <%! int a, b,c; %> <%! Circle a= new Circle(2.0); %>JSP表达式
1个JSP表达式中包括的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。
由于表达式的值会被转化成String,所以可以在1个文本行中使用表达式而不用去管它是不是是HTML标签。
表达式元素中可以包括任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。
JSP表达式的语法格式: <%=表达式 %>
<html> <head><title>AComment Test</title></head> <body> <p> Today's date: <%= (newjava.util.Date()).toLocaleString()%> </p> </body> </html>
JSP注释
JSP注释主要有两个作用:为代码作注释和将某段代码注释掉。
JSP注释的语法格式:
<%-- 这里可以填写 JSP 注释 --%>
JSP 指令
JSP指令用来设置全部JSP页面相干的属性,如网页的编码方式和脚本语言。
JSP中的3种指令标签:
<%@ page ... %> 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include ... %> 包括其他文件
<%@ taglib ... %> 引入标签库的定义
Page指令
<%@ page attribute="value" %>
等价的XML格式:
<jsp:directive.page attribute="value" />
下表列出与Page指令相干的属性:
buffer 指定out对象使用缓冲区的大小
autoFlush 控制out对象的 缓存区,true/false,默许为true
contentType 指定当前JSP页面的MIME类型和字符编码
errorPage 指定当JSP页面产生异常时需要转向的毛病处理页面
isErrorPage 是不是可以作为另外一个JSP页面的毛病处理页面,true/false
extends 指定servlet从哪个类继承
import 导入要使用的Java类,多个包可以用逗号分割
info 定义JSP页面的描写信息,可以通过Servlet.getServletInfo()得到
isThreadSafe 指定对JSP页面的访问是不是为线程安全
language 定义JSP页面所用的脚本语言,默许是Java
session 指定JSP页面是不是使用session,true/false
isELIgnored 指定是不是履行EL表达式,true/false
isScriptingEnabled 肯定脚本元素能否被使用,true/false
trimDirectiveWhitespace 是不是去掉指令前后的空白字符,true/false
Include指令
JSP可以通过include指令来包括其他文件。被包括的文件可以是JSP文件、HTML文件或文本文件。包括的文件就好像是该JSP文件的1部份,会被同时编译履行。
Include指令的语法格式以下:
<%@ include file="relative url" %>
Include指令中的文件名实际上是1个相对的URL。如果没有给文件关联1个路径,JSP编译器默许在当前路径下寻觅。
等价的XML语法:
<jsp:directive.include file="relative url" />
与<jsp:include page=”url”/>的区分:Include指令是先包括,再编译,jsp:include标签是先运行,再包括,就是说前者是把包括的文件合并到1个文件,最后编译成1个class文件;后者是两个文件单独履行,然后将结果合并到1块
Taglib指令
JSP API允许用户自定义标签,1个自定义标签库就是自定义标签的集合。
Taglib指令引入1个自定义标签集合的定义,包括库路径、自定义标签。
Taglib指令的语法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>
uri属性肯定标签库的位置,prefix属性指定标签库的前缀。
等价的XML语法:
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />JSP 动作元素
与JSP指令元素不同的是,JSP动作元素在要求处理阶段起作用。JSP动作元素是用XML语法写成的
动作元素基本上都是预定义的函数,JSP规范定义了1系列的标准动作,它用JSP作为前缀,可用的标准动作元素以下:
jsp:include 在页面被要求的时候引入1个文件。
jsp:useBean 寻觅或实例化1个JavaBean。
jsp:setProperty 设置JavaBean的属性。
jsp:getProperty 输出某个JavaBean的属性。
jsp:forward 把要求转到1个新的页面。
jsp:plugin 根据阅读器类型为Java插件生成OBJECT或EMBED标记。
jsp:element 定义动态XML元素
jsp:attribute 设置动态定义的XML元素属性。
jsp:body 设置动态定义的XML元素内容。
jsp:text 在JSP页面和文档中使用写入文本的模板
所有的动作要素都有两个属性:id属性和scope属性。
id属性:
id属性是动作元素的唯1标识,可以在JSP页面中援用。动作元素创建的id值可以通过PageContext来调用。
scope属性:
该属性用于辨认动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相干联id对象的寿命。 scope属性有4个可能的值:(a) page, (b)request, (c)session, 和 (d) application。
<jsp:include>动作元素
<jsp:include page="relative URL" flush="true" />
以下是include动作相干的属性列表。page 包括在页面中的相对URL地址。
flush 布尔属性,定义在包括资源前是不是刷新缓存区。
<jsp:useBean>动作元素
<jsp:useBean id="name" class="package.class" />在类载入后,可以通过jsp:setProperty 和 jsp:getProperty 动作来修改和检索bean的属性。
以下是useBean动作相干的属性列表。
class 指定Bean的完全包名。
type 指定将援用该对象变量的类型。
beanName 通过 java.beans.Beans 的 instantiate() 方法指定Bean的名字。
<jsp:useBean id="test" class="action.TestBean" /> <!-- 此句可以从request域中自动获得所有符合的属性值--> <jsp:setProperty name="test" property="*" /> <jsp:setProperty name="test"property="message" value="HelloJSP..." /> <p>Got message....</p> <jsp:getProperty name="test" property="message" />
<jsp:setProperty>和<jsp:getProperty>
<jsp:setProperty>的属性列表
name name属性是必须的。它表示要设置属性的是哪一个Bean。
property property属性是必须的。它表示要设置哪一个属性。有1个特殊用法:如果property的值是"*",表示所着名字和Bean属性名字匹配的要求参数都将被传递给相应的属性set方法。
value value 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换。 value和param不能同时使用,但可使用其中任意1个。
param param 是可选的。它指定用哪一个要求参数作为Bean属性的值。如果当前要求没有参数,则甚么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可让Bean自己提供默许属性值,只有当要求参数明确指定了新值时才修改默许属性值。
<jsp:getProperty>的属性列表
name 要检索的Bean属性名称。Bean必须已定义。
property 表示要提取Bean属性的值
<jsp:forward> 和<jsp:param>
<jsp:forward page=”url”> <jsp:param name=”param1” value=”value1”/> <jsp:param name=”param2” value=”value2”/> </jsp:forward>
<jsp:directive>
<jsp:directive>与JSP指令相对应,可以互换
<jsp:directive.page/>
<jsp:directive.include/>
<jsp:directive.taglib/>
<jsp:element> 、 <jsp:attribute>、 <jsp:body>动作元素
<jsp:element>、 <jsp:attribute>、 <jsp:body>动作元素动态定义XML元素。动态是非常重要的,这就意味着XML元素在编译时是动态生成的而非静态。
以下实例动态定义了XML元素:
<%@page language="java" contentType="text/html"%> <html xmlns="http://www.w3c.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page"> <head><title>Generate XML Element</title></head> <body> <jsp:element name="xmlElement"> <jsp:attribute name="xmlElementAttr"> Value for the attribute </jsp:attribute> <jsp:body> Body for XML element </jsp:body> </jsp:element> </body> </html>
履行时生成HTML代码以下:
<html xmlns="http://www.w3c.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page"> <head><title>GenerateXML Element</title></head> <body> <xmlElement xmlElementAttr="Value for the attribute"> Body for XML element </xmlElement> </body> </html>