1. JSP动态WEB技术
<%@ 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指令”
它们包含在“<%@ %>”卷标里。两个主要的指令是page与include。
动作语法包括<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" ]
%>
属性:
1.language="java" 声明脚本语言的种类,目前只能用"java" 。
2.import="{package.class | package.* },..." 需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。下面的包在JSP编译时已经导入了,所以就不需要再指明了:
java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*
3.errorPage="relativeURL" 设置处理异常事件的JSP文件。
4.isErrorPage="true | false" 设置此页是否为出错页,如果被设置为true,你就能使用exception对象
page指令详说
“<%@ page %>”指令作用于整个JSP页面,同样包括静态的包含文件。但是“<%@ page %>”指令不能作用于动态的包含文件,比如 “<jsp:include>”。可以在一个页面中用上多个“<%@ page %>”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Language,import语句引入得是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" %>
用于引入定制标签库
属性
1.uri="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定义
一个相对或绝对的路径 可以是标签库描述文件
2.prefix="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/>”标记。)
1、page="{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/>”标记。)
1.page="{relativeURL | <%=expression %>}"
参数为一相对路径,或者是代表相对路径的表达式。
2.flush="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>”插入一个applet或Bean,必要的话还要下载一个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>
1.type="bean | applet" 将被执行的插件对象的类型,你必须得指定这个是Bean还是applet,因为这个属性没有缺省值。
2.code="classFileName" 将会被Java插件执行的Java Class的名字,必须以.class结尾。这个文件必须存在于codebase属性指定的目录中。
3.codebase="classFileDirectoryName" 将会被执行的Java Class文件的目录(或者是路径),如果你没有提供此属性,那么使用<jsp:plugin>的jsp文件的目录将会被使用。
4. name="instanceName" 这个Bean或applet实例的名字,它将会在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>}
1.id="beanInstanceName"
在所定义的范围中确认Bean的变量,使之能在后面的程序中使用此变量名来分辨不同的Bean ,这个变量名对大小写敏感,必须符合所使用的脚本语言的规定,这个规定在Java Language 规范已经写明。如果Bean已经在别的“<jsp:useBean>”标记中创建,则当使用这个已经创建过Bean时,id的值必须与原来的那个id值一致;否则则意味着创建了同一个类的两个不同的对象。
2.scope="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开始,就能在任何使用相同session的jsp文件中使用这个Bean。这个Bean存在于整个Session生存周期内,任何在分享此Session的Jsp文件都能使用同一Bean。注意在创建这个Bean的Jsp文件中“<% @ page %>”指令中必须指定“session="true"”。
4) application - 从创建Bean开始,就能在任何使用相同application的Jsp文件中使用Bean。这个Bean存在于整个application生存周期内,任何在分享此application的Jsp文件都能使用同一Bean.
3.class="package.class" 使用new关键字以及class构造器从一个class中实例化一个bean。这个class不能是抽象的,必须有一个公用的,没有参数的构造器。这个package的名字区别大小写。
4.type="package.class"
如果这个Bean已经在指定的范围中存在,那么赋予这个Bean一个的数据开库类型 。如果使用type属性的同时没有使用class或beanName,Bean将不会被实例化。注意package和class的名称区分大小写
5.beanName="{package.class | <%= expression %>}" type="package.class"
使用java.beans.Beans.instantiate方法来从一个class或串行化的模板中实例化一个Bean,同时指定Bean的类型。 Beans.instantiate方法将检查此名称是否表示一个类或一个串行化模板。如果这个Bean是被串行化的,那么Beans.instantiate方法将通过使用一个类装载器读取串行化格式(类似package.class.ser)。
beanName可以是package和class,也可以是表达式,它的值会传给Beans.instantiate方法。type的值可以和Bean相同,也可以是它的基类,或者是它所实现的接口。 package和 class 名字区分大小写。
<jsp:getProperty>
JSP 语法格式如下:
<jsp:getProperty name="beanInstanceName" property="propertyName" />
属性:
1.name="beanInstanceName"
bean的名字,由<jsp:useBean>指定。
2.property="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 %>}"
}/>
1.name="beanInstanceName" 表示已经在“<jsp:useBean>”中创建的Bean实例的名字。
2.property="*" 储存用户在jsp输入的所有值,用于匹配Bean中的属性。
3.property="propertyName" [ param="parameterName" ] 用一个参数值来指定Bean中的一个属性值,一般情况下是从request对象中获得的。其中property指定Bean的属性名,param指定request中的参数名。
4. property="propertyName" value="{string | <%= expression %>}"
使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成Bean属性的类型(转换方法见表4.1)。如果是一个表达式,那么它的类型就必须和将要设定的属性值的类型一致。
如果参数值为空值,那么对应的属性值也不会被设定。此外,不能在同一个“<jsp:setProperty>”中同时使用param和value参数 。
例://建立类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>
运行结果