1. JSP动态WEB技术

JSP文件结构及主要标签

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

<%@ page import="java.util.*“ %>

...

<HTML>

 <BODY>

其他 HTML 语言

<%

  符合JAVA 语法的 JAVA 语句

%>

 其他 HTML 语言

 </BODY>

</HTML>

JSP示例(Hello.jsp)

 

JSP示例(Hello_Date.jsp)

JSP示例(浏览结果)

JSP语法概述

n       JSP原始代码中包含了JSP元素和Template(模板) data两类

n       Template data指的是JSP引擎不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的内容等 ,这些数据会直接传送到客户端的浏览器

n       JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。

jsp例子(hi.jsp)

JSP语法

JSP语法分为三种不同的类型

编译器指令(DIRECTIVE) 例如: <%@ page import=“java.io.*” %>

脚本语法(SCRIPTING)

动作语法(ACTION) 例如: <jsp:forward><jsp:getProperty><jsp:include>

/------------------------------------------------------------------------------------------------------/

脚本语法包括

Ø         “HTML注释”:<!— comments -->

Ø         隐藏注释”:<%-- comments --%>

Ø         声明

Ø         表达式

Ø         脚本段

编译器指令包括包含指令页指令“taglib指令

它们包含在“<%@ %>”卷标里。两个主要的指令是pageinclude

动作语法包括<jsp:forward><jsp:include><jsp:plugin> <jsp:getProperty><jsp:setProperty><jsp:useBean>

/------------------------------------------------------------------------------------------------------/

HTML注释

JSP 语法格式如下:

<!-- comment [ <%= expression %> ] --> <!-- 注释 [<%= 表达式 %> ] -->

这种注释发送到客户端,但不直接显示,在源代码中可以查看到。

<body>

 <!-- This file displays the user login screen -->

       未显示上一行的注释。

</body>

<body>

 <!--This page was loaded on <%= (new java.util.Date()).toLocaleString() %> -->

在源文件中包括当前时间。

 </body>

隐藏注释

JSP 语法格式如下:<%-- 注释 --%>     不发送到客户端。

<body>

<h2>A Test of Comments</h2>

<%-- This comment will not be visible in the page source --%>

</body>

IE中查看源代码:

声明

JSP 语法格式如下:

<%! declaration; [ declaration; ] ... %> <%! 声明; [声明; ] ... %>

<%@ page language=”java” import=”java.util.*” %>

<body>

<%! int i = 0; %>

<%! int a, b, c; %>

<%! Date date; %>

</body>

表达式

用于在页面上输出信息,语法格式如下:

<%= expression %> <%= 表达式 %>

<%@ page language="java" import="java.util.*" %>

<body>

<center>

<%! Date date=new Date(); %>

<%! int a, b, c; %>

<% a=12;b=a; c=a+b;%>

<font color="blue">

<%=date.toString()%>

</font> <br>

<b>a=<%= a %></b><br>

<b>b=<%= b %></b><br>

<b>c=<%= c %></b><br>

</center>      

</body>

执行结果

脚本段

JSP 语法格式如下:

<% code fragment %> <% 代码 %>

<%@ page language="java" import="java.util.*" %>

<%! int condition;%>

       <body>

<%

              condition=1;

              switch(condition){

                     case 0:

                     out.println("You must select condition 0!"+"<br>");

               break;

               case 1:

               out.println("You must select condition 1!"+"<br>");

break;

              case 2:

                    out.println("You must select condition 2!"+"<br>");

             break;

              default:

                    out.println("Your select not in ""0,1,2"",select again!!"+"<br>");

              }

       %>  

</body>     

脚本段执行结果:

转义符: 双引号 "“ ,单引号"’,反斜杠"",回车"r,换行"n,制表符"t,退格     "b

包含指令

include指令:向当前页中插入一个静态文件的内容。

JSP 语法格式如下:

<%@ include file="relativeURL" %> <%@ include file="相对位置" %>

<body bgcolor="white">

<font color="blue">

The current date and time are

<%@ include file=“peixun2.6.1.jsp" %>

</font>

</body>

“peixun2.6.1.jsp”

<%@ page import="java.util.*" %>

<%=(new java.util.Date() ).toLocaleString() %>

Page指令

“Page”指令用于定义JSP文件中的全局属性。

JSP 语法格式如下:

<%@ page

[ language="java" ]

[ extends="package.class" ]

[import="{package.class | package.*},..." ]

[ session="true | false" ]

