12.3 JSP的语法
来源:互联网 发布:amos软件怎么读 编辑:程序博客网 时间:2024/05/25 16:38
一个JSP页面由元素和模板数据组成。元素是必须由JSP容器处理的部分,而模板数据是JSP容器不处理的部分,例如,JSP页面中的HTML内容,这些内容会直接发送到客户端。在JSP2.0规范中,元素有三种类型:指令元素、脚本元素和动作元素。
12.3.1 指令元素(directive elements)
指令元素主要用于为转换阶段提供整个JSP页面的相关信息,指令不会产生任何的输出到当前的输出流中。指令元素的语法形式如下:
<%@ directive { attr="value" }* %>
在起始符号<%@之后和结束符号%>之前,可以加空格,也可以不加,但是要注意的是,在起始符号中的<和%之间、%和@之间,以及结束符号中的%和>之间不能有任何的空格。指令元素有三种指令:page,include和taglib。
1.page指令
page指令作用于整个JSP页面,定义了许多与页面相关的属性,这些属性将被用于和JSP容器通信。page指令的语法如下:
<%@ page attr1="value1" attr2="value2" … %>
在JSP规范中,还提供了XML语法格式的page指令(参见12.8节),如下:
<jsp:directive.page attr1="value1" attr2="value2" …/>
page指令有13个属性,如下所示:
? language="scriptingLanguage"
该属性用于指定在脚本元素中使用的脚本语言,默认值是java。在JSP2.0规范中,该属性的值只能是java,以后可能会支持其他语言,例如,C、C++等。
? extends="className"
该属性用于指定JSP页面转换后的Servlet类从哪一个类继承,属性的值是完整的限定类名。通常不需要使用这个属性,JSP容器会提供转换后的Servlet类的父类。使用该属性时要格外小心,因为这可能会限制JSP容器为提升性能所做出的努力。
? import="importList"
该属性用于指定在脚本环境中可以使用的Java类。属性的值和Java程序中的import声明类似,该属性的值是以逗号分隔的导入列表,例如:
<%@ page import="java.util.Vector,java.io.*" %>
也可以重复设置import属性:
<%@ page import="java.util.Vector" %>
<%@ page import="java.io.*" %>
要注意的是,page指令中只有import属性可以重复设置。import 默认导入的列表是:java.lang.*,javax.servlet.*,javax.servlet.jsp.*和javax.servlet.http.*。
? session="true|false"
该属性用于指定在JSP页面中是否可以使用session对象,默认值是true。
? buffer="none|sizekb"
该属性用于指定out对象(类型为JspWriter)使用的缓冲区大小,如果设置为none,将不使用缓冲区,所有的输出直接通过ServletResponse的PrintWriter对象写出。设置该属性的值只能以kb为单位,默认值是8kb。
? autoFlush="true|false"
该属性用于指定当缓冲区满的时候,缓存的输出是否应该自动刷新。如果设置为false,当缓冲区溢出的时候,一个异常将被抛出。默认值为true。
? isThreadSafe="true|false"
该属性用于指定对JSP页面的访问是否是线程安全的。如果设置为true,则向JSP容器表明这个页面可以同时被多个客户端请求访问。如果设置为false,则JSP容器将对转换后的Servlet类实现SingleThreadModel接口。由于SingleThreadModel接口在Servlet2.4规范中已经声明为不赞成使用,所以该属性也建议不要再使用。默认值是true。
? info="info_text"
该属性用于指定页面的相关信息,该信息可以通过调用Servlet接口的getServletInfo()方法来得到。
? errorPage="error_url"
该属性用于指定当JSP页面发生异常时,将转向哪一个错误处理页面。要注意的是,如果一个页面通过使用该属性定义了错误页面,那么在web.xml文件中定义的任何错误页面将不会被使用。
? isErrorPage="true|false"
该属性用于指定当前的JSP页面是否是另一个JSP页面的错误处理页面。默认值是false。
? contentType="ctinfo"
该属性指定用于响应的JSP页面的MIME类型和字符编码。例如:
<%@ page contentType="text/html; charset=gb2312" %>
? pageEncoding="peinfo"
该属性指定JSP页面使用的字符编码。如果设置了这个属性,则JSP页面的字符编码使用该属性指定的字符集,如果没有设置这个属性,则JSP页面使用contentType属性指定的字符集,如果这两个属性都没有指定,则使用字符集“ISO-8859-1”。
? isELIgnored="true|false"
该属性用于定义在JSP页面中是否执行或忽略EL表达式。如果设置为true,EL表达式(关于EL表达式,请参见第16章)将被容器忽略,如果设置为flase,EL表达式将被执行。默认的值依赖于web.xml的版本,对于一个Web应用程序中的JSP页面,如果其中的web.xml文件使用Servlet2.3或之前版本的格式,则默认值是true,如果使用Servlet2.4版本的格式,则默认值是false。对应于该属性的JSP配置元素是<el-ignored>(参见附录D的D.15节)。
注意:无论将page指令放在JSP文件的哪个位置,它的作用范围都是整个JSP页面,然而,为了JSP程序的可读性,以及养成良好的编程习惯,我们应该将page指令放在JSP文件的顶部。
2.include指令
include指令用于在JSP页面中静态包含一个文件,该文件可以是JSP页面、HTML网页、文本文件或一段Java代码。使用了include指令的JSP页面在转换时,JSP容器会在其中插入所包含文件的文本或代码。include指令的语法如下:
<%@ include file="relativeURLspec" %>
XML语法格式的include指令如下:
<jsp:directive.include file="relativeURLspec"/>
file属性的值被解释为相对于当前JSP文件的URL。
例12-3是一个使用include指令的例子。
例12-3
greeting.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head><title>欢迎你</title></head>
</html>
<body>
欢迎你,现在的时间是
<%@ include file="date.jsp" %>
</body>
</html>
date.jsp
<%
out.println(new java.util.Date().toLocaleString());
%>
访问greeting.jsp页面,将输出下面的信息:
欢迎你,现在的时间是 2005-3-29 16:12:22
注意:在被包含的文件中最好不要使用<html>、</html>、<body>、</body>等标签,因为这会影响到原JSP文件中同样的标签,有时会导致错误。另外,因为原文件和被包含的文件可以互相访问彼此定义的变量和方法,所以在包含文件时要格外小心,避免在被包含的文件中定义了同名的变量和方法,而导致转换时出错;或者不小心修改了另外文件中的变量值,而导致出现不可预料的结果。
3.taglib指令
tablib指令允许页面使用用户定制的标签(参见第15章)。tablib指令的语法如下:
<%@ taglib (uri="tagLibraryURI" | tagdir="tagDir") prefix="tagPrefix" %>
XML语法格式的taglib指令如下:
<jsp:directive.tablib (uri="tagLibraryURI" | tagdir="tagDir") prefix="tagPrefix"/>
taglib指令有三个属性:
? uri
该属性惟一地标识和前缀(prefix)相关的标签库描述符,可以是绝对或者相对的URI。这个URI被用于定位标签库描述符的位置。
? tagdir
该属性指示前缀(prefix)将被用于标识安装在/WEB-INF/tags/目录或其子目录下的标签文件(参见第18章)。一个隐含的标签库描述符被使用。下面三种情况将发生转换(translation)错误:
— 属性的值不是以/WEB-INF/tags/开始。
— 属性的值没有指向一个已经存在的目录。
— 该属性与uri属性一起使用。
? prefix
定义一个prefix:tagname形式的字符串前缀,用于区分多个自定义标签。以jsp:,jspx:,java:, javax:,servlet:,sun:和sunw:开始的前缀被保留。前缀的命名必须遵循XML名称空间的命名约定。在JSP2.0规范中,空前缀是非法的。
12.3.2 脚本元素(scripting elements)
脚本元素包括三个部分:声明、脚本段和表达式。JSP2.0增加了EL表达式(参见第16章),作为脚本元素的另一个选择。声明脚本元素用于声明在其他脚本元素中可以使用的变量和方法,脚本段是一段Java代码,用于描述在对请求的响应中要执行的动作,表达式脚本元素是Java语言中完整的表达式,在响应请求时被计算,计算的结果将被转换为字符串,插入到输出流中。
这三种脚本元素都是基于<%的语法,如下所示:
<%! this is a declaration %>
<% this is a scriptlet %>
<%= this is an expression %>
在<%!、<%和<%=之后,%>之前,可以有空格,但是在<%与!、<%与=之间不能有空格。
1.声明(declarations)
声明脚本元素用于声明在JSP页面的脚本语言中使用的变量和方法。声明必须是完整的声明语句,遵照Java语言的语法。声明不会在当前的输出流中产生任何的输出。声明以<%!开始,以%>结束,它的语法如下:
<%! declaration(s) %>
XML语法格式的声明如下:
<jsp:declaration> declaration(s) </jsp:declaration>
声明的例子如下:
<%! int i; %>
<%! int i = 0; %>
<%! public String f(int i) { if (i<3) return("…"); … } %>
你可以在一个声明中声明多个变量和方法,也可以使用多个声明。在声明变量的时候要注意,不要忘了变量名后面的分号(;),声明只在当前的JSP页面中有效。
注意:利用<%! %>声明的变量,在JSP容器转换JSP页面为Servlet类时,将作为该类的实例变量或者类变量(声明时使用了static关键字),在多用户并发访问时,这将导致线程安全的问题,除非你确认是单用户访问或者变量是只读的。关于线程安全的问题,请读者参见第11章。
2.脚本段(scriptlets)
脚本段是在请求处理期间要执行的Java代码段。脚本段可以产生输出,并将输出发送到客户端,也可以是一些流程控制语句。脚本段以<%开始,以%>结束,它的语法如下:
<% scriptlet %>
XML语法格式的脚本段如下:
<jsp:scriptlet> scriptlet </jsp:scriptlet>
脚本段的例子如下:
<%
if (Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM)
{
%>
Good Morning
<%
}
else
{
%>
Good Afternoon
<%
}
%>
这个例子中,<%和%>之间的部分是脚本段,“Good Morning”和“Good Afternoon”是模板数据。为了便于读者理解,下面列出转换后的在_jspService ()方法中的代码片段:
if (Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM)
{
out.write("/r/n");
out.write(" Good Morning/r/n");
}
else
{
out.write("/r/n");
out.write(" Good Afternoon/r/n");
}
在脚本段中可以声明本地变量,在后面的脚本段中可以使用该变量,例如:
<% int i=0;%>
在后面的脚本段中可以访问变量i,如下:
<% i++; %>
在JSP容器转换JSP页面为Servlet类时,页面中的代码段会按照出现的次序,依次被转换为_jspService()方法中的代码,在脚本段中声明的变量,将成为_jspService()方法中的本地变量,因此,脚本段中的变量是线程安全的。
3.表达式(expressions)
表达式脚本元素是Java语言中完整的表达式,在请求处理时计算这些表达式,计算的结果将被转换为字符串,插入到当前的输出流中。表达式以<%=开始,以%>结束,它的语法如下:
<%= expression %>
XML语法格式的表达式如下:
<jsp:expression> expression </jsp:expression>
表达式的例子如下:
<html>
<head></head>
</html>
<body>
现在的时间是<%= (new java.util.Date()).toLocaleString() %>
</body>
</html>
要注意,在书写表达式的时候,一定不要在表达式后面添加任何的标点符号。
12.3.3 动作元素(action elements)
动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。动作元素也可以是一个空标签,可以有属性。与XML和XHTML一样,JSP的标签也是区分大小写的。
JSP2.0规范定义了一些标准的动作。标准动作是一些标签,它们影响JSP运行时的行为和对客户端请求的响应,这些动作由JSP容器来实现。
从效果上来说,一个标准动作是嵌入到JSP页面中的一个标签。在页面被转换为Servlet期间,当JSP容器遇到这个标签,就用预先定义的对应于该标签的Java代码来代替它。动作元素的语法是基于XML的。
JSP2.0规范中定义了20个标准的动作元素。
1.<jsp:useBean>,<jsp:setProperty>和<jsp:getProperty>
这三个动作元素用于访问JavaBean,详细的介绍请参看第13章。
2.<jsp:param>
这个动作元素被用来以“名-值对”的形式为其他标签提供附加信息。它和<jsp:include>,<jsp:forward>和<jsp:plugin>一起使用。它的语法为:
<jsp:param name="name" value="value" />
它有两个必备的属性name和value。
? name
给出参数的名字。
? value
给出参数的值,可以是一个表达式。
3.<jsp:include>
这个动作元素用于在当前页面中包含静态和动态的资源,一旦被包含的页面执行完毕,请求处理将在调用页面中继续进行。被包含的页面不能改变响应的状态代码或者设置报头,这防止了对类似setCookie()这样的方法的调用,任何对这些方法的调用都将被忽略。这个约束和在javax.servlet. Request Dispatcher类的include()方法上所施加的约束是一样的。
<jsp:include>动作的语法如下:
<jsp:include page=”urlSpec” flush="true|false"/>
或
<jsp:include page=”urlSpec” flush="true|false">
{ <jsp:param …. /> }*
</jsp:include>
<jsp:include>动作有两个属性page和flush。
? page
指定被包含资源的相对路径,该路径是相对于当前JSP页面的URL。
? flush
该属性是可选的。如果设置为true,当页面输出使用了缓冲区,那么在进行包含工作之前,先要刷新缓冲区。如果设置为false,则不会刷新缓冲区。该属性的默认值是false。
<jsp:include>动作可以在它的内容中包含一个或多个<jsp:param>元素,为包含的页面提供参数信息。被包含的页面可以访问request对象,该对象包含了原始的参数和使用<jsp:param>元素指定的新参数。如果参数的名称相同,原来的值保持不变,新的值其优先级比已经存在的值要高。例如,请求对象中有一个参数为param=value1,然后又在<jsp:param>元素中指定了一个参数param=value2,在被包含的页面中,接收到的参数为param=value2, value1,调用javax.servlet.ServletRequest接口中的getParameter()方法将返回value2,可以使用getParameterValues()返回指定参数的所有值。
那么<jsp:include>和include指令有什么区别呢?表12-1列出了两者的区别。
表12-1 <jsp:include>和include指令的区别
语 法
相对路径
发生时间
包含的对象
描 述
<%@ include file="url" %>
相对于当前文件
转换期间
静态
包含的内容被JSP容器分析
<jsp:include page="url" />
相对于当前页面
请求处理期间
静态和动态
包含的内容不进行分析,但在相应的位置被包含
要注意,表12-1中include指令包含的对象为静态,并不是指include指令只能包含像HTML这样的静态页面,include指令也可以包含JSP页面。所谓静态和动态指的是:include指令将JSP页面作为静态对象,将页面的内容(文本或代码)在include指令的位置处包含进来,这个过程发生在JSP页面的转换阶段。而<jsp:include>动作把包含的JSP页面作为动态对象,在请求处理期间,发送请求给该对象,然后在当前页面对请求的响应中包含该对象对请求处理的结果,这个过程发生在执行阶段(即请求处理阶段)。
include指令的file属性所给出的路径是相对于当前文件的,而<jsp:include>动作的page属性所给出的路径是相对于当前页面的,要理解相对于当前文件和相对于当前页面的区别,就需要结合include指令和<jsp:include>动作对被包含资源的不同处理方式来考虑。
当采用include指令包含资源时,相对路径的解析在转换期间发生(相对于当前文件的路径来找到资源),资源的内容(文本或代码)在include指令的位置处被包含进来,成为一个整体,被转换为Servlet源文件。当采用<jsp:include>动作包含资源时,相对路径的解析在请求处理期间发生(相对于当前页面的路径来找到资源),当前页面和被包含的资源是两个独立的个体,当前页面将请求发送给被包含的资源,被包含资源对请求处理的结果将作为当前页面对请求响应的一部分发送到客户端。
为了更好地理解include指令和<jsp:include>动作包含资源的相对路径,搞清楚相对于当前文件和相对于当前页面的区别,我们给出了表12-2的例子。在这个例子中共用到4个文件:a.jsp,c.jsp,abc/b.jsp和abc/c.jsp。
表12-2 在两个文件中分别使用include指令和<jsp:include>动作包含资源的例子
a.jsp
abc/b.jsp
结 果
<%@ include file="abc/b.jsp"%>
<%@ include file="c.jsp"%>
abc/c.jsp
<jsp:include page="abc/b.jsp"/>
<jsp:include page="c.jsp"/>
abc/c.jsp
<jsp:include page="abc/b.jsp"/>
<%@ include file="c.jsp"%>
abc/c.jsp
<%@ include file="abc/b.jsp"%>
<jsp:include page="c.jsp"/>
c.jsp
在这里,笔者原本想对表12-2的结果做一个分析,但最终还是决定让读者自己来思考结果,以便更好地理解include指令和<jsp:include>动作包含资源的相对路径。
提示:理解表12-2前面以粗体显示的两段话,是对结果进行正确分析的关键。
4.<jsp:forward>
这个动作允许在运行时将当前的请求转发给一个静态的资源、JSP页面或者Servlet,请求被转向到的资源必须位于同JSP发送请求相同的上下文环境中。
这个动作会终止当前页面的执行,如果页面输出使用了缓冲,在转发请求之前,缓冲区将被清除;如果在转发请求之前,缓冲区已经刷新,将抛出IllegalStateException异常。如果页面输出没有使用缓冲,而某些输出已经发送,那么试图调用<jsp:forward>动作,将导致抛出IllegalStateException异常。这个动作的作用和RequestDispatcher接口的forward()方法的作用是一样的。
<jsp:include>动作的语法如下:
<jsp:forward page="relativeURLspec"/>
或
<jsp:forward page=”urlSpec”>
{ <jsp:param …. /> }*
</jsp:forward>
<jsp:forward>动作只有一个属性page。
? page
指定请求被转向的资源的相对路径,该路径是相对于当前JSP页面的URL,也可以是经过表达式计算得到的相对URL。
下面是使用<jsp:forward>动作的一个例子:
<%
String command=request.getParameter("command");
if(command.equals("reg"))
{
%>
<jsp:forward page="reg.jsp"/>
<%
}
else if(command.equals("logout"))
{
%>
<jsp:forward page="logout.jsp"/>
<%
}
else
{
%>
<jsp:forward page="login.jsp"/>
<%
}
%>
5.<jsp:plugin>,<jsp:params>和<jsp:fallback>
<jsp:plugin>动作用于产生与客户端浏览器相关的HTML标签(<OBJECT>或<EMBED>),从而导致在需要时下载Java插件(Plug-in)软件,并在插件中执行指定的Applet或JavaBean。<jsp:plugin>标签将根据客户端浏览器的类型被替换为<object>或<embed>标签。在<jsp:plugin>元素的内容中可以使用另外两个标签:<jsp:params>和<jsp:fallback>。
<jsp:params>是<jsp:plugin>动作的一部分,并且只能在<jsp:plugin>动作中使用。<jsp:params>动作包含一个或多个<jsp:param>动作,用于向Applet或JavaBean提供参数。
<jsp:fallback>是<jsp:plugin>动作的一部分,并且只能在<jsp:plugin>动作中使用,主要用于指定在Java插件不能启动时显示给用户的一段文字。如果插件能够启动,但是Applet或JavaBean没有发现或不能启动,那么浏览器会有一个出错信息提示。
<jsp:plugin>动作的语法如下:
<jsp:plugin type="bean|applet"
code="objectCode"
codebase="objectCodebase"
{ align="alignment" }
{ archive="archiveList" }
{ height="height" }
{ hspace="hspace" }
{ jreversion="jreversion" }
{ name="componentName" }
{ vspace="vspace" }
{ width="width" }
{ nspluginurl="url" }
{ iepluginurl="url" }>
{ <jsp:params>
{ <jsp:param name="paramName" value= "paramValue" /> }+
</jsp:params> }
{ <jsp:fallback> arbitrary_text </jsp:fallback> }
</jsp:plugin>
<jsp:plugin>动作有13个属性,如下所示。
? type="bean|applet"
指定要执行的组件的类型,是JavaBean还是Applet。
? code="objectCode"
指定要执行的组件的完整的类名,以.class结尾。该名字要么相对于codebase,要么相对于当前页面。
? codebase="objectCodebase"
指定要执行的Java类所在的目录。
? align="alignment"
指定组件对齐的方式。可以是下面的值:
— left——把组件放在网页左边,后面的文本会移至applet的右边。
— right——把组件放在网页右边,后面的文本会移至applet的左边。
— bottom——把组件的底部与当前行文本底部对齐。
— top——把组件的顶部与当前行顶部对齐。
— texttop——把组件的顶部与当前行文本顶部对齐。
— middle——把组件的中部与当前行基线对齐。
— absmiddle——把组件的中部与当前行中部对齐。
— baseline——把组件的底部与当前行基线对齐。
— absbottom——把组件的底部与当前行底部对齐。
? archive="archiveList"
指定以逗号分隔的Java归档文件列表。归档文件中可以包含组件要使用的类或需要的其他资源。
? height="height"和width="width"
指定组件的高度和宽度,以像素为单位。
? hspace="hspace"和vspace="vspace"
指定组件左右、上下留出的空间,以像素为单位。
? jreversion="jreversion"
指定组件运行时需要的JRE版本,默认值为1.2。
? name="componentName"
指定组件的名字。在编写脚本代码的时候,可以用该属性的值作为名字来引用这个组件。
? nspluginurl="url"
指定对于Netscape Navigator,可以下载JRE插件的URL。默认情况由实现定义。
? iepluginurl="url"
指定对于Internet Explorer,可以下载JRE插件的URL。默认情况由实现定义。
下面是使用<jsp:plugin>动作的一个例子:
plugin.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<jsp:plugin type="applet" code="TestApplet.class" width="600" height="400">
<jsp:params>
<jsp:param name="font" value="楷体_GB2312"/>
</jsp:params>
<jsp:fallback>您的浏览器不支持插件</jsp:fallback>
</jsp:plugin>
TestApplet.java
import java.applet.*;
import java.awt.*;
public class TestApplet extends Applet
{
String strFont;
public void init()
{
strFont=getParameter("font");
}
public void paint(Graphics g)
{
Font f=new Font(strFont,Font.BOLD,30);
g.setFont(f);
g.setColor(Color.blue);
g.drawString("这是使用<jsp:plugin>动作元素的例子",0,30);
}
}
6.<jsp:element>
这个动作用于动态定义一个XML元素的标签。在<jsp:element>中,可以包含<jsp:attributee>和<jsp:body>。
<jsp:element>动作的语法如下:
<jsp:element name="name">
optional body
</jsp:element>
或
<jsp:element name="name">
jsp:attribute*
jsp:body?
</jsp:element>
<jsp:element>动作只有一个属性name。
? name
该属性用于指定动态产生的元素的名称。
我们看下面两个例子。
例1:
<jsp:element name="football"/>
执行后将产生一个空元素:
<football/>
例2:
<jsp:element name="employee">
<jsp:attribute name="name">张三</jsp:attribute>
<jsp:body>张三是销售部的经理</jsp:body>
</jsp:element>
执行后将产生一个包含属性和内容的元素:
<employee name="张三">张三是销售部的经理</employee>
7.<jsp:attribute>
<jsp:attribute>动作主要有两个用途:一是用于在XML元素的内容中定义一个动作属性的值。二是在<jsp:element>动作中使用,指定输出元素的属性。
<jsp:attribute>动作的语法如下:
<jsp:attribute name="name" trim="true|false">
optional body
</jsp:attribute>
<jsp:attribute>动作有两个属性:name和trim。
? name
用于指定元素属性的名称。
? trim
用于指定在<jsp:attribute>元素的内容前后出现的空白(包括空格、回车、换行、制表符)是否被JSP容器忽略。如果为true,则忽略;如果为false,则保留。默认值是true。
下面两个例子,分别示范了<jsp: attribute>动作的两种用途。
例1:
<jsp:forward>
<jsp:attribute name="page">reg.jsp</jsp:attribute>
</jsp:forward>
其作用和
<jsp:forward page="reg.jsp"/>
是一样的。
例2:
见<jsp:element>一节中的例2。
8.<jsp:body>
这个动作用于定义元素的内容,用法见<jsp:element>一节中的例2。<jsp:body>动作没有任何的属性,它的语法如下:
<jsp:body>
optional body
</jsp:body>
9.<jsp:text>
这个动作用于封装模板数据,它可以在模板数据允许出现的任何地方使用。<jsp:text>元素的作用和在JSP页面中直接书写模板数据一样。这个动作没有属性,它的语法如下:
<jsp:text> template data </jsp:text>
在<jsp:text>动作中不能嵌套其他的动作和脚本元素,但是可以有EL表达式。对于下面的例子:
<jsp:text>Hello World!</jsp:text>
执行后将产生输出:
Hello World!
10.<jsp:output>
<jsp:output>动作只能在JSP文档和以XML语法编写的标签文件中使用,主要用于输出XML声明和文档类型声明。所谓JSP文档,是指使用XML语法编写的JSP页面。这意味着JSP文档是格式良好的、结构化的文档(参见12.8节)。
11.<jsp:invoke>和<jsp:doBody>
<js:invoke>和<jsp:doBody>动作元素只能在标签文件中使用。关于这两个元素的用法,请参见第18章。
12.其他标准动作
<jsp:root>,<jsp:declaration>,<jsp:scriptlet>和<jsp:expression>四个动作元素以XML语法格式来描述JSP页面。关于这四个元素的用法,参见12.8节。
12.3.4 注释
在JSP页面中,可以使用两种类型的注释。一种是HTML注释,这种注释可以在客户端看到;一种是为JSP页面本身所做的注释,通常是给程序员看的,我们称为JSP注释。
? HTML注释
语法如下:
<!-- comments … -->
在HTML注释中,可以包含动态的内容,这些动态的内容将被JSP容器处理,然后将处理的结果作为注释的一部分。我们看下面的例子:
<!--这是新闻部分-->
<!-- 1+1 = <%= 1+1 %> -->
在客户端浏览器中,通过查看源文件,可以看到如下的输出:
<!-- 这是新闻部分 -->
<!-- 1+1 = 2 -->
? JSP注释
语法如下:
<%-- comments --%>
JSP容器将完全忽略这种注释。这种注释对开发人员是非常有用的,可以在JSP页面中对代码的功能做注释,而不用担心会被发送到客户端。另外,在脚本段中,我们也可以使用Java语言本身的注释机制,例如:
<% //comments %>
<% /*comments*/ %>
<% /**comments*/ %>
下面是一个使用JSP注释的例子:
<%-- 这个方法用于完成对字符串的转换 --%>
- 12.3 JSP的语法
- JSP的语法
- jsp的基本语法
- JSP的语法
- JSP语法的基本原理
- JsP的基础语法
- JSP的基本语法
- JSP的基础语法
- JSP语法的练习
- jsp的语法
- JSP的基本语法
- JSP的语法
- JSP的基本语法
- jsp的基础语法
- Jsp的基本语法
- JSP的基础语法
- JSP的基础语法
- JSP的语法
- 明天考CET4[00原创]
- 想要做好老板先要懂得怎样留住员工[转]
- mpc源代码下载
- Apple TV与iPhone获YouTube访问权
- Linux那些事儿之我是U盘(5)外面的世界很精彩
- 12.3 JSP的语法
- 指向常量的指针,指针常量,指向常量的指针常量
- 苹果iPhone不支持Flash和Java
- Joyan的LFS之路(2)
- Linux那些事儿之我是U盘(6)未曾开始却似结束
- 搞笑的IQ题
- Tomcat环境变量手动设置及常见问题
- Array.methods
- .NET精简框架的“无法找到资源程序集”异常释疑