您的位置:首页 > Web前端 > JavaScript

JSP的语法

2016-07-18 14:44 330 查看
JSP语法
    一个JSP页面由元素和模板数据组成;元素是必须由JSP处理的部分,而模板数据是JSP容器不处理的部分;例如JSP页面中的HTML内容会直接发送到客户端。元素有三种类型:指令元素、脚本元素和动作元素。
1.1 指令元素(directive elements)
   指令元素主要用于为转换阶段提供整个JSP页面的相关信息,指令不会产生任何的输出到当前的输出流中。 
语法形式:<%@ directive {attr="value"}*%>
在起始符号<%@之后和结束符号%>之前,可以加空格,也可以不加,注意<和%之间、%和@之间不能有任何空格。指令元素有三种:page,include和taglib。
    1
page指令
    page指令作用于整个JSP页面,定义了许多与页面相关的属性,这些属性用于和JSP容器通信。
    语法:<%@ page attr1="value1" attr2="value2" ...%>
    在JSP规范中,还提供了XML语法格式的page指令:<jsp:directive.page attr="value" .../>
    page指令有13个属性:
    ▶language="scriptingLanguage"
      指定在脚本元素中使用额脚本语言,默认是java
    ▶extends="className" 
      指定JSP页面转换后的Servlet类从哪一个类继承,属性的值是完整的限定类名。通常不需要使用这个属性,JSP容器会提供转换后的Servlet类的父类。使用该属性时要格外小心,因为这可能会限制JSP容器为提升性能所做出的努力。
    ▶import="importList"
      该属性用于指定在脚本环境中可以使用的Java类。属性的值和Java程序中的import声明类似,该属性的值是以逗号分隔的导入列表
      <%@ page import="java.util.Vector,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接口。默认值是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表达式将被容器忽略;若设置false,EL表达式将被执行。
    注意:无论将page指令放在JSP文件的哪个位置,它的作用范围都是整个JSP页面,然而,为了JSP程序的可读性,以及养成良好的编程习惯,我们应该将page指令放在JSP文件的顶部。
    2
include指令
    include指令用于在JSP页面中静态包含一个文件,该文件可以是JSP页面、HTML网页、文本文件或一段Java代码。使用了include指令的JSP页面在转换时,JSP容器会在其中插入所包含文件的文本或代码。
    <%@include file="relativeURLspec"%>
    XML语法格式的include指令如下
      <jsp:directive.include file="relativeURLspec"/> file属性的值被解释为相对于当前JSP文件的URL
    注意:在被包含的文件中最好不要使用<html>、</html>、<body>、</body>等标签,因为这会影响到原JSP文件中同样的标签,有时会导致错误。另外,因为原文件和被包含的文件可以互相访问彼此定义的变量和方法,所以在包含文件是要格外小心,避免在被包含的文件中定义了同名的变量和方法,而导致转换时出错;或者不小心修改了另外文件中的变量值,而导致出现不可预料的结果。
    3
taglib指令
    taglib指令允许页面使用用户定制的标签,语法如下:
      <%@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/目录或其子目录下的标签文件。一个隐含的标签库描述符被使用。下面三种情况将发生转换错误:
      ●属性的值不是以/WEB-INF/tags/开始
      ●属性的值没有指向一个已经存在的目录
      ●该属性与uri属性一起使用
    ▶prefix
    定义一个prefix:tagname形式的字符串前缀,用于区分多个自定义标签。以jsp:,jspx:,java:,javax:,servlet:,sun:和sunw:开始的前缀被保留。前缀的命名必须遵循XML名称空间的命名约定。在JSP2.0规范中,空前缀是非法的。

2.2 脚本元素(scripting elements)

    脚本元素包括三个部分:声明、脚本段和表达式。JSP2.0增加了EL表达式作为脚本元素的另一个选择。声明脚本元素用于声明在其他脚本元素中可以使用的变量和方法,脚本段是一段java代码,用于描述在对请求的响应中要执行的动作,表达式脚本元素是java语言中完整的表达式,在响应请求时被计算,计算的结果将被转换为字符串,插入到输出流中。
    <%! this is a declaration %>
    <% this is a scriptlet %>
    <%= this is an expression %>
    1
声明
    声明脚本元素用于声明在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关键字),在多用户冰法访问时,这将导致线程安全问题,除非你确认是单用户访问或者变量是只读的。
    2
