近几天,我的 ADSL 上不了网了。几乎在家里,只能买碟看片。世界上有什么大事,论坛中有多少 MM 灌水我都不知道。本来说,这帖要在周三时发出来。没想到的是,昨天联通公司才把网解决。10010的客服,我从回家开始打,一直打到夜里12点,都没人理。哎。。。


上次我们讲到了 JSP 的指令操作。这次,我们要好好谈谈最后遗留下来的 JSP 动作。为什么要单用一章来讲。主要有两个原因,一个是上次说的内容太多,怕接受不了。还有一点就是,JSP 动作要了解的内容不是一般的多,而是二般的多。所以要单给出一章节来好好谈论谈论。得意


如同上次所云,JSP 动作用来控制 JSP 引擎的行为,执行一些标准常用的 JSP 页面的动作。好像和 JSP 指令相近。指令用于通知,不直接显示出来,而动作是要控制,并对页面进行制作。


JSP动作包括以下几点内容:

1、jsp:include:动态且可控的 include 加载,比那个指令 include 要灵活。

2、jsp:useBean:使用 JavaBean 控件。

3、jsp:setProperty:设置 JavaBean 属性。

4、jsp:getProperty:输出 JavaBean 属性

5、jsp:param:用于传递参数,必须与其它支持这参数的标签一起使用。

6、jsp:forward:引导请求进入新的页面。

7、jsp:plugin:插入一个 applet 或 Bean。


一、jsp:include

1、说明:

jsp:include 动作在即将生成的页面上动态地插入文件,它在页面运行时才将文件插入,对被插入文件进行处理。


2、格式:

<jsp:include page="文件名" flush="true" />


<jsp:include page="文件名" flush="true">  
  <jsp:param name="参数名 1" value="参数值 1" />  
  <jsp:param name="参数名 2" value="参数值 2" />  
  ……  
</jsp:include>

参数说明:

(1)page="文件名"

制定需要插入文件的 URL,该参数是一个相对路径。


(2)flush="true"

只能用true,没得说。


(3)<jsp: param>

<jsp: param> 子句用于把值传到到要插入文件当中。

在相应的页面中,只要加入如下语句就可以将其值取出:

request.getParameter("参数名");

3、与 include 区别:

jsp:include 动作是动态的。当插入文件时,JSP 引擎不把插入文件和原 JSP 文件合并成一个新文件,而是在运行时把被插入文件包含进来。插入者与被插入都双方全都是独立的。被插入文件被改动了,会被判断出来,并重新进行编译。


include 指令是静太的,把被插入文件插入到当前位置后,再进行编译,一旦有改动,无法得知。


4、举个例子吧:

index.jsp


[html] view plaincopy

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <p><b>两种游戏机的感觉如何?</b></p>  
        <jsp:include page="head.jsp" flush="true">  
            <jsp:param name="chanshu1" value="PS3" />  
            <jsp:param name="chanshu2" value="PSVita" />  
        </jsp:include>  
    </body>  
</html>


head.jsp

<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <%  
            String game1 = request.getParameter("chanshu1");  
            String game2 = request.getParameter("chanshu2");  
        %>  
        <p><%=game1%>很贵!</p>  
        <p><%=game2%>更贵!</p>  
    </body>  
</html>

运行一下看看结果:




二、jsp:forward 动作

1、说明:

jsp:forward 动作停止当前页面的执行,转向别一个页面。在执行中,JSP引擎将不再处理当前页面剩余的内容,并把缓存区清空(等于这一页白折腾了尴尬)。好处在于,客户看到的是原始的页面地址,而实际显示得却是别一个页面的内容。有于利隐藏展示页面的地址,来得瑟一下。


2、格式:

<jsp:forward page="文件名" />

<jsp:forward page="文件名">  
  <jsp:param name="参数名1" value="参数值 1" />  
  <jsp:param name="参数名2" value="参数值 2" />  
  ……  
</jsp:forward>

参数说明:


(1)page="文件名"

指明要定向跳转的文件或URL。


(2)jsp:param

同 jsp:include 动作中的 jsp:param 动作。就是传值。接收方法如上。


3、举个例子:

我们把 jsp:include 例子中 index.jsp 页面里的 include 改成 forward 看看结果,head.jsp 不用改,代码如下:

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <p><b>两种游戏机的感觉如何?</b></p>  
        <jsp:forward page="head.jsp">  
            <jsp:param name="chanshu1" value="PS3" />  
            <jsp:param name="chanshu2" value="PSVita" />  
        </jsp:forward>  
    </body>  
</html>

head.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <%  
            String game1 = request.getParameter("chanshu1");  
            String game2 = request.getParameter("chanshu2");  
        %>  
        <p><%=game1%>很贵!</p>  
        <p><%=game2%>更贵!</p>  
    </body>  
</html>

结果是:




index.jsp中的“两种游戏机的感觉如何?”没有了。只有 head.jsp 中的信息了。


三、jsp:plugin 动作

1、说明:

jsp:plugin 动作的功能是将服务器端的 Java 小应用程序(Applet)或 JavaBean 组件下载到浏览器端去执行,相当于在客户端浏览器插入 Java 插件。


jsp:plugin 动作将会动态生成 <object> 或 <embed> 元素标记,以使浏览器的 Java 插件运行 Applet。同时,他也会指定对象是 applet,或者 Java Bean。也有可能是 Java Class 字节码文件(.class),更有甚者是要下载的 Java 插件。


2、格式:

<jsp:plugin  
  type="bean|applet"  
  code="保存类的文件名"  
  codebase="类路径"  
  [name="对象名"]  
  [archive="相关文件路径"]  
  [align="bottom | top | middle | left | right"]  
  [height="displayPixels"]  
  [width="displayPixels"]  
  [hspace="leftRightPixels"]  
  [vspace="topBottomPixels"]  
  [jreversion="Java环境版本"]  
  [nspluginurl="供 NC 使用的 plugin 加域位置"]  
  [iepluginurl="供 IE 使用的 plugin 加载位置"]  
  <jsp:params>  
    <jsp:param name="参数名 1" value="参数值 1">  
    <jsp:param name="参数名 2" value="参数值 2">  
  </jsp:params>  
  [<jsp:fallback>错误信息</jsp:fallback>]  
</jsp:plugin>


参数说明:


(1)type="bean | applet"

指定插件对象的类型是 Bean 还是 Applet(二选一,请作答)。


(2)code="保存类的文件名"

要执行的 Java Class 字节码文件(*.class)的名字。这个文件必须保存在由下面要介绍的 codebase 属性所指定的目录当中。


(3)codebase="类路径"

这是指定 Java Class 字节码文件(*.class)文件的位置。没有写的话,就默认为当前 JSP 页面的路径。


(4)name="对象名"

bean 或 applet 实例的名字


(5)archive="相关文件路径"

预装一些需要使用的 Java Class 字节码文件(*.class)文件,各文件用“,”号分开,用于提高 applet 的性能。


(6)Align="bottom | top | middle | left | right"

指定显示的对像和 applet 的位置。


(7)height="displayPixels" width="displayPixels"

好理解,展示的长宽的尺寸。


(8)hspace="leftRightPixels" vspace="topBottomPixels"

从英文字母的翻译可以看出,一个设置水平间距,一个设置垂直间距。


(9)jreversion="Java环境版本"

Applet 或者 Java Bean 他们所运行的 Java Runtime Environment (JRE)的版本。默认版本是1.1。


(10)nspluginurl="供 NC 使用的 plugin 加域位置"

这个是来指定 Netscape Navigator 用户所需要的 JRE 的下载地址,是一个URL地址。


(11)iepluginurl="供 IE 使用的 plugin 加载位置"

这个如上,不同的是,这里指得浏览器是 IE。


(12)jsp:params 动作

