第5章JSP的页面元素.docx
《第5章JSP的页面元素.docx》由会员分享,可在线阅读,更多相关《第5章JSP的页面元素.docx(26页珍藏版)》请在冰点文库上搜索。
第5章JSP的页面元素
第5章 JSP的页面元素
●所有HTML文件可以在资源管理器中双击执行
●但是JSP文件必须先放到Web服务器中,然后通过HTTP的方式访问。
因为文件内所有<%%>内代码是被Web服务器解释执行的。
●在一个JSP页面中,主要分为三种元素:
编译指令、操作指令和JSP代码。
1.编译指令告诉JSP的解释引擎(比如:
Tomcat),需要在编译时做什么动作,比如引入一个其它的类,设置JSP页面的使用什么语言编码等。
2.操作指令则是在JSP页面被请求时,动态执行的,比如可以根据某个条件动态跳转到另外一个页面
3.JSP代码指的就是我们自己嵌入在JSP页面中的Java代码,这又分为两种:
第一种是JSP页面中一些变量和方法的声明,在声明时,使用“<%!
”和“%>”标记。
另外一种,就是常用到的用“<%”和“%>”包含的JSP代码块:
JSP语法
(一)
HTML注释
作用:
在客户端显示一个注释.
JSP语法格式:
--comment[<%=expression%>]-->
--Thisfiledisplaystheuserloginscreen-->
例1
效果:
在客户端的HTML源代码中产生和上面一样的数据:
--Thisfiledisplaystheuserloginscreen-->
--Thispagewasloadedon<%=(newjava.util.Date()).toLocaleString()%>-->
例2
效果:
在客户端的HTML源代码中显示为:
--ThispagewasloadedonJanuary1,2000-->
描述:
这种注释和HTML中很像,也就是它可以在"查看源代码"中看到。
唯一有些不同的就是,你可以在这个注释中用表达式(例子2所示)。
这个表达式是不定的,由页面不同而不同,你能够使用各种表达式,只要是合法的就行。
5.1 JSP代码
主要分为两种:
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程序中,但不是发给客户。
JSP语法格式:
<%--comment--%>
例子:
<%@pagelanguage="java"%>
ACommentTestATestofComments
<%--Thiscommentwillnotbevisibleinthepagesource--%>
描述:
用隐藏注释标记的字符会在JSP编译时被忽略掉。
这个注释在你希望隐藏或注释你的JSP程序时是很有用的。
注:
JSP编译器不是会对<%--and--%>之间的语句进行编译的,它不会显示在客户的浏览器中,也不会在源代码中看到在<%----%>之间,你可以任意写注释语句,但是不能使用"--%>",如果你非要使用请用"--%\>"。
JSP语法
(二):
JSP代码(脚本元素)
用来在JSP中包含脚本代码(通常是JAVA代码)的。
它声明变量和方法,包含任意脚本代码和对表达式求值。
主要包含三种类型:
●声明
●JAVA程序块
●表达式
声明
作用:
在JSP程序中声明合法的变量和方法
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关键字,功能是当前一个用户在执行该方法的时候,其他的用户必须等待,直到该用户完成操作。
使用方法如程序:
<%@pagecontentType="text/html;charset=GBK"%>
<%!
intnumber=0;
synchronizedvoidcountPeople(){
number++;
}
%>
<%
countPeople();
%>
您是第<%out.print(number);%>个访问本站的客户。
你可以一次性声明多个变量和方法,只要以";"结尾就行,当然这些声明在Java中要是合法的。
当你声明方法或变量时,请注意以下的一些规则:
●声明必须以";"结尾
●你可以直接使用在<%@page%>中被包含进来的已经声明的变量和方法,不需要对它们重新进行声明。
●一个声明仅在一个页面中有效。
如果你想每个页面都用到一些声明,最好把它们写成一个单独的文件,然后用<%@include%>或include>元素包含进来。
●在JSP中,声明是一段JAVA代码,它用来定义在产生的类文件中的类范围变量和方法。
当JSP页面进行初始化并且有了“类”的范围时,进行声明的初始化。
对于其他的声明和表达式或者是代码来讲,在声明中定义的任何东西在整个JSP中都可以使用。
声明段在<%!
和%>之间。
代码块
包含一个有效的程序段.
JSP语法
<%codefragment%>
例子
<%Stringname=null;
if(request.getParameter("name")==null){%>
<%@includefile="error.html"%>
<%}else{
foo.setName(request.getParameter("name"));
if(foo.getName().equalsIgnoreCase("integra"))
name="acura";
if(name.equalsIgnoreCase("acura")){%>
可以在“<%”和“%>”之间插入Java程序片,一个JSP页面可以有许多JAVA程序片,这些代码块将被JSP服务器按照顺序执行。
在一个代码块中声明的变量是JSP页面的局部变量,只在当前页面中有效,如程序所示
<%@pagecontentType="text/html;charset=GBK"%>
<%inti=0;%>
<%
i++;
out.print(i);
%>
个人访问本站
该程序去掉了上面程序中的“!
”,这样变量i就变成局部变量了。
该变量是局部变量,所以不能用来计数,该变量始终为1。
描述:
可包含多个jsp语句,方法,变量,表达式。
能做以下的事:
●声明将要用到的变量或方法(参考声明).
●编写JSP表达式(参考表达式).
●使用任何隐含的对象和任何用useBean>声明过的对象
●编写JSP语句(如果你在使用Java语言,这些语句必须遵从JavaLanguageSpecification,).
●任何文本,HTML标记,JSP元素必须在scriptlet之外
●当JSP收到客户的请求时,scriptlet就会被执行,如果scriptlet有显示的内容,这些显示的内容就被存在out对象中。
Scriptlet是一段可以在处理请求时间执行的JAVA代码。
Scriptlet包含在<%和%>之间。
Scriptlet具体要做什么要看代码是如何写的。
它可以产生输出,发到客户的输出流中。
在被编译的类中,多个这样的代码将按在JSP程序出现的顺序合并成一个。
像其他的JAVA代码或方法一样,可以修改在它内部的对象,作为方法引用的结果
在查看网页源代码的时候,这一部分是看不见的,只有执行的结果。
因为这里的代码是被服务器执行的。
JavaScript代码是可以看到的,因为JavaScript是被浏览器解释执行的。
表达式
作用:
包含一个符合JSP语法的表达式
JSP语法格式:
<%=expression%>
<%=map.size()%>
<%=numguess.getHint()%>
例子
描述:
表达式元素表示的是一个在脚本语言中被定义的表达式,在运行后被自动转化为字符串,然后插入到这个表达示在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="true|false"]
[isThreadSafe="true|false"]
[info="text"]
[errorPage="relativeURL"]
[contentType="mimeType[;charset=characterSet]"|"text/html;charset=ISO-8859-1"]
[isErrorPage="true|false"]
例子
<%@pageimport="java.util.*,java.lang.*"%>
<%@pagebuffer="5kb"autoFlush="false"%>
<%@pageerrorPage="error.jsp"%>
描述
<%@page%>指令作用于整个JSP页面,同样包括静态的包含文件。
但是<%@page%>指令不能作用于动态的包含文件,比如include>
你可以在一个页面中用上多个<%@page%>指令,但是其中的属性只能用一次,不过也有个例外,那就是import属性。
因为import属性和Java中的import语句差不多(参照JavaLanguage),所以你就能多用此属性几次了.
无论你把<%@page%>指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。
不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。
Include指令标签
Include指令:
在JSP页面内某处整体嵌入一个文件,使用该指令标签。
格式:
<%@includefile=“文件的名字”%>
作用:
在JSP页面出现该指令的位置处,静态插入一个文件,被插入的文件必须是可访问和可使用的。
即该文件必须和当前JSP页面在同一个Web服务目录中。
静态插入:
就是当前JSP页面和插入的部分合并成一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译成Java类文件。
注意:
新合成的JSP页面必须符合JSP语法规则。
Taglib指令
定义一个标签库以及其自定义标签的前缀。
JSP语法
<%@tagliburi="URIToTagLibrary"prefix="tagPrefix"%>
例子
<%@tagliburi="prefix="public"%>
loop>
……….
loop>
描述
<%@taglib%>指令声明此JSP文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀。
这里自定义的标签含有标签和元素之分。
因为JSP文件能够转化为XML,所以了解标签和元素之间的联系很重要。
标签只不过是一个在意义上被抬高了点的标记,是JSP元素的一部分。
JSP元素是JSP语法的一部分,和XML一样有开始标记和结束标记。
元素也可以包含其它的文本,标记,元素。
比如,一个jsp:
plugin元素有plugin>开始标记和
plugin>结束标记,同样也可以有params>和fallback>元素。
你必须在使用自定义标签之前使用<%@taglib%>指令,而且你可以在一个页面中多次使用,但是前缀只能使用一次
属性
1.uri="URIToTagLibrary" UniformResourceIdentifier(URI)根据标签的前缀对自定义的标签进行唯一的命名,URI可以是以下的内容:
●UniformResourceLocator(URL),由RFC2396定义,查看http:
//www.hut.fi/u/jkorpela/rfc/2396/full.html
●UniformResourceName(URN),由RFC2396定义一个相对或绝对的路径
2.prefix="tagPrefix"
在自定义标签之前的前缀,比如,在loop>中的public,如果这里不写public,那么这就是不合法的。
请不要用jsp,jspx,java,javax,servlet,sun,和sunw做为你的前缀。
forward>
重定向一个HTML文件,JSP文件,或者是一个程序段。
JSP语法
forwardpage={"relativeURL"|"<%=expression%>"}/>
or
forwardpage={"relativeURL"|"<%=expression%>"}>
paramname="parameterName"
value="{parameterValue|<%=expression%>}"/>+
forward>
例子
forwardpage="/servlet/login"/>
forwardpage="/servlet/login">
paramname="username"value="jsmith"/>
forward>
描述
forward>标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象.forward>标签以下的代码,将不能执行.
你能够向目标文件传送参数和值,在这个例子中我们传递的参数名为username,值为scott,如果你使用了param>标签的话,目标文件必须是一个动态的文件,能够处理参数.
如果你使用了非缓冲输出的话,那么使用forward>时就要小心。
如果在你使用forward>之前,jsp文件已经有了数据,那么文件执行就会出错.
属性
page="{relativeURL|<%=expression%>}"
这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL.这个文件可以是JSP,程序段,或者其它能够处理request对象的文件(如asp,cgi,php).
paramname="parameterName"value="{parameterValue|<%=expression%>}"/>+
向一个动态文件发送一个或多个参数,这个文件一定是动态文件。
如果你想传递多个参数,你可以在一个JSP文件中使用多个param>。
name指定参数名,value指定参数值。
getProperty>
getProperty>
获取Bean的属性值,用于显示在页面中
JSP语法
getPropertyname="beanInstanceName"property="propertyName"/>
例子
useBeanid="calendar"scope="page"class="employee.Calendar"/>
Calendarofget