JSP语法详解

  (一).jsp基础
一个jsp文件中:包含5类元素.
1.模板元素
      指jsp的静态html和xml内容.它对jsp的显示是必要的.是网页的框架,它影响页面的结构和美观程度.在jsp编译的时候,它将这些
      模板元素编译到servlet里.
2.脚本元素
      包括声明(Declaration)
              声明就是在jsp程序中声明合法的变量和方法.
              例子:
                  <%! String getDate()
                      {
                       return new java.util.Date().toLocaleString();
                      }
                      int count = 10 ;
                  %>
          表达式(Expression)
                表达式就是位于<%=和%>之间的代码. 例子:<%=getDate()%>
          Scriptlets
  位于<%和%>之间的代码.它们是合法的java代码.
  例子:
      <%
      int i;
      //color表示颜色,通过它来动态控制颜色.
      String color1 ="99ccff";
      String color2 ="88cc33";
      for(i=1;i<=count;i++){
        String color="";
        if(i%2==0)color=color1;
        else color = color2 ;
        out.println("<trbgcolor="+color+"><td>-------------------</td><tr>");
      }
      %>
3.指令元素
      页面(page)指令
      include指令
      taglib指令
4.动作元素
      在请求处理阶段起作用.jsp规范定义理一系列的标准动作,他们用jsp作为前缀.
      <jsp:useBean>,<jsp:setProperty>,<jsp:getProperty>,<jsp:param>等.
5.注释
      其中有jsp自带的注释规范,也有html/xml的注释规范.
      [1].jsp语法: <!--comment[%=expression%]--> 例子:<!--当前时间为: <%=(new java.util.Date()).toLocaleString()%>-->
      [2].隐藏注释: 写在jsp程序中,但不发给客户.jsp语法:<%--comment--%>
      
  (二)指令元素
指令用于从jsp发送一个信息到容器上.它用来设置全局变量,声明类,要实现的方法和输入内容的类型等.它们并不向客户产生任何输出,
所有的指令都在jsp整个文件范围内有效.
   使用格式<%@directivename attribute="value",attribute="value" %>
1.页面指令:
用来定义jsp文件中的全局属性.
格式:<%@ page attribute="value"%>
其中attribute:language|import|contentType|session|buffer|autoFlush|isThreadSafe|info|errorPage|isErrorPage|extends
language 定义要使用的脚本语言,目前只能是"java"   ex: language="java"
import   和一般的java import意义一样,只是用","格开包或者类列表.  ex: import="java.io.*,java.util.Hashtable"
session  指定一个Http会话中这个页面是否参与.      ex: session="true"
buffer   指定到客户输出流的缓冲模式,如果是none,则不缓冲;如果指定数值,那么输出就用不小于这个值的缓冲区进行缓冲. ex: buffer="64kb"
autoFlash true缓冲区满时,到客户端输出被刷新;false缓冲区满时,出现缓冲异常,表示缓冲溢出. ex: autoFlush ="true"
info     关于jsp页面的信息,定义一个字符串,可以使用servlet.getServletInfo()获得.   ex: info="一个测试页面"
isErrorPage 表明当前页是否为其它页的errorPage目标.如果被设置为true,则可以使用exception对象.  ex: isErrorPage="true"
errorPage 定义此页面出现异常时调用的页面. errorPage="error/error.jsp"
isThreadSafe 用来设置jsp文件是否能多线程使用,如果设置为true,那么一个jsp能够同时处理多个用户的请求;相反,如果设置为false,一个
             jsp页面只能处理一个请求. ex: IsThreadSafe="true"
contentType  定义jsp字符编码和页面响应的MIME类型. ex: contentType="text/html;charset=gb2312"
pageEncoding jsp页面的字符编码.   ex: pageEncoding="gb2312"
isELIgnored  制定EL(表达式语言)是否被忽略,如果为true,则容器忽略"${}"表达式的计算.      

2.include指令
include指令通知容器将当前jsp页面中的内嵌的.在指定位置上的资源内容包含.被包含的文件内容可以被jsp解析,这种解析发生在编译期间.
  ex:  <%@ include file="filename"%>
include指令将在jsp编译时插入一个包含文本或代码的文件,当您使用include指令时,这个包含的过程就是静态的.  

3.taglib指令
       这个指令允许页面使用者自定义标签.
       ex: <%@ taglib uri="taglibURI" prefix="tagPrefix" %>
       uri用来表示标签描述符,也就是告诉容器怎么找到标签描述文件和标签库,tagPrefix定义了在jsp页面里面要引用这个标签时的前缀.
       这些前缀不可以是:jsp,jspx,java,javax,sun,servlet,sunw.


  (三)脚本元素
JSP脚本元素是jsp代码中使用最频繁的元素,特别是scriptlets.在早期的jsp代码中它占有主导地位.脚本元素把jsp的所有一切都集中在一起,
它通常是用java些的脚本代码.它允许变量声明&函数声明.
1.声明(Declaration)
在jsp里,声明是一段java代码.它用来定义在产生的类文件中的类的属性和方法.声明后的变量和方法可以在jsp的任意地方使用.可以声明方法,
也可以声明变量.
格式: <%! Variable declaration
              menthod declaration(paramType param,...)%>

