第5章JSP的页面元素Word格式文档下载.docx
《第5章JSP的页面元素Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第5章JSP的页面元素Word格式文档下载.docx(26页珍藏版)》请在冰点文库上搜索。
主要分为两种:
1.使用<
............%>
标记:
用来声明JSP页面中的变量和方法
2.使用标记<
%............%>
:
是一段
JSP页面的基本结构
⏹JSP页面文件是由传统的HTML页面文件中加入Java程序片和JSP标签构成的。
⏹5种元素组合而成:
1)普通的HTML标记符
2)JSP标签,如指令标签、动作标签
3)
JSP的脚本部分
变量和方法的声明
4)Java程序片
5)Java表达式
●把JSP页面中普通的HTML标记符号,交给客户的浏览器执行显示。
●JSP标签、数据和方法声明、Java程序片由服务器负责执行,将需要显示的结果发送给客户的浏览器。
●Java表达式由服务器负责计算,并将结果转化为字符串,然后交给客户的浏览器负责显示。
变量和方法、类的声明
在“<
”标记符号之间声明变量和方法。
声明方法
”之间声明方法,该方法在整个JSP页面内有效,但是在该方法内定义的变量只在该方法中有效。
这些方法将在JAVA程序片中被调用,当方法被调用时,方法内定义的变量被分配内存,调用完毕即可释放所占的内存。
声明类
可以在“<
”之间声明一个类,该类在JSP页面内有效,即在JSP页面的JAVA程序片部分,可以使用该类创建对象。
Java程序片
•在“<
”之间的java程序称为Java程序片
•可以有多个程序片在一个JSP页面中
•程序片中的变量是局部变量
•可以把程序片分隔成多个程序片
表达式
⏹可以在“<
%=”和“%>
”之间插入一个表达式
⏹<
%=是一个完整的符号
⏹表达式的值由服务器负责计算
⏹表达式的结果用字符串形式发送到客户端显示
JSP中的注释
⏹HTML注释:
在标记符号“<
--”和“-->
”之间加入注释内容。
⏹JSP注释:
%--”和“--%>
%--注释--%>
JSP引擎忽略JSP注释
隐藏注释
写在JSP程序中,但不是发给客户。
<
%--comment--%>
例子:
%@pagelanguage="
java"
%>
html>
head>
title>
ACommentTest<
/title>
/head>
body>
h2>
ATestofComments<
/h2>
%--Thiscommentwillnotbevisibleinthepagesource--%>
/body>
<
/html>
用隐藏注释标记的字符会在JSP编译时被忽略掉。
这个注释在你希望隐藏或注释你的JSP程序时是很有用的。
注:
JSP编译器不是会对<
%--and--%>
之间的语句进行编译的,它不会显示在客户的浏览器中,也不会在源代码中看到在<
%----%>
之间,你可以任意写注释语句,但是不能使用"
--%>
"
如果你非要使用请用"
--%\>
。
JSP语法
(二):
JSP代码(脚本元素)
用来在JSP中包含脚本代码(通常是JAVA代码)的。
它声明变量和方法,包含任意脚本代码和对表达式求值。
主要包含三种类型:
●声明
●JAVA程序块
●表达式
声明
在JSP程序中声明合法的变量和方法
declaration;
[declaration;
]+...%>
inti=0;
inta,b,c;
Circlea=newCircle(2.0);
例子
声明你将要在JSP程序中用到的变量和方法。
你也必须这样做,不然会出错。
当JSP页面被编译执行的时候,整修页面被编译成一个类,这些变量是JSP页面类的成员变量。
同时这些变量也是被共享的,任何一个用户的操作都会影响到其他用户。
%@pagecontentType="
text/html;
charset=GBK"
inti=0;
%
i++;
out.print(i);
%>
个人访问本站
例:
执行程序,并刷新浏览器,可以看到值是增加的。
也可以声明函数,一地在函数前面加上synchronized关键字,功能是当前一个用户在执行该方法的时候,其他的用户必须等待,直到该用户完成操作。
使用方法如程序:
intnumber=0;
synchronizedvoidcountPeople(){
number++;
}
countPeople();
您是第<
%out.print(number);
个访问本站的客户。
你可以一次性声明多个变量和方法,只要以"
;
结尾就行,当然这些声明在Java中要是合法的。
当你声明方法或变量时,请注意以下的一些规则:
●声明必须以"
结尾
●你可以直接使用在<
%@page%>
中被包含进来的已经声明的变量和方法,不需要对它们重新进行声明。
●一个声明仅在一个页面中有效。
如果你想每个页面都用到一些声明,最好把它们写成一个单独的文件,然后用<
%@include%>
或<
jsp:
include>
元素包含进来。
●在JSP中,声明是一段JAVA代码,它用来定义在产生的类文件中的类范围变量和方法。
当JSP页面进行初始化并且有了“类”的范围时,进行声明的初始化。
对于其他的声明和表达式或者是代码来讲,在声明中定义的任何东西在整个JSP中都可以使用。
声明段在<
和%>
之间。
代码块
包含一个有效的程序段.
JSP语法
%codefragment%>
%Stringname=null;
if(request.getParameter("
name"
)==null){%>
%@includefile="
error.html"
%}else{
foo.setName(request.getParameter("
));
if(foo.getName().equalsIgnoreCase("
integra"
))
name="
acura"
if(name.equalsIgnoreCase("
)){%>
”之间插入Java程序片,一个JSP页面可以有许多JAVA程序片,这些代码块将被JSP服务器按照顺序执行。
在一个代码块中声明的变量是JSP页面的局部变量,只在当前页面中有效,如程序所示
%inti=0;
该程序去掉了上面程序中的“!
”,这样变量i就变成局部变量了。
该变量是局部变量,所以不能用来计数,该变量始终为1。
可包含多个jsp语句,方法,变量,表达式。
能做以下的事:
●声明将要用到的变量或方法(参考声明).
●编写JSP表达式(参考表达式).
●使用任何隐含的对象和任何用<
useBean>
声明过的对象
●编写JSP语句(如果你在使用Java语言,这些语句必须遵从JavaLanguageSpecification,).
●任何文本,HTML标记,JSP元素必须在scriptlet之外
●当JSP收到客户的请求时,scriptlet就会被执行,如果scriptlet有显示的内容,这些显示的内容就被存在out对象中。
Scriptlet是一段可以在处理请求时间执行的JAVA代码。
Scriptlet包含在<
%和%>
Scriptlet具体要做什么要看代码是如何写的。
它可以产生输出,发到客户的输出流中。
在被编译的类中,多个这样的代码将按在JSP程序出现的顺序合并成一个。
像其他的JAVA代码或方法一样,可以修改在它内部的对象,作为方法引用的结果
在查看网页源代码的时候,这一部分是看不见的,只有执行的结果。
因为这里的代码是被服务器执行的。
JavaScript代码是可以看到的,因为JavaScript是被浏览器解释执行的。
表达式
包含一个符合JSP语法的表达式
fontcolor="
blue"
>
%=map.size()%>
/font>
b>
%=numguess.getHint()%>
/b>
表达式元素表示的是一个在脚本语言中被定义的表达式,在运行后被自动转化为字符串,然后插入到这个表达示在JSP文件的位置显示。
因为这个表达式的值已经被转化为字符串,所以你能在一行文本中插入这个表达式.
当你在JSP中使用表达式时请记住以下几点:
●你不能用一个分号("
;
)来作为表达式的结束符.但是同样的表达式用在scriptlet中就需要以分号来结尾了!
查看Scriptlet这个表达式元素能够包括任何在JavaLanguageSpecification中有效的表达式.
●有时候表达式也能做为其它JSP元素的属性值.一个表达式能够变得很复杂,它可能由一个或多个表达式组成,这些表达式的顺序是从左到右。
表达式是用于在返回给客户的响应流中产生输出值的一个Scriptlet的简单表示法。
当表达式进行计算时,结果转换成了一个字符串并且显示出来。
一个表达式被封装<
%=和%>
在之间。
如果表达式的任何部分是一个对象。
就通过使用这个对象的toString()方法进行转换
JSP语法(三):
JSP指令
JSP指令(directive)是用作从JSP发送到JSP包容器上的一个信息。
它们用来设置全局变量,如声明类、要实现的方法和输出内容的类型等等。
它们并不向客户产生任何输出。
所有的指令都在整个JSP文件的范围内有效。
换句话说,一个指令影响整个JSP文件,并且仅仅只是这个JSP文件。
在标签中指令都是用@字符在标签内标出的,一般的语法是:
%@指令名attribute=”value”attribute=”value”%>
三类指令是:
●页面(Page)指令
●Include指令
●Taglib指令
JSP指令标签
⏹Page指令:
用来定义整个JSP页面的一些属性和这些属性的值。
⏹Page指令格式:
%@page属性1=“属性1的值”属性2=“属性2的值”…%>
注意:
1)page指令的作用对整个页面有效,与位置无关,习惯写在最前面。
2)一个属性可以指定几个属性值,属性值之间用逗号分隔。
3)可以使用多个page指令给属性import指定几个值,但其他属性只能使用一次page指令给属性值指定的一个值。
Page指令几个常用的属性
●language属性:
定于JSP页面使用的脚本语言,该属性的值目前只能取JAVA
格式:
%@pagelanguage=“java”%>
●import属性:
为JSP页面引入JAVA核心包中的类,就可以在JSP页面的程序片部分、变量及函数声明部分、表达式部分使用包中的类。
%@pageimport=“java包中的类”%>
●contentType属性:
定义JSP页面响应MIME类型和JSP页面字符的编码。
属性值一般形式时“MIME”或“MIME类型;
charset=编码”,
常用的格式:
%@pagecontentType=“text/html;
charset=GB2312”%>
●session属性:
用于设置是否需要使用内置的session对象,session属性的值可以时true或false,session属性默认的值是true。
●buffer属性:
内置输出对象out负责将服务器的某些信息或运行结果发送到客户端显示,buffer属性用来指定out设置的缓冲区的大小或不使用缓冲区。
%@pagebuffer=“kb”%>
默认值是8kb
●autoFlush属性:
指定out的缓冲区被填满是,缓冲区是否自动刷新。
可以取true或false,默认是true。
%@pageautoFlush=“true[false]”%>
当buffer的值是none时,autoFlush的值就不能设置成false。
●isThreadSafe属性:
用来设置JSP页面是否可多线程访问。
该属性值可以取true或false。
默认是
%@pageisThreadSafe=“true[false]”%>
●Info属性:
该属性为JSP页面准备一个字符串,属性值是某个字符串。
%@pageinfo=“字符串”%>
使用getServletInfo()方法来获取info属性的属性值。
Page指令
定义JSP文件中的全局属性。
页面指令定义了许多影响整个页面的重要属性。
单一的JSP页面可以包含多个页面指令,在过程中,所有的页面指令被制取出来并同时应用到同一个页面上。
然而在给定的JSP中,任何由页面指令定义的属性/值只能出现一次。
(除了import属性外,因为可以多次引入。
)
JSP语法:
page指令主要有如下属性:
[language="
ScriptLanguage"
]
[extends="
package.class"
]
[import="
{package.class|package.*},..."
[session="
true|false"
[buffer="
none|8kb|sizekb"
[autoFlush="
[isThreadSafe="
[info="
text"
[errorPage="
relativeURL"
[contentType="
mimeType[;
charset=characterSet]"
|"
text/html;
charset=ISO-8859-1"
[isErrorPage="
%@pageimport="
java.util.*,java.lang.*"
%@pagebuffer="
5kb"
autoFlush="
false"
%@pageerrorPage="
error.jsp"
描述
%@page%>
指令作用于整个JSP页面,同样包括静态的包含文件。
但是<
指令不能作用于动态的包含文件,比如<
include>
你可以在一个页面中用上多个<
指令,但是其中的属性只能用一次,不过也有个例外,那就是import属性。
因为import属性和Java中的import语句差不多(参照JavaLanguage),所以你就能多用此属性几次了.
无论你把<
指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。
不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。
Include指令标签
Include指令:
在JSP页面内某处整体嵌入一个文件,使用该指令标签。
格式:
%@includefile=“文件的名字”%>
在JSP页面出现该指令的位置处,静态插入一个文件,被插入的文件必须是可访问和可使用的。
即该文件必须和当前JSP页面在同一个Web服务目录中。
静态插入:
就是当前JSP页面和插入的部分合并成一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译成Java类文件。
新合成的JSP页面必须符合JSP语法规则。
Taglib指令
定义一个标签库以及其自定义标签的前缀。
%@tagliburi="
URIToTagLibrary"
prefix="
tagPrefix"
public"
public:
loop>
……….
/public:
%@taglib%>
指令声明此JSP文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀。
这里自定义的标签含有标签和元素之分。
因为JSP文件能够转化为XML,所以了解标签和元素之间的联系很重要。
标签只不过是一个在意义上被抬高了点的标记,是JSP元素的一部分。
JSP元素是JSP语法的一部分,和XML一样有开始标记和结束标记。
元素也可以包含其它的文本,标记,元素。
比如,一个jsp:
plugin元素有<
plugin>
开始标记和 <
/jsp:
结束标记,同样也可以有<
params>
和<
fallback>
元素。
你必须在使用自定义标签之前使用<
指令,而且你可以在一个页面中多次使用,但是前缀只能使用一次
属性
1.uri="
UniformResourceIdentifier(URI)根据标签的前缀对自定义的标签进行唯一的命名,URI可以是以下的内容:
●UniformResourceLocator(URL),由RFC2396定义,查看http:
//www.hut.fi/u/jkorpela/rfc/2396/full.html
●UniformResourceName(URN),由RFC2396定义一个相对或绝对的路径
2.prefix="
在自定义标签之前的前缀,比如,在<
中的public,如果这里不写public,那么这就是不合法的。
请不要用jsp,jspx,java,javax,servlet,sun,和sunw做为你的前缀。
forward>
重定向一个HTML文件,JSP文件,或者是一个程序段。
forwardpage={"
}/>
or
}>
paramname="
parameterName"
value="
{parameterValue|<
}"
/>
+
forwardpage="
/servlet/login"
username"
value="
jsmith"
标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象.<
标签以下的代码,将不能执行.
你能够向目标文件传送参数和值,在这个例子中我们传递的参数名为username,值为scott,如果你使用了<
param>
标签的话,目标文件必须是一个动态的文件,能够处理参数.
如果你使用了非缓冲输出的话,那么使用<
时就要小心。
如果在你使用<
之前,jsp文件已经有了数据,那么文件执行就会出错.
page="
{relativeURL|<
这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL.这个文件可以是JSP,程序段,或者其它能够处理request对象的文件(如asp,cgi,php).
向一个动态文件发送一个或多个参数,这个文件一定是动态文件。
如果你想传递多个参数,你可以在一个JSP文件中使用多个<
name指定参数名,value指定参数值。
getProperty>
获取Bean的属性值,用于显示在页面中
getPropertyname="
beanInstanceName"
property="
propertyName"
useBeanid="
calendar"
scope="
page"
class="
employee.Calendar"
Calendarof<
get