脚本段(scripts)
    脚本段时在请求处理期间要执行的Java代码段。脚本段可以产生输出,并将输出发送到客户端,也可以是一些流程控制语句。脚本段以<%开始,以%>结束,语法如下:
    <% scriptlet %>
    XML语法格式如下:
    <jsp:scriptlet> scripts </jsp:scriptlet>
脚本段、模板数据
    在JSP容器转换JSP页面为Servlet类时,页面中的代码段会按照出现的次序,依次被转换为_jspService()方法中的代码,在脚本段中声明的变量,将成为_jspService()方法中的本地变量,因此,脚本段中的变量是线程安全的。
    3
表达式(expressions)
    表达式脚本元素师Java语言中完整的表达式,在请求处理时计算这些表达式,计算的结果将被转换为字符串,插入到当前的输出流中。表达式以<%=开始,以%>结束,语法如下:
    <%=expression%>
    XML语法格式如下:
    <jsp:expression> expression </jsp:expression>
    注意:在书写表达式的时候,一定不要在表达式后面添加任何的标点符号。

3.3 动作元素(action elements)

    动作元素为请求处理阶段提供信息。遵循XML元素的语法,有一个包含元素的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。动作元素也可以是一个空标签,可以有属性。与XML和XHTML一样,JSP的标签也是区分大小写的。
    从效果上来说,一个标准动作是嵌入到JSP页面中的一个标签。在页面被转换为Servlet期间,当JSP容器遇到这个标签,就用预先定义的对应于该标签的Java代码来代替它。
    1
<jsp:useBean>,<jsp:setProperty>和<jsp:getProperty>
      这三个动作元素用于访问JavaBean
    2
<jsp:param>
      这个动作元素被用来以"名-值"对的形式为其它标签提供附加信息。它和<jsp:include>,<jap:forward>和<jsp:plugin>一起使用,语法为:<jsp:param name="" value=""/>
      ▶name  给出参数的名字
      ▶value 给出参数的值,可以是一个表达式
    3
<jsp:include>
      这个动作元素用于在当前页面中包含静态和动态的资源,一旦被包含的页面执行完毕,请求处理将在调用页面中继续进行。被包含的页面不能改变响应的状态代码或者设置报头,这防止了对类似setCookie()这样的方法的调用,任何对这些方法的调用都将被忽略。这个约束和在javax.servlet.RequestDispather类的include()方法上所施加的约束是一样的。
      <jsp:include page="urlSpec" flush="true|false">
    或
      <jsp:include page="urlSpec" flush="true|false">
        {<jsp:param.../>}*
      </jsp:include>
      ▶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()返回指定参数的所有值。



表中include指令包含的对象为静态,并不是指include指令只能包含像HTML这样的静态页面,也可以包含JSP页面。所谓的静态和动态指的是:include指令将JSP页面作为静态对象,将页面的内容(文本或代码)在include指令的位置包含进来,这个过程发生在JSP页面的转换阶段。而<jsp:include>动作把包含的JSP页面作为动态对象,在请求处理期间,发送请求给该对象,然后在当前页面对请求的响应中包含该对象队请求处理的结果,这个过程发生在执行阶段(即请求处理阶段)。
    include指令的file属性所给出的路径是相对于当前文件的,而<jsp:include>动作的page属性所给出的路径是相对于当前页面的,要理解相对于当前文件和相对于当前页面的区别,就需要结合include指令和<jsp:include>
