Transcript 第四章 JSP页面组成
JSP标记
一般使用JSP标记控制页面属性。JSP标记分为
JSP注释、指令标记和动作标记三类。
指令标记有page、include和taglib。
动作标记主要有include、param、forward、
plugin、useBean。
语法格式
1.JSP注释
注释本身不产生语句功能,只用来增强JSP文件的可读性,
便于用户维护JSP文件。JSP注释分两种:HTML注释和
JSP注释。
(1)HTML注释
JSP页面使用这种注释时,客户端通过浏览器查看JSP源文
件时,能够看到HTML注释文字。其语法格式是:
<! -- 要注释的内容、文字、说明写在这里 -- >
(2)JSP注释
使用这种注释时, JSP引擎编译该页面时会忽略JSP注释。
下面是其语法格式:
<%-- 要注释的内容、文字、说明写在这里 --% >
例子:ex2-2_1.jsp
2. page指令标记
page指令主要用来定义整个JSP页面的各种属性。
一个JSP页面可以包含多个page指令,指令中,
除了import属性外,每个属性只能定义一次,否
则JSP页面编译将出现错误。下面是page指令格
式:
<%@ page
[language=”java”]
[extends=”classname”]
[import=”packname/classname”]
[session=”true/false]
[buffer=”none/sizekb]
[autoFlush=”true/false”]
[isThreadeSafe=”true/false”]
[info=”info_text”]
[errorPage=”error_url”]
[isErrorPage=”true/false”]
[contentType=”MIME_type”]
[pageEncoding=” “]
%>
本标记由多个 属性名=”属性值”对构成,通过这种方式设置
的属性。
页面
(1)language
language属性定义了JSP页面中所使用的脚本
语言。目前JSP必须使用的是java语言,因此
该属性的默认值为“java”,因此也要求JSP页
面的编程语言必须符合java语言规则。
Language属性设置如下:
language=“java”
使用该属性需要注意的是,在第一次出现脚本
元素之前,必须设置该属性的参数值,否则将
会导致严重的错误。
(2)extends
该属性定义JSP页面产生的Servlet所继承的父
类。由于该属性将限制JSP引擎提供特定的超
类,这些超类可能会改善所提供服务的品质,
因此在使用该属性时必须十分注意。
(3)import
该属性和一般的java语言中的import关键字意
义一样,它描述了脚本环境中要使用的类。
(4)session
该属性指定JSP页面是否参与一个Http会话,
它的默认值是ture,表示该属性所在的页面参
与指定Http的会话。
(5)buffer
该属性指定输出到客户端的流的缓冲模式,如
果属性值为none,将不缓冲,输出直接通过
ServletResponse的PrintWriter输出。如果该
属性值为一个数字,该数字就表示缓冲区的大
小,它的单位是千字节。并且输出的大小至少
不会小于这个值。通常,默认的缓冲区大小为
8KB。
(6)autoFlush
该属性的默认值为ture,表示当缓冲区满时,
到客户端的输出将会自动刷新,若该属性为
false,则当缓冲区满时,将会出现缓冲区溢出
异常。
需要注意的是,在buffer属性值取none的时候,
autoflush属性值不能设置为false。因为当
buffer取值为none时,表明没有设置缓冲区,
因而JSP页面的jspWriter本身将会自动刷新缓
冲区。
(7)isTheadSafe
该属性用来设置JSP页面是否可以多线程使用。
默认值为ture,如果采用默认值,则在运行
JSP页面时,可能会同时接受多个客户的请求。
当该属性取值为false时,一个JSP处理器将会
逐个的接受客户的请求。
(8)info
在该属性中定义了一个任意的字符串,可以用
来说明JSP页面中待说明的信息,该字符串将
会直接加入到翻译好的页面中,可以通过
Servlet.getservletInfo()方法获得该属性的值。
(9)errorPage
该属性用于表示当发生异常错误时调用的JSP页面,通常
默认忽略。
(10)isErrorPage
该属性定义了当前的JSP页面是否为另外一个JSP页面错
误显示的目标。
(11)contentType
该属性定义了JSP页面及其相应的字符编码以及JSP页面
响应的MIME类型。对该属性设置的格式如下:
“TYPE ; charset=CHARSET”
(需要注意的是分号后面有一空格)
TYPE的默认值为“text/html”,字符编码的默认值为ISO8859-1。
(12)pageEncoding
该属性描述JSP页面的字符编码,通常默认值
为。’’ISO-8859-1’’
(13)isELIgnored
该属性用来设置EL(Expression Language,表
达语言,已纳入JSP2.0为标准规范之一)是否
被忽略,如果取值为ture,则忽略EL表达式计
算,反之则不忽略。该属性的默认值依
据”web.xml”描述文件的版本确定,
Servlet2.3以前的版本将忽略。
例子page.jsp
3. include指令标记
该指令标记的语法格式如下:
<%@ include file=”文件名字” %>
该指令标记的作用是在该标记的位置处,静态插入一
个文件。所谓静态插入指用被插入的文件内容代替该
指令标记与当前JSP文件合并成新的JSP页面后,再由
JSP引擎转译为java文件。
被插入的文件要求满足以下条件:
(1) 被插入的文件必须与当前JSP页面在同一WEB服务
目录下。
(2) 被插入的文件与当前JSP页面合并后的JSP页面必
须符合JSP语法规则。
例如, 下面的程序是实现相同功能的两种程序结构:第一
种程序结构中,使用了include指令标记,即在ex22_2.jsp页面中静态插入一个Computer.jsp文件。第二种程
序结构中(ex2-2_2_1.jsp),没有使用include指令标记。
下面是实现这两种程序结构的代码。
第一种程序结构
本程序由两个文件组成,它们是ex2-2_2.jsp页面和
Computer.jsp页面。
ex2-2_2.jsp
Computer.jsp
第二种程序结构
本程序直接将ex2-2_2.jsp页面内容和Computer.jsp页
面内容合并在一起,构成页面ex2-2_2_1.jsp。
ex2-2_2_1.jsp
4. taglib指令标记
该指令用来扩展标记指令的,其语法格式如下:
<%@taglib uri=”taglibURI” prefix=”tagPrefix” %>
其中:
uri是一个标记库描述器,用来唯一地命名一组定制
的标记,并且告诉包容器,如何处理特殊的标记。
TagPrefix定义了JSP页面里要引用该标记时的前缀,
需要注意的是,这些前缀不能是jsp、jspx、java、
javax、sun、servlet和sunw。
5. include动作标记
include动作标记的语法格式如下:
<jsp:include page=”文件的名字” />
或者
<jsp:include page=”文件的名字”>
</jsp:include>
该标记的作用是当前JSP页面动态包含一个文件,
即将当前JSP页面、被包含的文件各自独立转译和编
译为字节码文件。当前JSP页面执行到该标记处时,才
加载执行被包含文件的字节码。
6. param动作标记
param动作标记的语法格式是:
<jsp:param name=”变量名字” value=”变量值” />
该标记经常与jsp:incluede、jsp:forward、
jsp:plugin标记一起使用, 将param标记中的变
量值传递给动态加载的文件。
7. forward动作标记
forward动作标记的语法格式:
<jsp:forward page=”要转向的页面”>
</jsp:forward>
或者
<jsp:forward page=”要转向的页面” />
该指令的作用是:当前页面执行到该指令处后转
向其它JSP页面执行。
8. plugin动作标记
plugin动作标记的语法格式:
<jsp:plugin type=”applet” code=”applet程序字节码文件名”
codebase=”applet程序字节码文件所在目录” width=”宽度”…>
<jsp:fallback> 提示信息…
</jsp:plugin>
该动作标记指示JSP页面加载 Java plugin 插件,该插件由客户负
责下载,并使用该插件运行java applet小应用程序。
9.useBean动作标记
该标记创建并使用一个javaBean,在后面章介绍。
计算三角形面积并对程序进行注释
[例子1]由用户输入三条边的长度,判断这三条边能否构成一个三角形,
若能构成三角形,则输出三角形的面积和周长。
问题分析:
通过表单获得三角形三条边的值,然后根据三角形面积计算公式
计算面积,最后输出计算结果。
程序结构:
程序名:ex2-2-1.jsp。
程序算法:
1.创建表单。表单中包含三个文本框,从三个文本框获取三条边的长度。
2.判断三条边能否构成一个三角形,如果不能构成三角形,则输出信息”
不能构成三角形”。
3.如果能构成一个三角形,则计算三角形的面积并输出。
在jsp页面中静态包含文件
[例子2]计算某数据的平方根
问题分析:
在一个页面中使用指令标记”include”,静态包含另一页面文件。
程序结构:
程序包含两个文件。ex2-2_2.jsp页面静态包含Computer.jsp页面。
程序算法
ex2-2_2.jsp :
使用”include”指令标记静态包含页面Computer.jsp
Computer.jsp:
1.创建表单,该表单包含一个文本框,从文本框获取正整数。
2.计算整数的平方根
3.输出平方根
动态加载页面并传递数据
[例子3] 求1到300的连续和
问题分析:
本程序由两个页面构成,由主页面动态加载次页面,并传递参数
300给次页面,由次页面实现求和功能。
程序结构:
页面ex2-2_3.jsp动态加载页面addPage.jsp,并将数据300传递给
变量computer。
程序算法
ex2-2_3.jsp:
1.动态加载页面addPage.jsp。
2.给参数Computer传递数据300。
addPage.jsp:
1.获得参数Computer的值
2.求1到computer的和
3.输出数据
程序代码:
ex2-2_3.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY BGCOLOR=Cyan >
<P>动态加载页面文件addPage计算1~300的连续和
<jsp:include page="addPage.jsp">
<jsp:param name="computer" value="300"/>
</jsp:include>
</BODY>
</HTML>
addPage.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<%
String str=request.getParameter("computer"); //获取值
int n=Integer.parseInt(str);
int sum=0;
for(int i=1;i<=n;i++)
{
sum=sum+i;
}
%>
<P>
从1到<%=n%>的连续和是:
<BR>
<%=sum%>
</BODY>
</HTML>
重定向页面并传递数据
[例子4]输出随机数(0~1)
问题分析:
本程序由两个页面构成,由一个主页面产生随机数并传递给另一
重定向页面,重定向页面获得随机数并输出此数据。
程序结构:
主页面ex2-2_4.jsp重定向到redirect.jsp页面。
程序算法:
ex2-2_4.jsp:
1. 产生随机数number,
2. 转向页面redirect.jsp
redirect.jsp:
1.获得number值
2.输出number的值
程序代码:
ex2-2_4.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<%
double i=Math.random();
%>
<jsp:forward page="redirect.jsp">
<jsp:param name="number" value="<%=i%>" />
</jsp:forward>
</BODY>
</HTML>
redirect.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY bgcolor=cyan>
<FONT size=8>
<%
String str=request.getParameter("number");
if(str==null) str="0";
double n=Double.parseDouble(str);
%>
<P>您传过来的数值是:<BR>
<%=n%>
</FONT>
</BODY>
</HTML>