2.表达式(Expression)
表达式在jsp请求处理阶段计算它的值,所得的结果转换成字符串并与模板数据组合在一起.表达式在页面的位置,也就是该表达式计算结果所在
的位置.
格式:<%=Some java expression%>
如果表达式的任何部分是一个对象,就可以使用toString()进行转换.表达式必须有一个返回值或者本身就是一个对象,实际上表达式被转换
成out.println()方法中的内容. ex: <%="hello world"%>  在编译成servlet后,变成:out.write(String.valueOf("hello,world"));

3.scriptlet
  Scriptlet是一段可以在处理请求时间执行的java代码.Scriptlet包括在<%和%>之间,它可以产生输出,并将输出发送到客户的输出流中,
也可以是一些流程控制语句.在一段Scriptlet中的创建对象,可以在另一个Scriptlet中使用.在编译后的servlet中,Scriptlet被包含在Servlet
的Servlet方法中.
格式:<%java code statements%>

  (四)动作元素
静态页面(txt,html)写的是什么,在客户端看到的就是什么.不编译.
动态页面(jsp)要经过编译.
动作元素在请求处理阶段起作用.
1.<jsp:param>
   以"名-值"对的形式为其它标签提供附加信息. 它和<jsp:include><jsp:forward><jsp:plugin>一起使用.
   <jsp:param name="paramName" value="paramValue"/>.
   其中name为属性相关联的关键字,value为属性的值.

2.<jsp:include>
   允许在请求时间内在现成的jsp页面里面包含静态或者动态资源.被包含的对象只有对jspWriter对象的访问权,并且它不能设置头或者Cookie.
   如果页面输出是缓冲的,那么缓冲区的刷新要优先于包含的刷新.此指令在运行上效率比<%@ page include%>指令低,但可以动态增加内容.
   <jsp:include page="filename" flush="true"/>或者
   <jsp:include page="filename" flush="true">
   <jsp:param name="paramName" value="paramValue">
   </jsp:include>            
   其中,page="filename"参数为一个相对路径,或者是代表相对路径的表达式.
   如果路径以"/"开头,那么路径主要是参照jsp应用的上下文关系路径.
   如果路径是以文件名或目录名开头,那么这个路径就是正在使用的jsp文件的当前路径.
   <jsp:param name="paramName" value="paramValue">传递一个或多个参数给动态页面.

3.<jsp:forward>
   允许将请求转发到另一个jsp,servlet或者静态资源文件.请求被转向到的资源必须位于同jsp发送请求相同的上下文环境中,每当遇到此
   操作时,就停止执行当前的jsp,转而执行被转发的资源.
   <jsp:forward page="uri"/>或者
   <jsp:forward page="uri">
   <jsp:param name="paramName" value="paramValue"/>
   ...
   </jsp:forward>

4.<jsp:setProperty>
   此操作和useBean一起协作,用来设置Bean的简单属性和索引属性.<jsp:setProperty>标签使用Bean给定的setXXX()方法,在Bean中设置一个或多个属性.
   <jsp:setProperty bane="BeanName" propertyDetails />
   其中,propertyDetails可以是下面几个中的一个:
   property="*"
   property="propertyName" param="parameterName"
   property="propertyName"
   property="propertyName" value="propertyValue"
   ex:
      <jsp:useBean id="usersession" scope="session" class="com.user.UserSession">
      <jsp:setProperty name="usersession" property="name" value="hellking"/>
      </jsp:useBean>
      或者
      <jsp:useBean id="usersession" scope="session" class="com.user.UserSession"/>
      <jsp:setProperty name="usersession" property="name" value="hellking"/>
  
   在表单中传过来的数据类型都是String类型的,jsp内在机制回把这些参数转化成Bean属性对应的类型。
   把字符串转化为其它类型的方法.
   boolean   java.lang.Boolean.valueOf(String).booleanValue()
   Boolean   java.lang.Boolean.valueOf(String)
   byte      java.lang.Byte.valueOf(String).byteValue()
   Byte      java.lang.Byte.valueOf(String)
   char      java.lang.Character.valueOf(String).charValue()
   Character java.lang.Character.valueOf(String)
   double    java.lang.Double.valueOf(String).doubleValue()
   Double    java.lang.Double.valueOf(String)
   int       java.lang.Integer.valueOf(String).intValue()
   Integer   java.lang.Integer.valueOf(String)
   float     java.lang.Float.valueOf(String).floatValue()
   Float     java.lang.Float.valueOf(String)
   long      java.lang.Long.valueOf(String).longValue()
   Long      java.lang.Long.valueOf(String)        
  
5.<jsp:getProperty>
   它用来访问一个Bean的属性.它访问的属性值将它转化成一个String,然后发送到输出流中.如果属性是一个对象,将调用toString()方法.
   <jsp:getProperty name="beanName" property="propertyName"/>
   例如:
       <jsp:useBean id="usersession" scope="session" class="com.user.UserSession" />
    <jsp:getProperty name="usersession" property="name" />
           <jsp:getProperty name="usersession" property="password" />
   该标签有一些限制:不能使用该标签来检索一个已经被索引了的属性.