动作对被包含资源的不同处理方式来考虑。
    当采用include指令包含资源时,相对路径的解析在转换期间发生(相对于当前文件的路径来找到资源),资源的内容(文本或代码)在include指令的位置处被包含进来,成为一个整体,被转换为Servlet源文件。当采用<jsp:include>动作包含资源时,相对路径的解析在请求处理期间发生(相对于当前页面的路径找到资源),当前页面和被包含的资源是两个独立的个体,当前页面将请求发送给被包含的资源,被包含的资源对请求处理的结果将作为当前页面对请求响应的一部分发送到客户端。



    4 <jsp:forward>
    这个动作允许在运行时将当前的请求转发给一个静态的资源、JSP页面或者Servlet,请求被转向到的资源必须位于同JSP发送请求相同的上下文环境中。
    这个动作会终止当前页面的执行,如果页面输出使用了缓冲,在转发请求之前,缓冲区将被清除;如果在转发请求之前缓冲区已经刷新,将抛出IllegalStateException异常。如果页面输出没有使用缓冲,而某些输出已经发送,那么试图调用<jsp:forward>动作,将导致抛出IllegalStateException异常。这个动作的作用和RequestDispatcher接口的forward()方法的作用是一样的。
    <jsp:forward page="relativeURLspec"/>
    或
    <jsp:forward page="urlSpec">
        {<jsp:param.../>}*
    </jsp:forward>
    <jsp:forward>动作只有一个属性page。
    ▶page 指定请求被转向的资源的相对路径,该路径是相对于当前JSP页面的URL,也可以是经过表达式计算得到的相对URL。
    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:plgin>动作中使用。<jsp:params>动作包含一个或多个<jsp:param>动作,用于向Applet或JavaBean提供参数。
    <jsp:fallback>是<jsp:plugin>动作的一部分,并且只能在<jsp:plugin>动作中使用,主要用于指定在Java插件不能启动时显示给用户的一段文字。如果插件能够启动,但是Applet或JavaBean没有发现或不能启动,那么浏览器会有一个出错信息提示。
    语法如下:
    <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。
    6 <jsp:element>
    这个动作用于动态定义XML元素的标签。在<jsp:element>中,可以包含<jsp:attributee>和<jsp:body>
    语法如下:
    <jsp:element name="name">
        optional body
    </jsp:element>
    或
    <jsp:element name="name">
        jsp:attribute*
        jsp:body?
    </jsp:element>
    ▶name 该属性用于指定动态产生的元素的名称。
       
    7 <jsp:attribute>
    <jsp:attribute>工作主要有两个用途:一是用于在XML元素的内容中定义一个动作属性的值。二是在<jsp:element>动作中使用,指定输出元素的属性。
    语法如下:
    <jsp:attribute name="name" trim="true|false">
        optional body
    </jsp:attribute>
    ▶name 用于指定元素属性的名称。
    ▶trim 用于指定在<jsp:attribute>元素的内容前后出现的空白(包括空格、回车、换行、制表符)是否被JSP容器忽略。如果为true则忽略;如果为false则保留 ,默认值是true。
    8 <jsp:body>
    这个元素用于定义元素的内容,它没有任何的属性,它的语法如下:
    <jsp:body>
        optional body
    </jsp:body>
    9 <jsp:text>
    这个动作用于封装模板数据,它可以在模板数据允许出现的任何地方使用。<jsp:text>元素的作用和在JSP页面中直接书写模板数据一样。这个动作没有属性,它的语法如下:
    <jsp:text>template data</jsp:text>
    在<jsp:text>动作中不能嵌套其他的动作和脚本元素,但是可以有EL表达式。
    10 <jsp:output>
    <jsp:output>动作只能在JSP文档和以XML语法编写的标签文件中使用,主要用于输出XML声明和文档类型声明。所谓JSP文档,是指使用XML语法编写的JSP页面。这意味着JSP文档格式良好的、结构化的文档。
    11 <jsp:invoke>和<jsp:doBody>
    只能在标签文件中使用。
    12 其他标准动作
    <jsp:root>,<jsp:declaration>,<jsp{scriplet>和<jsp:expression>四个动作元素以XML语法格式来描述JSP页面。

    4.4 注释
    在JSP页面中,可以使用两种类型的注释。一种是HTML注释,这种注释可以在客户端看到;一种是JSP页面本身所做的注释,通常给程序员看的,我们称为JSP注释。
    ▶HTML注释
      语法:<!-- comments --> 注释中可以包含动态的内容,这些动态的内容将被JSP容器处理,然后将处理的结果作为注释的一部分。
      例:<!--这是注释!-->  <!-- 1+1 = <%= 1+1 %> -->
    ▶JSP注释JSP容器将完全忽略这种注释,这种注释对开发人员是非常有用的,可以在JSP页面中对代码的功能做注释,而不用担心会被发送到客户端。另外,在脚本段中,我们也可以使用Java语言本身的注释机制。
      语法:<%-- comments --%> 
      例:<% //comments %> <% /*coments*/ %> <% /**comments*/ %>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: