第5章 JSP技术
5.2.6 jsp指令
jsp指令有两种:jsp包含指令(<jsp:include…/>)和jsp使用JavaBean指令(<jsp:useBean…/>)。
1.jsp包含指令jsp:include
jsp:include指令语法格式如下:
<jsp:include page="{relativeURL | <%=expression%>}"flush="true"/>
jsp:include 指令实现将其他文件的内容插入到当前JSP页面的输出中。与include指令不同,jsp:include指令在JSP页面被用户请求时才将指定文件的内容插入服务器的响应输出中,尽管这样会降低服务器请求的效率,但这增强了系统的灵活性。
该指令可以包含动态和静态文件,这两种包含文件的结果是不同的。如果文件仅是静态文件,那么这种包含仅仅是把包含文件的内容加到jsp文件中去,而如果这个文件是动态的。那么这个被包含文件也会被JSP编译器执行。由于<jsp:include> 能够同时处理这两种文件,因此不需要判断此文件动态的还是静态的。如果这个包含文件是动态的,那么可以用<jsp:param>还传递参数名和参数值。其属性如下:
<jsp:page="{relativeURL│<%=expression%>
参数为一相对路径,或者是代表路径的表达式。
flush="true"
这里必须使用flush="true",不能使用 false值。缺省值为 false。
<jsp:param name="paramterName" value="{paramerterValue<%=expression%>}"/>
<jsp:param>语句可传递一个或多个参数给动态文件,另外,一个页面中可以使用多个<jsp :param>来传递多个参数。
例5-11 一个用户验证页面,包含了验证用户的JSP动态程序与静态的页头、页底及版权信息页文件。
<jsp:include page="scripts/login.jsp"/>
<jsp:include page="copyright.html" />
<jsp:include page="/head.html"/>
<jsp:include page="/buttom.html"/>
2. jsp使用JavaBean指令(jsp:useBean)
jsp使用JavaBean指令格式如下:
<jsp:useBean id="Name" scope="page│request│session│
application "class="package.class"/> </jsp:useBean>
<jsp:useBean>指令能在JSP页面中装入并使用一个 JavaBean。 <jsp:useBean>的具体含义是初始化一个"class"属性所指定的 Bean类的实体,并将该对象命名为“id”属性所指定的值。但是,如果系统中已经存在具有相同 "id"和 "scop" 属性的Bean 类实体,则该动作将不再初始化新的实体,而直接使用已存在的Bean对象。
在通过<jsp:useBean>动作指令在 JSP页面中声明了Bean类实体之后,就可以使用 <jsp:setProperty>和<jsp:getProperty> 指令读取或设置Bean 的属性。当然,也可以使用JSP脚本程序或表达式直接调用Bean对象的公有方法。
JSP服务器创建 Bean对象时将调用其无参数的构造函数初始化 Bean属性。如果需要在Bean对象创建时需要读取或设置 Bean的属性,则可以在<jsp:useBean>指令中嵌套 <jsp:setProperty>和<jsp:getProperty> 指令来访问Bean的属性。其具体形式如下:
<jsp:useBean┄>
┄
<jsp:setProperty name="javaName" property="JavaProperty". ./>
<jsp:getproperty name="javaName" property="JavaProperty". ./>
┄
</jsp:useBean>
嵌套在<jsp:useBean>指令之中的 <jsp:setProperty>和<jsp:getProperty>指令只在Bean 被初始化时被执行。如果<jsp:useBean>指令仅仅是调用一个已经存在的 Bean对象,则嵌套在<jsp;useBean>动作指令之中的其他指令将不再执行。
除了设置Bean对象名id和Bean的类名class属性外,还可以设置 <jsp:useBean>指令的另外3项属性:
scope、 type和beanName。具体含义和使用方法见表5-1。
<jsp:useBean>引用的Bean类必须驻留在服务器的 "class"路径中,否则, JSP 页面将无法通过编译。如果编写的Bean类存放在特定的目录下,则应将其所在的目录加到系统的 "classpath"变量中。
3.jsp设置JavaBean属性指令 jsp:setProperty
使用<jsp:setProperty>来设置Bean中的属性值。该指令可以在两种情况下使用。
(1)独立使用。
语法:<jsp:useBean id="myName"┄/>
<jsp:setProperty name="myName" property="propertyName"┄/>
(2)嵌套在<jsp:useBean>指令中使用
<jsp:useBean id="myName"┄/>
<jsp:setProperty name="myName" property="propertyName"┄/>
</jsp:useBean>
在第1种情况下,无论Bean对象中否初次被使用,<jsp:setProperty>动作都会被执行。而在第2种情况下,<jsp:setProperty>动作仅在Bean对象被初始化时执行。
<jsp:setProperty>指令有其特有的属性,具体见表5-2
例5-11 jsp:setProperty示例
<jsp:setProperty name="mybean " property="*" />
<jsp:setProperty name="mybean " property="username" />
<jsp:setProperty name="mybean " property="username" value="yin" / >
4. jsp读取JavaBean属性指令(jsp:getProperty)
语法:<jsp:getProperty name="beanInstanceName" property="propertyName" />
说明:<jsp:getProperty>用于获取Bean的属性值,显示在页面中。
<jsp:getProperty>指令将从Bean的属性中取出的值转换成字符串,然后插到响应输出,也就是将其显示在JSP页面中。在使用<jsp:getProperty>之前,须用<jsp:useBean>创建它。
<jsp:getProperty>指令的使用方法与<jsp:setProperty>雷同,读者可参照<jsp:setProperty>的属性来定义其指令属性。但<jsp:setProperty>指令也有一些限制,即:不能使用<jsp:getProperty>来检索一个已经被索引了的属性。
例5-12 Jsp1Bean.java 源程序如下:
public class Jsp1Bean {
private String sample = "Start value";
//读属性sample
public String getSample() {
return sample;
}
//写属性sample
public void setSample(String newValue) {
if (newValue!=null) {
sample = newValue;
}
}
例5-13 Jsp1Bean .jsp使用JavaBean,Jsp1Bean.jsp源程序如下:
<%@ page contentType="text/html; charset=GBK" %> <html> <head> <title> Jsp1 </title> </head> <jsp:useBean id="Jsp1BeanId" scope="session" class="untitled13.Jsp1Bean" /> <jsp:setProperty name="Jsp1BeanId" property="*" /> <body> <h1> JBuilder Generated JSP </h1> <form method="post"> <br>Enter new value : <input name="sample"><br> <br><br> <input type="submit" name="Submit" value="Submit"> <input type="reset" value="Reset"> <br> Value of Bean property is :<jsp:getProperty name="Jsp1BeanId" property="sample" /> </form> </body>
例5-13 运行结果如图5-9所示。
在JBuilder中运行整个工程<点击“在JBuilder中运行整个工程”,在出现的“文件下载”对话框中选择“打开(O)”按钮>
5.jsp传递客户请求对象指令(jsp:forward)
JSP传递客户请求对象指令jsp:forward语法格式如下:
<jsp:forward page={"relativeURL"│"<%=expression% >"}/>或
<jsp:forward page={"relativeURL"│"<%=expression% >"}>
<jsp:param name="parameterName" value="{parameterValue│<%=expression %>}">
</jsp:forward>
<jsp:forward>指令能够将用户的请求传递到下一页面处理,在控制型的JSP页面中经常使用。
<jsp:forward>指令从一个JSP文件向另一个文件传递一个包含用户请求的request对象。该指令只有一个属性“page”。指定目标页面的相对URL,"page"属性的值既可是静态值,也可以由JSP动态产生。
使用<jsp:forward>指令,能够向目标文件传送参数和值,在例5-15中传递的参数名为username,值为一yin,如果使用了<jsp:param>指令的话,目标文件必须是一个动态的文件,才能够处理参数。
该指令的属性如下:
page="{relativeURL│<%=expression %>}"
这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL这个文件可以是JSP程序段,或者其他能够处理repuest对象的文件。
<jsp:param name="parameterName" value="{parameter Value│<%=expression%> }"/>+
向一个动态文件发送一个或多个参数,这个文件一定是动态文件,如果想传递多个参数,可以在一个JSP文件中使用多个<jsp:param>.name指定参数名,value指定参数值。
例5-14 jsp:forward示例
<jsp:forward page="/servlet/login,jsp" />
<jsp:forward page="<%=someJSPExpression%>">
<jsp:param name="username" value="jsmith "/>
6. jsp需要Java插件指令(jsp:plugin)
语法:
<jsp:plugin type="bean│applet" code="classFileName" codebase="classFileDirectoryName" [name="imstanceName"] [archive="URIToArchive,┄"] [align="bottom│top │middle│left │right"] <height="disolayPixels"> [width="displqyPixels"] [hspace="leftRightPixels'] [vspace="topBottomPixels"] [jreversion="JREVersionNumber│1.1"] [nspluginurl="URLToplugin"] [iepluginurl="URLToplugin"]> [<jsp:params> [<jsp:param name="parameterName" value="{parameterValue│<%=expression %>}' /> ]+ </jsp:params>] [<jsp:fallback>text message for user<jsp:fallback>] </jsp:plugin>
当JSP文件被编译,传输到浏览器时,</jsp:plugin>指令动态产生<OBJECT><EMBED>标志,以使用浏览器
的Java插件运行Applet。<object>用于HTML4.0,<embed>用于HTML3.2。
一般来说,</jsp:plugin>指令指定对象是Applet还是Bean,也指定class的名字及位置,另外还会指定将
从哪里下载这个Java插件,其属性的含义和使用方法见表5-3。
例5 - 15 使用JSP plugin指令嵌入一个Applet小应用程序
//一个Applet小应用程序:HelloWorld.java import java.awt.*; import java.applet.*; public class HelloWorld extends Applet { //Main method public void paint(Graphics g) { g.drawString("Hello World!",10,10); } } //使用JSP plugin指令的JSP程序,plugin.jsp plugin.jsp <html> <head> <title> plugin </title> </head> <body bgcolor="#ffffff"> <h1> Hello World </h1> <jsp:plugin type="applet" code="HelloWorld.class" codebase="./" jreversion="1.2" width="160" height="150" > <jsp:fallback> Plugin tag Object or Embed not supported by browser. </jsp:fallback> </jsp:plugin> </body> </html>
程序Plugin jsp运行结果如图5-10所示:
在JBuilder中运行整个工程<点击“在JBuilder中运行整个工程”,在出现的“文件下载”对话框中选择“打开(O)”按钮>