6.<jsp:useBean>
   用来在页面上创建一个Bean实例,并指定它的名字以及作用范围.它保证对象在标签指定的范围内可以使用.
   语法: <jsp:useBean id="id" scope="page|request|session|application" typeSpec/>
   其中ID是一个大小写相关的名字,用来表示这个实例:scope表示此对象可以使用的范围:typeSpec可以是以下四者之一:
   [1] class="className"
   [2] class="className" type="typeName"
   [3] beanName="beanName" type="typeName"
   [4] type="typeName"
   ex:
      <jsp:useBean id="shopcart" scope="session" class="sesion.Carts" />
      <jsp:setProperty name="shopcart" property="*" />
      <jsp:useBean id="checking" scope="session" class="bank.checking" >
      <jsp:setProperty name="checking" property="balance" value="0.0">
      </jsp:useBean>
   解释:
   (1)id="name"
      在所定义的范围中确认Bean的变量,在定义某个JavaBean时,需要指定它的ID,通过此ID对javaBean的实例对象进行引用.
      区分大小写.
   (2)scope="page|request|session|application"
   Bean存在的范围以及ID变量名的有效范围.scope的默认值是page.
      page:能够在包含<jsp:useBean>标签的JSP文件以及此文件中的所有静态包含文件中使用Bean,直到页面执行完毕向客户端
      发回响应或转到另一个文件为止,超出这个范围Bean失效.
      request:在请求的范围内使用有效.可以使用request对象访问Bean. 比如request.getAttribute(name);
      session:从创建Bean开始,就可以在session有效范围内使用这个Bean,这个Bean对于jsp来说是共享的.
     
7.<jsp:plugin>
   用来产生客户端浏览器的特别标签(Object或者Embed),可以使用它来插入Applet或者JavaBean.
   当jsp文件被编译把结果发送到浏览器时,<jsp:plugin>元素会根据浏览器的版本替换成<object>或者<embed>
   <jsp:plugin>会指定对象是Applet还是Bean,同样会指定class的名字,另外还将指定将从哪里下载Java插件.
   <jsp:plugin type="bean|applet"  code="classFileName" codebase="classFileDirectoryName"
   [name="instanceName"][archive="URIToArchive,..."][align="bottom|top|middle|left|right"]
   [height="displayPixels"][width="displayPixels"][hspace="leftRightPixels"][vspace="topBottomPixels"]
   [jrevesion="JREVersionNumber|1.1"][nspluginurl="URLToPlugin"][iepluginurl="URLToPlugin"]
   >
   [<jsp:params>
   [<jsp:param name="parameterName" value="{parameterValue|<%=expression%>}"/>]+
   </jsp:params>]
   [<jsp:fallback>text message for user</jsp:fallback>]
   </jsp:plugin>
   ex:
      <jsp:plugin type="applet" code="com.hellking.test.MyApplet.class" codebase=".">
       <jsp:params>
         <jsp:param name="aParameterName" value="aParameterNameValue"/>
       </jsp:params>
       <jsp:fallback>
         <p>Unable to load applet</p>
       </jsp:fallback>
      </jsp:plugin>
   (1)type="bean|applet" 将被执行的插件对象的类型.此属性无默认值.必须选择一个.
   (2)code="classFileName" 插件将执行的java类文件的名称.必须包括扩展名,且此文件必须在用"codebase"属性指明的目录下.
   (3)codebase="classFileDirectoryName" 包含插件将运行的java类的目录或指向这个目录的路径.默认jsp的当前路径.
   (4)name="instanceName" Bean或Applet的实例的名称.使得被同一个jsp文件调用的Bean或Applet之间的通信成为可能.
   (5)archive="URIToArchive,..."以逗号分隔的路径名列表.是那些用于codebase指定的目录下的类装载器预装载的存档文件所在的路径名.
   (6)align="bottom|top|middle|left|right" 图形,对象,Applet的排列方式.
   (7)height="displayPixels" width="displayPixels"  Applet或Bean将要显示的长度的值,此值为数字,单位为象素,如height="800"
   (8)hspace="leftRightPixels" vspace="topBottomPixels" Applet或Bean显示时在屏幕左右,上下所需留下的空间大小,单位为象素.
   (9)jrevesion="JREVersionNumber|1.1"  Applet或Bean运行所需的Java Runtime Environment(JRE)的版本,默认值为1.1
   (10)nspluginurl="URLToPlugin" Netscape Navigator用户能够使用的JRE的下载地址,此值为一个标准的URL.
   (11)iepluginurl="URLToPlugin" Internet Explorer用户能够使用的JRE的下载地址,此值为一个标准的URL.
   (12)<jsp:params>  需要向Applet或Bean传送的参数或参数值.
   (13)<jsp:fallback>show text message for user</jsp:fallback> 用于java插件不能启动时显示给用户的一段文字,如果插件能够启动
       而Applet或Bean不能使用,那么浏览器会弹出一个出错信息.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值