[ buffer="none | 8kb | sizekb" ]

[ autoFlush="true | false" ]

[ isThreadSafe="true | false" ]

[ info="text" ]

[ errorPage="relativeURL" ]

[ contentType="mimeType

[;charset=characterSet]" | "text/html

; charset=ISO-8859-1" ]

[ isErrorPage="true | false" ]

%>

属性:

1language="java" 声明脚本语言的种类,目前只能用"java"

2.import="{package.class | package.* },..." 需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。下面的包在JSP编译时已经导入了,所以就不需要再指明了:

java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*

3errorPage="relativeURL"  设置处理异常事件的JSP文件。

4isErrorPage="true | false"  设置此页是否为出错页,如果被设置为true,你就能使用exception对象

page指令详说

“<%@ page %>”指令作用于整个JSP页面,同样包括静态的包含文件。但是“<%@ page %>”指令不能作用于动态的包含文件,比如 <jsp:include>。可以在一个页面中用上多个“<%@ page %>”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Languageimport语句引入得是Java语言中的类),所以此属性就能多用几次。无论把“<%@ page %>”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。

<%@ page import="java.util.*, java.lang.*" %> 

<%@ page buffer="24kb" autoFlush="false" %> 

<%@ page errorPage="error.jsp" %>

<body>

Test for using 'Page'.

</body>

page指令例子运行结果:

taglib指令

JSP语法

<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>

用于引入定制标签库

属性

1uri="URIToTagLibrary"

Uniform Resource Identifier (URI)根据标签的前缀对自定义的标签进行唯一的命名,URI可以是以下的内容:Uniform Resource Locator (URL), RFC 2396 定义, 可以从以下位置查看 (http://www.hut.fi/u /jkorpela/rfc/2396/full.html)

Uniform Resource Name (URN), RFC 2396定义

一个相对或绝对的路径  可以是标签库描述文件

2prefix="tagPrefix"

表示标签在JSP中的名称。

在自定义标签之前的前缀,比如,在<public:loop>中的public,如果这里不写public,那么这就是不合法的。请不要用jsp, jspx, java, javax, servlet, sun, sunw做为你的前缀,这些已被Sun公司声明保留。

<%@ taglib uri="http://www.jspcentral.com/tags" prefix="public" %>

       <body>

              <public:loop>

                     <%-- 执行代码 --%>

              </public:loop>

       </body>

<jsp:forward>

JSP 语法格式如下:

1<jsp:forward page={"relativeURL" | "<%= expression %>"} />

2<jsp:forward page={"relativeURL" | "<%= expression %>"} >

<jsp:param name="parameterName" value="{parameterValue |

<%= expression %>}" />

[<jsp:param … />]

</jsp:forward>

“[<jsp:param … />]”指可以有多个“<jsp:param/>”标记。)

1page="{relativeURL | <%= expression %>}"  这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL。这个文件可以是JSP,程序段,或者其它能够处理request对象的文件(asp,cgi,php) 

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

向一个动态文件发送一个或多个参数,这个文件必须是动态文件。如果想传递多个参数,可以在一个JSP文件中使用多个“<jsp:param>”“name”指定参数名,“value”指定参数值

注意:

“<jsp:forward>”标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。“<jsp:forward>”标签以后的代码,将不能执行。

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

       <body>

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

                     <jsp:param name="userName" value="riso"/>

              </jsp:forward>

       </body>

forwardTo.jsp

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

<!--forwardTo.jsp-->

<%

       String useName=request.getParameter("userName");

       String outStr= "谢谢光临!";

       outStr+=useName;

       out.println(outStr);   

%>

运行结果(TOMCAT:

<jsp:include>

包含一个静态或动态文件.

 JSP 语法格式如下:

1<jsp:include page="{relativeURL | <%=expression%>}"   flush="true" />

2<jsp:include page="{relativeURL | <%=expression %>}"   flush="true" >

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

[<jsp:param …/>]

</jsp:include> “[<jsp:param … />]”指可以有多个“<jsp:param/>”标记。)

1page="{relativeURL | <%=expression %>}"

 参数为一相对路径,或者是代表相对路径的表达式。

 

2flush="true"

 这里必须使用flush="true",不能使用false值。而缺省值为false

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

“<jsp:param>”用来传递一个或多个参数到指定的动态文件,能在一个页面中使用多个“<jsp:param>”来传递多个参数,

       <body> 

       <jsp:include page="peixun2.10.1.jsp" flush="true" >

       <jsp:param name="User" value="HiFi King" />

       </jsp:include>

       </body>