和 jsp:include 或 jsp:forward 动作中的 jsp:params 动作一样,就是传个值。


(13)<jsp:fallback>错误信息</jsp:fallback>

说白了,就是给自己一个后路。如果出错了如何解决。


东西多,用得少。到时候要用到其它属性的话,可以回来查一下列表。偷笑


3、举个例子

我们首先找了一个 Java applet 小应用程序放到与 index.jsp 同级的目录下(Clock.class)。



之后修改 index.jsp 中的代码为:

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <p><b>两种游戏机的感觉如何?</b></p>  
        <jsp:plugin type="applet" code="Clock.class" width="900" height="600">  
            <jsp:fallback>为什么会这样?</jsp:fallback>  
        </jsp:plugin>  
    </body>  
</html>

之后,运行网站,查看结果:




感觉有点像 HTML 中的 <applet>。但是,它比 HTML 的 <applet> 更强大,更灵活。很多做过 JSP 开发的人都知道,Java Bean,在早期经典的 Java MVC 项目中作为 数据及业务逻辑操作。所以,强大的不是一轻半点。下面是在客户端的代码样子:

<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <p><b>两种游戏机的感觉如何?</b></p>  
        <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="900" height="600" codebase="http://java.sun.com/products/plugin/1.2.2/jinstall-1_2_2-win.cab#Version=1,2,2,0">  
<PARAM name="java_code" value="Clock.class">  
<PARAM name="type" value="application/x-java-applet;">  
<COMMENT>  
<EMBED type="application/x-java-applet;" width="900" height="600" pluginspage="http://java.sun.com/products/plugin/" java_code="Clock.class"/>  
<NOEMBED>  
为什么会这样?  
</NOEMBED>  
</COMMENT>  
</OBJECT>  
  
    </body>  
</html>




四、jsp:useBean 动作

1、说明

终于谈到 Bean了。 Java Bean 是一种可以重复使用的程式组件,他本身就是 Java 的类,所以要用 Java 来编写。而 jsp:Bean 动作就是来调用这个程式组件的。其实感觉有点像上例一样,只不过,上例的 Java Applet 小应用程序只是完成一种客户端的显示效果,而 Bean 是要作为服务器上进行功能处理,对于我们是不可见的。


虽然我们以后才会接触到 Java Bean,但是我们现在可以先说明一下它是什么玩意儿。Java Bean 将网站的表示层(显示给客户看的页面,用JSP来编写。)与业务逻辑层公开,把业务及数据的处理交给 Bean 来完成。最后,再由JSP来调用 Bean 提供的结果,并显示给客户。这样,降低了程序的复杂性,有利于日后的维护及再开发。


如果还不明白,我换一种少儿不宜且重口味的方式来说吧。JSP 就是我们看见的健康的美女,而 Bean 就是美女体内的动作的器官。一个美女的健康与否,是要看体内运行的结果所展现的。体内运行的好,是 Bean 在动作;外表的美是调用 Bean 动作的结果……大家明不明白,我反正是明白了。。。尴尬


无所谓,以后再要见到的。。。大笑


2、格式

<jsp:useBean id="beanInstanceName" class="package.class" scope="page | request | session | application" /></jsp:useBean>



如果带参数则:

<jsp:useBean id="beanInstanceName" class="package.class" scope="page | request | session | application" />  
  <jsp:setProperty name="bean的名称" property="属性名称" value="属性值" />  
  ...  
  <jsp:setProperty name="bean的名称" property="属性名称" value="属性值" />  
</jsp:useBean>


如果要得到 bean 返回来的属性值则:


<jsp:getProperty name="bean 名称" property="属性名称" />



3、举个例子

因为,这次的例子我们要编写一下 Java 的开发环境。所以,我们需要对系统环境进行一下修改。

修改如下:

(1)、右击“我的电脑”,选择“属性”,打开属性窗口。



(2)、在打开的“属性”窗口中选择“高级系统设置”



(3)、之后在“系统属性”面板中点击“高级”标签,并选择“环境变量”





(4)在打开的“环境变量”中对“系统变量”进行设置:

1) 选择变量“Path”,并单击“编辑”按钮。在其变量值中,加入 “Java 路径\bin”,如“;L:\Program Files\Java\jdk1.6.0_23\bin;”,然后点击确定按钮。



2)用上面的方面,点击来对环境变量“CLASSPATH”进行设置(如果没有“CLASSPATH”,那就点击“新建”按钮,直接建一个)。

之后,设置变量值为 .; Java 路径\jre\lib\rt.jar; 如“.;L:\Program Files\Java\jdk1.6.0_23\jre\lib\rt.jar;”:



3)一直点击确定后退出。可能,你需要重启一下计算机(有的是,有的不是,最好大家都重启一下)。


好了,我们现在打开记事本,开始编写 Java Bean。键入下面的 Java 代码,并保存为 Box.java:

package bean;  
  
import java.io.*;  
  
public class Box{  
    int length, width, height;  
  
    public Box(){  
        length = 1;  
        width = 1;  
        height = 1;  
    }  
  
    public void setlength(int newlength){  
        length = newlength;  
    }  
  
    public void setwidth(int newwidth){  
        width = newwidth;  
    }  
  
    public void setheight(int newheight){  
        height = newheight;  
    }  
  
    public int getlength(){  
        return length;  
    }  
  
    public int getwidth(){  
        return width;  
    }  
  
    public int getheight(){  
        return height;  
    }  
  
    public int BoxVolume(){  
        return length * width * height;  
    }  
  
    public double BoxArea(){  
        return 2 * (length * width + width * height + length * height);  
    }  
  
}


好了,打开运行对话框,快捷键:Ctrl + R,之后输入 cmd 回车。




之后在打开的字符命令行中,通过命令,进入到 Box.java 所保存的目录之下,并输入 javac Box.java 进行编译。


若是没有错误,将会出现下面的情况:



在Box.java所在的目录下会出现一个新的文件“Box.class”。这就是我们编写好,并编译的 Java Bean 文件。


好了,现在全齐了。之后,我们开始来写 JSP 代码了。打开 NetBeans 编辑器,将行成的 Box.class 文件复制于 网站目录下的 WEB-INF文件夹的 classes 文件夹内的 bean 文件夹下。



现在成了。我们来改一下 index.jsp 文件的代码,代码如下:

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <h3>正方体计算</h3>  
        <form method="post" action="head.jsp">  
            <p>正方体的长:<input type="text" name="BoxLength" style="width: 20px;" /></p>  
            <p>正方体的宽:<input type="text" name="BoxWidth" style="width: 20px;" /></p>  
            <p>正方体的高:<input type="text" name="BoxHeight" style="width: 20px;" /></p>  
            <p>  
                <input type="submit" value="计算" name="submit" />  
                   
                <input type="reset" value="重置" name="reset" />  
            </p>  
        </form>  
    </body>  
</html>


head.jsp 代码如下:

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<%@page import="bean.Box"%>  
<jsp:useBean id="Box" class="bean.Box" scope="request"></jsp:useBean>  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>JSP Page</title>  
    </head>  
    <body>  
        <%  
            Box b = new Box();  
            b.setlength(Integer.parseInt(request.getParameter("BoxLength")));  
            b.setwidth(Integer.parseInt(request.getParameter("BoxWidth")));  
            b.setwidth(Integer.parseInt(request.getParameter("BoxHeight")));  
        %>  
        <p>长方体的体积:<%=b.BoxVolume()%></p>  
        <p>长方体的面积:<%=Box.BoxArea()%></p>  
    </body>  
</html>


运行一下,先在 index.jsp 中输入数据:




之后点击计算按钮显示出结果:



我们在编译器当中,看到目录下有很多东西。这些东西都对于服务器开发很有用处。下次,我们花一天的时间来说明一下。今天就先到这里了。