第5章JSP的页面元素.docx
- 文档编号:23091026
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:26
- 大小:53.43KB
第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"%>
ATestofComments
<%--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%> <%=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"/> Calendarof get
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP 页面 元素