peixun2.10.1.jsp

<%

       String username;

       username=request.getParameter("User");

       out.println("Username is "+username+"<br>");

%>

<jsp:include>运行结果(TOMCAT:

<jsp:plugin>

使用“<jsp:plugin>”插入一个appletBean,必要的话还要下载一个Java插件用于执行它。 

JSP 语法格式如下:

<jsp:plugin  type="bean | applet"  code="classFileName"

codebase="classFileDirectoryName"

[ name="instanceName" ]

[ archive="URIToArchive, ..." ]

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

[ height="displayPixels" ]

[ width="displayPixels" ]

[ 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>

1type="bean | applet"   将被执行的插件对象的类型,你必须得指定这个是Bean还是applet,因为这个属性没有缺省值。

2code="classFileName"  将会被Java插件执行的Java Class的名字,必须以.class结尾。这个文件必须存在于codebase属性指定的目录中。

3codebase="classFileDirectoryName"  将会被执行的Java Class文件的目录(或者是路径),如果你没有提供此属性,那么使用<jsp:plugin>jsp文件的目录将会被使用。 

4. name="instanceName"  这个Beanapplet实例的名字,它将会在Jsp其它的地方调用

<jsp:plugin>例子

<jsp:plugin type=applet code="MediaPlay.class" codebase="../classes">

    <jsp:params>

          <jsp:param name="way" value="Hall" />

    </jsp:params>

    <jsp:fallback>

          <p>Unable to load applet</p>

    </jsp:fallback>

</jsp:plugin>

<jsp:useBean>

创建一个Bean实例并指定它的名字和作用范围。

JSP 语法格式如下:

<jsp:useBean  id="beanInstanceName"

scope="page | request | session | application"

{ class="package.class" | type="package.class" |

  class="package.class" type="package.class" |

  beanName="{package.class | <%= expression %>

}" type="package.class" } { /> | > other elements </jsp:useBean>}

1id="beanInstanceName"

在所定义的范围中确认Bean的变量,使之能在后面的程序中使用此变量名来分辨不同的Bean ,这个变量名对大小写敏感,必须符合所使用的脚本语言的规定,这个规定在Java Language 规范已经写明。如果Bean已经在别的“<jsp:useBean>”标记中创建,则当使用这个已经创建过Bean时,id的值必须与原来的那个id值一致;否则则意味着创建了同一个类的两个不同的对象。

2scope="page | request | session | application"

Bean存在的范围以及id变量名的有效范围。缺省值是page,以下是详细说明:

1)        page - 能在包含“<jsp:useBean>”元素的JSP文件以及此文件中的所有静态包含文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。

2)        request - 在任何执行相同请求的Jsp文件中使用这个Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用Request对象访问这个Bean,比如request.getAttribute(beanInstanceName)

3)        session - 从创建Bean开始,就能在任何使用相同sessionjsp文件中使用这个Bean。这个Bean存在于整个Session生存周期内,任何在分享此SessionJsp文件都能使用同一Bean。注意在创建这个BeanJsp文件中“<% @ page %>”指令中必须指定“session="true"”

4)        application - 从创建Bean开始,就能在任何使用相同applicationJsp文件中使用Bean。这个Bean存在于整个application生存周期内,任何在分享此applicationJsp文件都能使用同一Bean.  

3.class="package.class"   使用new关键字以及class构造器从一个class中实例化一个bean。这个class不能是抽象的,必须有一个公用的,没有参数的构造器。这个package的名字区别大小写。

4type="package.class"

如果这个Bean已经在指定的范围中存在,那么赋予这个Bean一个的数据开库类型 。如果使用type属性的同时没有使用classbeanNameBean将不会被实例化。注意packageclass的名称区分大小写

5beanName="{package.class | <%= expression %>}" type="package.class"

使用java.beans.Beans.instantiate方法来从一个class或串行化的模板中实例化一个Bean,同时指定Bean的类型。 Beans.instantiate方法将检查此名称是否表示一个类或一个串行化模板。如果这个Bean是被串行化的,那么Beans.instantiate方法将通过使用一个类装载器读取串行化格式(类似package.class.ser)。

beanName可以是packageclass,也可以是表达式,它的值会传给Beans.instantiate方法。type的值可以和Bean相同,也可以是它的基类,或者是它所实现的接口。  package class 名字区分大小写。

<jsp:getProperty>

JSP 语法格式如下:

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

 属性:

1name="beanInstanceName"

   bean的名字,由<jsp:useBean>指定。

 2property="propertyName"

所指定的Bean的属性名。

<jsp:getProperty>例子

//声明引用的bean

<jsp:useBean id="calendar" scope="page" class="employee.Calendar" />

       <body> 

       Calendar of <jsp:getProperty name="calendar" property="username" />

       </body>

<jsp:setProperty>

设置Bean的属性值.

 JSP 语法格式如下:

<jsp:setProperty  name="beanInstanceName"

{

property= "*"   |

property="propertyName" [ param="parameterName" ]   |

property="propertyName" value="{string | <%= expression %>}"

}/>

1name="beanInstanceName" 表示已经在“<jsp:useBean>”中创建的Bean实例的名字。

2property="*" 储存用户在jsp输入的所有值,用于匹配Bean中的属性。

3property="propertyName" [ param="parameterName" ] 用一个参数值来指定Bean中的一个属性值,一般情况下是从request对象中获得的。其中property指定Bean的属性名,param指定request中的参数名。

4. property="propertyName" value="{string | <%= expression %>}"

使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成Bean属性的类型(转换方法见表4.1)。如果是一个表达式,那么它的类型就必须和将要设定的属性值的类型一致。

如果参数值为空值,那么对应的属性值也不会被设定。此外,不能在同一个“<jsp:setProperty>”中同时使用paramvalue参数

例://建立类rmg.student

package rmg;

public class student {

 private long classNo;

 private String name;

 private int age;

 private boolean sexy;

 

 public student() {       //构造函数

    classNo=970431;

    name="ZZZl";

    age=34;

    sexy=true;

 }

public long getClassNo() {

    return classNo;

 }

 public void setClassNo(long no) {

    this.classNo=no;

 }

 public String getName() {

    return name;

 }

 public void setName(String name) {

    this.name=name;

 }

public int getAge() {

    return age;

 }

 

 public void setAge(int age) {

    this.age=age;

 }

 

 public boolean getSexy() {

    return sexy;

 }

public void setSexy(boolean sexy) {

    this.sexy=sexy;

 }

}

<%--JavaBean.jsp文件,理解useBean动作的scope作用范围 --%>

<html>

<body>

<%-- 引用自己编写的javaBean生成的bean组件 --%>

<jsp:useBean id="student" scope="application" class="rmg.student" />

<%=student.getname()%><br>

<% student.setname("cong"); %>

<%-- getProperty动作来返回bean组件的属性值 --%>

<jsp:getProperty name="student" property="classNo" /> <br>

<jsp:getProperty name="student" property="name" /> <br>

<jsp:getProperty name="student" property="age" /> <br>

<jsp:getProperty name="student" property="sexy" /> <br>

<%-- 取属性值 --%>

<%=student.getClassNo() %> <br>

<%=student.getName() %> <br>

<%=student.getAge() %> <br>

<%=student.getSexy() %> <br>

<%--引用Java类库中生成的bean组件 --%>

<jsp:useBean id="date" scope="session" class="java.util.Date" />

<%=date%><br>

</body>

</html>

第一次运行结果:


以后运行结果:


测试session作用域

<%--JavaBean1.jsp文件,理解useBean动作的scope作用范围-->

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

<html>

<body>

<%-- 引用自己编写的javaBean生成的bean组件 --%>

<jsp:useBean id="student" scope="session" class="rmg.student" />

 

<!-- setProperty动作设定bean组件的属性值-->

<jsp:setProperty name="student" property="classNo" value="000001"/>

<jsp:setProperty name="student" property="name" value="wanglan"/>

<jsp:setProperty name="student" property="age" value="22"/>

<jsp:setProperty name="student" property="sexy" value="true"/>

<%-- 取属性值 --%>

<%=student.getClassNo() %> <br>

<%=student.getName() %> <br>

<%=student.getAge() %> <br>

<%=student.getSexy() %> <br>

<!--JSP类属性设定bean组件的属性值-->

<%student.setClassNo(000002); %>

<%student.setName("John"); %>

<%student.setAge(26); %>

<%student.setSexy(false); %>

<br>

<%=student.getClassNo() %> <br>

<%=student.getName() %> <br>

<%=student.getAge() %> <br>

<%=student.getSexy() %> <br>

</body>

</html>

运行结果


posted @ 2008-09-12 18:01  zqblog007  阅读(430)  评论(0编辑  收藏  举报