`
jiangduxi
  • 浏览: 441939 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JSP语法详解五

阅读更多

   JSP动作元素

与指令不同的是,动作元素在请求处理阶段起作用。JSP动作元素是使用XML语法写成的,它采用以下两种格式中的一种:

<prefix:tag attribute=value attribute-list..../>

或者

<prefix:tag attribute=value attribute-list..>

.................

</prefix:tag>

容器在处理JSP时,每遇到这种动作元素,都根据它的标记进行特殊处理。

JSP规范定义了一系列的标准动作,它用jsp作为前缀。这些标准的动作不管容器是如何实现的,但是每个Web容器都必须提供这些操作类型。标准动作为网页设计者提供了基本的功能,其他的厂商可以自由提供其他的非标准的动作以增强功能。

     标准动作有:<jsp:useBean><jsp:setProperty><jsp:getProperty><jsp:param><jsp:include>

<jsp:forward><jsp:plugin><jsp:fallback><jsp:params><jsp:attribute><jsp:body><jsp:invoke><jsp:doBody>

<jsp:element><jsp:text><jsp:output><jsp:root><jsp:declaration><jsp:scriptle><jsp:expression>

 

在标准动作中,有许多是XML语法的动作元素,比如<jsp:declaration><jsp:scriptlet>它的使用不是很广泛。

 

<jsp:param>

   jsp:param操作被用来以“名--值”对的形式为其他标签提供附加信息。它与jsp:include、jsp:forward和jsp:plugin一起使用。它的使用方式如下:

<jsp:param name="paramName" value="paramValue"/>

其中name为属性相关联的关键字,value为属性的值。

<jsp:include>

 jsp:include操作允许在请求时间内在现成的JSP页面里面包含静态或者动态资源。被包含的对象只有对JSP writer对象的访问权,并且它不能设置头或者Cookie。如果页面输出时缓冲的,那么缓冲区的刷新要优先于包含的刷新。此指令在运行

上效率比<%@ page include%>指令的效率低,但可以动态增加内容。通过以下的格式使用include指令:

<jsp:include page="filename" flush="true"/>

或者

<jsp:include page="filename" flush="true">

<jsp:param name="paramName" value="paramValue"/>

...............

</jsp:include>

例如:

<jsp:include page="/source/copyrigth.html"/>

<jsp:include page="source/copyright.html"/>

<jsp:include page="index.html"/>

<jsp:include page="/index.html"/>

<jsp:include page="include.jsp"/>

<jsp:param name="companyName" value="HK"/>

</jsp:inclyde>

其中

page="fileName"

 参数为一个相对路径,或者是代表相对路径的表达式。如果路径以"/"开头,那么路径主要是参照JSP应用的上下关系路径。如果路径是以文件名或目录名开头,那么这个路径就是正在使用的JSP文件的当前路径。

flush="true"

这里必须使用flush="true" 不能使用false值。默认是false

<jsp:param name="paramName" value="paramValue"/>

<jsp:param>子句能让你传递一个或多个参数给动态页面

<jsp:include>标签允许你包含动态文件和静态文件,但是这两种包含文件的结果是不同的。如果文件仅仅是静态文件,那么这种包含仅仅是把包含文件的内容加到JSP文件中去,这个被包含文件不会被JSP编译器执行。相反地,如果这个包含文件是动态的文件,那么这个被包含文件将会被JSP编译器执行。

   如果被包含文件是动态的,那么还可以用<jsp:param>传递参数名和参数值。

和<%@ include%>指令不同的是,<jsp:include>包含内部可以是动态改变的,它在执行时才确定,而前者包含的内容是固定不变的,一经编译,就不能改变。

例如:
<%@ page contentType="text/html;charset=gb2312" language="java"%>

<html>

   <body>

       <%@ include file="static.html"%>

        <%//只是把文件包含进来%>

        <a href="two.jsp">goto two----></a><br>

            this example show include works

         <jsp:include page="two.jsp" flush="true">

         <jsp:param name="a1" value="<%=request.getParameter("name")%>"/>

         <jsp:param name="a2" value="<%=request.getParameter("password")%>"/>

         </jsp:include>

  </body>

</html>

 

two.jsp如下:

 

<%@ page contentType="text/html;charset=gb2312" language="java"%>

实例include的工作原理

<br>

this is al=<%=request.getParameter("a1")%>

<br>

this is a2=<%=request.getParameter("a2")%>

<br>

<% out.println("hello from two.jsp");%>

在第一个实例中,static.html作为静态文件包含进来,two.jsp作为动态文件包含进来。实际上包含进来的是two.jsp执行的结果。 

 

<jsp:forward>

jsp:forward操作允许将请求转发到另一个JSP、Servlet或者静态资源文件。请求被转向到的资源必须位于同JSP发送请求相同的上下文环境之中。每当遇到此操作时,就停止执行当前的JSP,转而执行被转发的资源。按以下的方式使用此操作:

<jsp:forward page="uri"/>

或者

<jsp:forward page="uri">

<jsp:param name="paramName" value="paramValue"/>

..........

</jsp:forword>

例如:

  <% String target="/log.jsp"%>

 <jsp:forward page="<%=target%>"/>

或者

<jsp:forward page="/login.jsp">

        <jsp:param name="userID" value="hah"/>

        <jsp:param name="password" value="XXXX"/>

</jsp:forward>

其中:

page="path"

  "path"值为一个表达式或者一个字符串,它用于说明将要定向的文件或URL。这个文件可以是JSP文件,也可以是程序段,或者其他能够处理request对象的文件

<jsp:param name="paramName" value="paraValue"/>.........

name指定参数名,value指定参数值。参数被发送到一个动态文件,参数可以是一个或多个值,而这个文件却必须是动态文件。

  如果要传递多个参数,则可以在一个JSP文件中使用多个<jsp:param>,将多个参数发送到一个动态文件中。

jsp:forward操作典型的使用就是登陆。如进行权限验证的页面,当验证通过后,就把页面forward到登陆成功的页面;当验证不通过时,就把页面forward到登陆页面。例如:

 <%@ page contentType="text/html;charset=gb2312"%>

 <html>

  <body>

 <%--进行登录检查--%>

<%

 String name=request.getParamter("name");

 String password=request.getParamter("password");

 //if验证通过,forward-->sucess.jsp

 if(name.equals("hah") && password.equals("XXXXX"))

 {%>

<jsp:forward page="sucess.jsp">

<jsp:param name="user" value="<%=name%>"/>

</jsp:forward>

<%

    }

else{

  %>

<jsp:forward page="login.jsp">

 <jsp:param name="user" value="<%=name%>"/>

</jsp:forward> 

<%} %>

  </body>

 </html>

上面是一个简单的登录验证例子。一般情况下都是去连接数据库进行登录验证的。

下面看下success.jsp页面

<%@ page contentType="text/html;charset=gb2312"%>

登录成功

<br>

欢迎你,

<%=request.getParameter("name")%>

 

<jsp:setProperty>

    此操作与useBean协作,用来设置Bean的简单属性和索引属性。<jsp:setProperty>标签使用Bean给定的setXXX()方法,在Bean中设置一个或多个属性值。利用<jsp:setProperty>设置属性值有多种方法。

Bean的自省(introspection)用来发现出出现的哪些属性和它们的名字是什么,这些属性是简单的还是索引的,它们是什么类型的等。用以下方法使用setproperty:

<jsp:setProperty name="beanName" propertyDetails/>

其中,propertyDatails可以使下面几个中的一个:

property="*";

property="propertyName" param="parameterName"

property="propertyName"

property="propertyName" value="propertyValue"

例如:

 <jsp:useBean id="usersession" scope="session" class="com.user.UserSession">

 <jsp:setProperty name="usersession" property="name" value="hah">

</jsp:useBean>

或者

<jsp:useBean id="usersession" scope="session" class="com.user.UserSession"/>

<jsp:setProperty name="usersession" property="name" value="hah"/>

name="beanName"

 这是个必选属性,其值为Bean的名字,为在这之前用jsp:useBean引入的名称。

propertyDetails

 可以通过4种不同的方法指定属性的信息,这4种方法介绍如下。

1)  property="*"

     这是一种设置Bean属性的快捷方式。在Bean中,属性的名字、类型必选和request对象中的参数名称相匹配。由于在表单中传过来的数据类型都是String类型的,JSP内在机制会把这些参数转化成Bean属性对应的类型。

 如果request对象的参数值中有空值,那么对应的Bean属性将不会设置任何值。同样,如果Bean中有一个属性没有与之对应的request参数值,那么这个属性同样也不会设定。

 如果使用了property="*",那么Bean的属性没有必要按HTML表单中的顺序排序。

2) property="propertyName"

  使用request中的一个参数值指定Bean中的一个属性值。在这个语法中,property指定Bean的属性名,而且Bean属性和request参数的名字应相同,否则需要用另一种语法,即指定param。propertyName名字和Bean中的setXXX()中的XXX是一致的。也就是说,如果Bean中有setUserName(String userName)方法,那么propertyName的值就是”userName“。

 从客户传到服务器上的参数值一般都是字符类型,这些字符串为了能够在Bean中匹配就必须转换成对应的类型。

下面给出一些Bean属性的类型及其它们的转换方法

 boolean :         java.lang.Boolean.valueOf(String).booleanValue()

 Boolean:          java.lang.Boolean.ValueOf(String)

 byte:                java.lang.Byte.valueOf(String).byteValue();

 Byte:                java.lang.Byte.valueOf(String);

 char :               java.lang.Character.valueOf(String).valueOf();

Character:        java.lang.Character.valueOf(String);

double:             java.lang.Double.valueOf(String).doubleValue();

Double:             java.lang.Double.valueOf(String);

int :                   java.lang.Integer.valueOf(String).intValue();

Integer:            java.lang.Integer.valueOf(String);

float:                 java.lang.Float.valueOf(String).floatValue();

Float:                java.lang.Float.valueOf(String)

long:                 java.lang.Long.valueOf(String).longValue();

Long:                java.lang.Long.valueOf(String);

如果request对象的参数值中有空值,那么对于的Bean属性将不会设定任何值

property="propertyName" param="parameterName"

在Bean属性的名字和request中参数名字不同时,使用这个方法。param指定request中的参数名。

如果request对象的参数值中有空值,那么对于的Bean属性将不会设置任何值。

 

property="propertyName" value="propertyValue"

value 是一个可选属性,使用指定的值设定Bean属性。这个值可以使字符串,也可以使表达式。如果是字符串,则字符串的值通过相应的对象或包的标准的valueof方法将自动地转换为Bean属性的类型。

如果是一个表达式,那么它的类型就必须和它将要设定的属性值的类型一致。

如果参数值为空,那么对应的属性值也不会被设定。

另外,不能在一个<jsp:setProperty>中同时使用param和value。因为两种都是设置Bean属性的值,只是方式不同而已。

<jsp:useBean>和<jsp:setProperty>是联系在一起的,它们使用的Bean实例的名字也必须匹配,即在<jsp:setProperty>中的name值应当和<jsp:useBean>中ID的值相同。

 

<jsp:getProperty>

jsp:getProperty操作时对jsp:setProperty操作的补充,它用来访问一个Bean的属性。它访问的属性值将它转化成一个String,然后发送到输出流中。如果属性是一个对象,将调用toString方法。它使用方法如下:

 <jsp:getProperty name="beanName" property="propertyName"/>

例如:

<jsp:useBean id="usersession" scope="session" class="com.user.UserSession">

<jsp:getProperty name="usersession" property="name"/>

<jsp:getProperty name="usersession" property="password"/>

 

name="beanName"

这是个必选属性。其值为Bean的名字,为在这之前用jsp:useBean引入的名字。

property="propertyName"

这是个必选属性。其值为所指定的Bean的属性名

<jsp:getproperty>标签有一些限制:不能使用<jsp:getPropery>检索一个已经被索引了的属性

 

<jsp:useBean>

  <jsp:useBean>标签用来在JSP页面中创建一个Bean实例,并指定它的名字及作用范围。它保证对象在标签指定的范围内可以使用。定义的语法如下:

 <jsp:useBean id="id" scope="page|request|session|application"typeSpec/>

其中id是一个大小写相关的名字,用来表达这个实例;scope表示此对象可以使用的范围;

typeSpec可以是以下四者之一:

1. class="className"

2. class="className" type="typeName"

3. beanName="beanName" type="typeName"

4. type="typeName"

例如:

<jsp:useBean id="shopcart" scope="session" class="session.Carts"/>

<jsp:setProperty name="shopcart" property="*"/>

<jsp:useBean id="checking" scope="session" class="bank.Checking">

<jsp:setProperty name="checking" property="balance" value="0.0"/>

</jsp:useBean>

 

id="name"

 这在所定义的范围中确认Bean的变量。在定义某个JavaBean时,需要指定它的ID,通过此ID对JavaBean的实例对象进行引用。这个变量名必须符合所使用的脚本语言的规定(在Java Programming Language中,这个规定在Java Language 规范中已经写明),而且变量名对大小写敏感。如果要使用的是一个已经创建好的Bean,那么这个ID的值必须与原来的那个ID值一致。

 

scope="page|requesT|session|application"

 其值表示Bean存在的范围及ID变量名的有效范围。scope的默认值是page,以下是详细说明:

 1. page  能够在包含<jsp:useBean>标签的JSP及此文件中的所有静态包含文件中使用Bean,直到夜幕执行完毕向客户端发回响应或转到另一个文件为止。超出这个范围Bean就失效。

2. request  在请求的范围内使用有效。可以使用request对象访问Bean,比如:

         request.getAttribute(name);

其中name是指Bean实例化的名字。

3. session 从创建Bean开始,就可以在session有效范围内使用这个Bean,这个Bean对于JSP来说是共享的。
需要注意的是,在创建Bean的JSP文件中的<%@ page%>指令中必须指定session=True,否则可能会导致致命的错误发生。

  可以使用session对象访问Bean,比如

  session.getValue(name);

其中name是指Bean实例化的名字。

4. application 同session一样,从创建Bean开始,就可以在任何使用相同application的JSP文件中使用Bean。application对象在应用服务器启动时就创建了,直到应用服务器关闭。这个Bean存在整个application生存周期内,任何在此分享application的JSP文件都能使用同一Bean。

可以使用application对象访问Bean,比如

application.getAttribute(name);

其中name是指Bean实例化的名字。

 class="className"

  这是Bean的类路径及类名。这个class不能使抽象的,必须有一个公用的、没有参数的构造器。该packaged 的名字对大小写敏感。

 BeanName="beanName" type="typeName"

 使用instantiate方法从一个class中实例化一个Bean,同时还可以指定Bean的类型。

 type="typeName"

 type可以是一个类本身(class)也可以是一个类的父类,或者是一个类的借口。如果没有使用class或BeanName表示Bean的名字,其形式为"a.b.c"。<jsp:useBean>用于定位或实例化一个JavaBean组件。<jsp:useBean>首先试图定位一个Bean实例,如果这个Bean不存在,那么<jsp:useBean>就会从一个class或模板中进行实例化。另外,<jsp:useBean>标签的主体部分通常包含<jsp:setProperty>标签,用于设置Bean的属性值。<jsp:useBean>的主体仅仅在<jsp:useBean>实例化Bean时才会被执行。如果这个Bean已经存在,<jsp:useBean>能够定位它,那么主体中的内容将不再起作用。

 

<jsp:plugin>

   jsp:plugin用来产生客户端浏览器的特别标签(Object或者 Embed),可以使用它来插入Applet或者JavaBean。

当JSP文件被编译并把结果发送到浏览器时,<jsp:plugin>元素将会根据浏览器的版本替换成<object>或者<embed>元素。

需要注意的是,<Object>用于HTML4.0<embed>用于HTML3.2.

一般来说,<jsp:plugin>元素会指定对象是Applet还是Bean,同样也会指定Class的名字,另外还会指定将从哪里下载这个Java插件。

<jsp:plugin

   type="bean|applet"

   code="classFileName"

   codebase="classFileFirectoryName"

   [name="instanceName"]

   [archive="URIToArchive,...."]

   [align="botton|top|middle|left|right"]

   [height="displyPixels"]

   [width="displyPixels"]

   [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:plugin type= applet code="com.hellking.test.MyApplet.class" codebase=".">

 <jsp:params>

             <jsp:param name="aParameterName" value="aParamterNameValue"/>

 </jsp:params>

 <jsp:fallback>

        <p>Unable to load applet</p>

</jsp:fallback>

</jsp:plugin>

 

type="bean|applet"

  这是将被执行的插件对象的类型。必须在Bean和Applet中指定一个,因此这个属性没有默认值

code="classFileName"

这是插件将执行的Java类文件名称。在名称中必须包含扩展名,且此文件必须在用codebase属性指明的目录下。

codebase="classFileDirectoryName"

这包含插件将运行的Java类的目录或指向这个目录的路径。默认此JSP文件的当前路径

name="instanceName"

这是Bean或Applet的实例的名称。使得被同一个JSP文件调用的Bean或Applet之间的通信成为可能。

archive="URIToArchive,......."

这是以逗号分隔的路径名列表,是那些用于codebase指定的目录下的类装载器预装载的存档文件所在的路径名。

align="botton|top|middle|left|right"

图形、对象、Applet的排序方式。

height="displayPixels" width="displayPixels"

这是Applet或Bean将要显示的长、宽的值。此值为数字,单位为像素。

hspace="leftRightPixels" vspace="topBottomPixels"

这是Applet或Bean显示时在屏幕左右、上下所需留下的空间大小,单位为像素

jreversion="JREVersionNumber|1.1"

 这是Applet或Bean运行所需的java Runtime Environment的版本,默认是1.1

nspluginurl="URLToPlugin"

这是NetScape Navigation 用户能够使用的JRE的下载地址,标准为www.sun.com

iepluginurl="URLToPlugin"

这是IE用户能是使用的JRE的下载地址

<jsp:params>

[<jsp:param name="parameterName" value="{parameterValue|<%=expression%>}"/>]

</jsp:params>

表示需要向Applet或Bean传送的参数或参数值

<jsp:fallback>text message for user</jsp:fallback>

这是用于Java插件不能启用时显示给用户的一段文字。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics