新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Java/Eclipse 』 → [合集] JSP2.0 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 5131 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [合集] JSP2.0 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18408
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 Java/Eclipse 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 [合集] JSP2.0

    ● [合集] JSP2.0 (转载)发信人: oosky (天天), 信区: J2EE
    标  题: [合集] JSP2.0
    发信站: BBS 水木清华站 (Mon Mar 29 23:27:10 2004), 站内

    【 以下文字转载自 JavaClub 讨论区 】
    发信人: oosky (天天), 信区: JavaClub
    标  题: [合集] JSP2.0
    发信站: BBS 水木清华站 (Mon Mar 29 23:26:54 2004), 站内

    ☆─────────────────────────────────────☆  
    ifyr (吴雨) 于  (Sun Feb 29 11:37:42 2004)  提到:

    这是一个垃圾广告邮件中间带的连接上的资料,为了避免免费宣传的嫌疑
    不给超链了,hoho

    JSP(JavaServer Pages)技术是对Servlet的进一步抽象,它由JCP(Java Community
    Process)开发,是用于生成动态内容的开放式的、可免费获取的规范,也是J2EE(Ja
    va 2 Enterprise Edition)规范的重要组成部分。JSP2.0版是对JSP1.2的升级,增加了
    一些有趣的新特性。JSP2.0的目标是:
    ·使动态网页的设计更加容易
    ·简化JSP页面,使得JSP页面容易维护
    ·使WEB应用程序前后台应用更清晰
    ·无需学习Java编程语言就可以编写JSP页面

    除了其他一些改进外,JSP 2.0引入的最主要的新特性包括:
    ·一种简单的表达式语言(EL),能够用来容易地从JSP页面访问数据,这种表达式语言
    简化了基于JSP的不含脚本的应用程序的编写,不需要使用Java Scriptlet或者Java表达
    式;
    ·用于直接使用JSP技术来定义可重用的自定义行为的新语法,该语法使用.tag和.tagx
    文件,这类文件可由开发人员或者网页作者编写;
    ·XML语法得到了实质性的改进,增加了新的标准文件扩展名(.tagx用于标签文件,.j
    spx用于JSP文件)。

    TOMCAT5.0.x服务器支持以上JSP2.0的全部特性,下面讨论表达式语言、简化的标签API和
    标签文件,以下的JSP程序都是在TOMCAT5.0.X上实现的。相信目前的JSP开发人员将会发
    现这些重要的特性不但有趣,而且非常有用。

    一. JSP表达式语言 - EL扩展表达式语言
    EL(表达式语言)是一种数据访问语言,可以方便地访问和处理应用程序数据,而无需使
    用scriptlet或者请求时(request-time)表达式的值。(不需要使用<% 和%>来获得数据
    ,EL使JSP页面编写人员摆脱了java语言,使用户即使不懂JAVA也可以轻松编写JSP程序.

    在JSP2.0之前,网页作者只能使用表达式<%= aName %>访问系统的值,比如:
    <someTags:aTag attribute="<%= pageContext.getAttribute("aName") %>"> 或者 <%
    = aCustomer.getAddress().getCountry() %>
    而表达式语言允许网页作者使用简单的语法访问对象。比如要访问一个简单变量,可以
    像下面这样写:
    <someTags:aTag attribute="${aName}">
    而访问JavaBeans属性,可以使用:${aCustomer.address.country}

    Tomcat对EL扩展表达式的支持和配置:
    tomcat5.0默认支持EL,同时用户可以在Web.xml文件中对整个web应用程序进行设置或者
    在每个页面中单独设置page指令来控制TOMCAT是否对EL的支持。
    ----------------------------
    EL扩展表达式语言的设置
    对于一个单个JSP页面,你可以使用定义page指令来设置jsp页面是否支持EL。默认是支
    持EL(如果要页面不支持EL,请设置为isELIgnored=true;
    <%@ page isELIgnored="true|false"%>
    对于整个JSP应用程序,要修改WEB.XML配置(tomcat5.0.16默认是支持EL的);
    <jsp-property-group>
    <description> For config the ICW sample application </description>
    <display-name>JSPConfiguration</display-name>
    <url-pattern>/jsp/datareset.jsp</url-pattern>
    <el-ignored>true< / el-ignored>
    <page-encoding>ISO-8859-1</page-encoding>
    <scripting-invalid>true</scripting-invalid>
    <include-prelude>/jsp/prelude.jspf</include-prelude>
    <include-coda>/jsp/coda.jspf</include-coda>
    </jsp-property-group>
    ----------------------------

    表达式运算符号:
    EL表达式运算符包括算数运算符(+-*/),关系运算符(><)和逻辑运算符(&& || !),还有
    empty 判断值是否为空,同时EL能够对字符串,数字等各种类型的数据之间的自动转换,
    使EL 兼容了JAVASCRIPT等脚本语言的优点,摆脱了JAVA语言严格的数据类型限制,使用
    起来简单,只需要几分钟就可以轻松掌握(对于不懂java的网页编写人员实在是一件好事
    )。

    ----------------------------
    各种运算符运算实例

    以下是EL运算符列表,其中empty可以检查某个值是否为空

    运算符 说明
    +   加
    -    减
    *   乘
    /或div  除
    % 或 mod 模(求余)
    == 或 = 等于
    != 或 != 不等于
    < 或 lt  小于
    >或gt   大于
    <=或le 小于等于
    >=或ge 大于等于
    && 或 and 逻辑与
    || 或 or 逻辑或
    ! 或 not 逻辑非
    empty 检查是否为空值
    a ? b : c 条件运算符
    ----------------------------
    EL表达式使用简单,在网页中"\${}"表示是EL表达式。\${1+1} 显示为 2
    ----------------------------

    EL算术表达式 运算结果
    ${1} 1
    ${1 + 2} 3
    ${1.2 + 2.3} 3.5
    ${-4 - 2} -6
    ${21 * 2} 42
    ${10%4} 2
    ${10 mod 4} 2
    ${1 < 2} true
    ${1 lt 2} true
    ${1 > (4/2)} false
    ${4.0 >= 3} true
    ${4.0 ge 3} true
    ${100.0 eq 100} true
    ${(10*10) != 100} false
    ${(10*10) ne 100} false
    ${(1==2) ? 3 : 4} 4
    ----------------------------

    内置的11个隐含对象:
    为方便的获得WEB应用程序的相关数据,EL表达式语言定义了一些隐含对象。隐含对象共
    有11个对象,(JSP中具有9个隐含对象,EL比JSP中具有更多的隐含对象,这样EL比JSP更
    方便的获取数据) 使用这些对象可以很方便的访问Web 程序数据。

    隐含对象包括Session(获得当前web程序的Session值),cookie(获得WEB程序的Cookie值
    ),header,headerValues(获得用户的Http数据访问头部信息),Param和ParamValues(获得
    用户提交数据参数)等。

    使用${隐含对象名称["元素"]} 就可以获得这个值了,例如${header("host")} 可以显示
    http头部中host的值,${param("username")},可以获得显示用户表单提交的用户. 使用
    ${empty(param("username")} 可以判断用户提交表单是否为空等。(这样比jsp1.2中使
    用request.getParamter("username") 要简化和方便很多了)

    ----------------------------
    隐含对象及隐含对象访问实例
    EL 表达式定义了11个隐含对象,使用这11个对象可以很方便的读取到session,cookie,H
    ttpHeader,用户提交表单(param)等

    隐含对象  内容
    applicationScope  应用程序范围内的scoped变量组成的集合
    cookie  所有cookie组成的集合
    header  HTTP请求头部,字符串
    headerValues  HTTP请求头部,字符串集合
    initParam  全部应用程序参数名组成的集合
    pageContext  当前页面的javax.servlet.jsp.PageContext对象
    pageScope  页面范围内所有对象的集合
    param  所有请求参数字符串组成的集合
    paramValues  所有作为字符串集合的请求参数
    requestScope  所有请求范围的对象的集合
    sessionScope  所有会话范围的对象的集合
    下面是获取HTTP访问头部数据和用户提交数据的示例
    EL表达式 运算结果
    ${header["host"]}  这里得到HTTP连接头部的host值
    ${header["accept"]}  这里获得HTTP头部的accept值
    ${header["user-agent"]}  这里获得HTTP头部的user-agent值
    ----------------------------

    访问应用程序数据
    除了可以方便的访问内置的隐含对象外,EL还可以方便的到应用程序数据,访问应用程序
    数据使用两种方式 . (点号运算符)访问对象的属性,也可以使用[] 来访问数组元素(实
    际上EL中访问隐含对象数据也是使用这两种方式的)

    表达式${data}表示名为data的scoped变量。可以使用点号(.)或方括号([])运算符
    从集合中检索属性值:(两种数据访问方式演示)

    点号运算符用于访问命名的属性,比如表达式${customer.name}表示scoped变量custom
    er的name属性;

    方括号运算符可用于检索命名的属性,比如在${customer[“name”]}中。也可以通过$
    {customers[0]}的形式来访问集合customers中的第一项。

    EL表达式语言同时还统一了对点号和方括号运算符的处理,因此${customer.name}与${
    customer[“name”]}是等价的。

    ----------------------------
    以下可以读取用户提交的信息,假设用户提交信息为 ?name=myname&alies=now.net.cn(
    这里有两种访问方式,一种是使用[]来进行访问,另外一种是使用"."来进行访问,两种访
    问效果是一样的。)
    ${param["name"] }  myname
    ${param.name}   myname
    ${param["alies"] }  now.net.cn
    ${param.alies} now.net.cn
    ----------------------------

    访问应用程序数据需要进行以下几个步骤:
    1.编写public类的static public 方法,只有static public的方法才能被标记表达试访
    问。

    ----------------------------
    定义和使用函数
    表达式语言允许你定义可在表达式中调用的函数。函数必须作为public类中的public s
    tatic方法编写。同时要将文件映射到TLD标志库文件中。

    为了说明函数的使用,我们举一个简单的例子,把两个数相加。首先要编写求两数之和
    的Java方法代码,如代码示例所示,这里定义了一个静态方法,它接收两个字符串参数
    ,把它们解析成整数并返回它们的和。

    示例文件:Compute.java

    package jsp2.examples.el;
    import java.util.*;
    public class Compute {
         public static int add(String x, String y) {
            int a = 0;
            int b = 0;
            try {
                a = Integer.parseInt(x);
                b = Integer.parseInt(y);
            }catch(Exception e) {}
                return a + b;
         }
    }
    用javac把这段代码编译成功后,下一步就要把函数的签名映射到标签库。
    ----------------------------

    2.将方法映射到TLD表中

    ----------------------------
    配置标记库描述文件 函数描述符
        <function>
                <description>add x and y</description>
                <name>add</name>
                <function-class>jsp2.examples.el.Compute
                        </function-class>
                <function-signature>int
                        add(java.lang.String,java.lang.String)
                                </function-signature>
        </function>
    现在我们就可以编写一个JSP页面来使用这个函数。代码示例5是包含两个字段的一个表
    单,用户输入两个数字并按下“求和”按钮,就会调用上面的函数并把两个数相加,结
    果在同一个页面中显示出来。
    ----------------------------

    3.在JSP页面中调用要引用的Taglib标记,然后就可以在jsp页面中访问了。

    ----------------------------
    代码示例5: math.jsp
    <%@ taglib prefix="my"
            uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib %>
    <HEAD>
    <TITLE>Functions</TITLE>
    </HEAD>
    <BODY>
    <H3>Add Numbers</H3>
    <P>
    <FORM action="math.jsp" method="GET">
         X = <input type="text" name="x" value="\${param["x"]}">
        <BR>
         Y = <input type="text" name="y" value="\${param["y"]}">
        <input type="submit" value="Add Numbers">
    </FORM>
    <P>
    The sum is: \${my:add(param["x"],param["y"])}
    </BODY>
    </HTML>
    ----------------------------

    二. 简单标志库扩展 _SimpleTag
    在jsp1.2时代已经有标记库了, 并且功能强大,但标记库的编程和调用都比较复杂,导
    致真正使用到WEB开发中的还是不多。JSP2.0推出的简单标记库扩展解决了以上的问题。
    简单标记库相对JSP1.2中的标记库来说,优点在于:
    对后台程序员来说:结构更简单,实现接口更少,可以轻松实现后台程序

    JSP 2.0中加入了新的创建自制标记的API:javax.servlet.jsp.tagext.SimpleTag,该
    API定义了用来实现简单标记的接口。和JSP 1.2中的已有接口不同的是,SimpleTag接口
    不使用doStartTag()和doEndTag()方法,而提供了一个简单的doTag()方法。这个方法在
    调用该标记时只被使用一次。而需要在一个自制标记中实现的所有逻辑过程、循环和对
    标记体的评估等都在这个方法中实现。从这个方面来讲,SimpleTag可以和IterationTa
    g达到同等的作用。但SimpleTag的方法和处理周期要简单得多。在SimpleTag中还有用来
    设置JSP内容的setJspBody()和getJspBody()方法。Web容器会使用setJspBody()方法定
    义一个代表JSP内容的JspFragment对象。实现SimpleTag标记的程序可以在doTag方法中
    根据需要多次调用getJspBody().invoke()方法以处理JSP内容。
    对于前台WEB页面制作人员:在JSP1.2时代,Taglib页面调用实际上是比较复杂的,Simpl
    eTag+EL表达式语言极大的简化了Taglib调用,真正达到不懂JAVA的人员也可以轻松编写
    JSP页面的目的。

    一个Taglib页面的编写和调用包括三个流程:

    1. 后台程序员编写要被调用的程序

    ----------------------------
    简单标志扩展实现示例:
    java程序 RepeatSimpleTag.java://放到WEB-INF/classes/jsp2/examples/simpletag
    下面
    package jsp2.examples.simpletag;

    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    import java.util.HashMap;
    import java.io.IOException;

    public class RepeatSimpleTag extends SimpleTagSupport {

            private int num;

            public void doTag() throws JspException, IOException {
                    for (int i=0; i<num; i++) {
                            getJspContext().setAttribute("count",
    String.valueOf( i + 1 ) );
                            getJspBody().invoke(null);
                    }
            }

            public void setNum(int num) {
                    //这个用来设置num的值,这个方法将在tld文件中调用
                    this.num = num;
            }
    }
    ----------------------------

    2. 编辑Tag标志描述文件,这个文件要放在WEB-INF\jsp2下面,并且这个文件要以tld为
    文件结尾。

    ----------------------------
    repeatTaglib.tld (标志库描述文件,放在WEB-INF下面的jsp2下面)
    <?xml version="1.0" encoding="UTF-8" ?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org
    /2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2e
    e web-jsptaglibrary_2_0.xsd" version="2.0">
            <description>A tag library exercising SimpleTag handlers.</description>
            <tlib-version>1.0</tlib-version>
            <short-name>SimpleTagLibrary</short-name>
            <uri>/SimpleTagLibrary</uri>
            <tag> <!--这里是开始标志描述-->
                    <name>repeat</name> <!--这里设定的标志名称,供jsp文件调用-->
                    <tag-class>jsp2.examples.simpletag.RepeatSimpleTag</tag-class>
                    <!--对应的java文件路径-->
                    <body-content>scriptless</body-content>
                    <variable> <!--设置要获取的变量返回值-->
                            <description>Current invocation count (1 to num)</descri
    ption>
                            <name-given>count</name-given>
                    </variable>
                    <attribute> <!--设置java类中变量,调用java文件中的setNum()方法-->
                            <name>num</name>
                            <required>true</required>
                            <rtexprvalue>true</rtexprvalue>
                    </attribute>
            </tag> <!--//这里是结束标志描述-->
    </taglib>
    ----------------------------
    3.JSP页面人员就可以直接调用了。
    ----------------------------
    repeat.jsp
    <%@ taglib prefix="repeattag" uri="/WEB-INF/jsp2/repeatTaglib.tld" %>
    <html>
    <body>
    <br>
    <repeattag:repeat num="5">//向标记库文件中的repeat标记付值
    获得返回值:${count} of 5<br>//得到返回结果(java程序中实现了循环)
    </repeattag:repeat>
    </body>
    </html>
    看这么简单就可以得到想要的结果,方便吧。
    ----------------------------
    使用标签文件(JSP fragment):
    使用简单标签扩展机制的另一种简单的方法是通过标签文件。
    标签文件是一种资源文件,网页作者可以利用它抽取一段JSP代码,通过定制功能来实现
    代码的复用。换句话说,标签文件允许JSP网页作者使用JSP语法创建可复用的标签库。
    标签文件的扩展名必须是“.tag”。表面上标签文件文件和jsp1.2中的jsp:include 指
    令中的包含文件好像是一样的,但实际上还是有一些不同的,标签文件一般功能比较短小
    简单而且重复使用率高的一些代码。
    ----------------------------
    一个简单的标签文件
    SimpleTag.tag 这个文件放到WEB-INF/tags下面
    <h4>hello,welcome to here ,here is a simple tag Example</h4>
    char.jsp
    <%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
    <HTML>
    <BODY>
    <H2>Tag File Example</H2>
    <P><B>The output of my first tag file is</B>: <tags:SimpleTag/>
    </BODY>
    </HTML>
    如果其他JSP页面中还要使用这个标签文件,同样也可以实现这调用这个标志库文件,达到
    简单的代码复用的目的。
    ----------------------------
    标签文件(JSP fragment)的基本特点是可以使处理JSP的容器推迟评估JSP标记属性。我
    们知道一般JSP是首先评估JSP标记的属性,然后在处理JSP标记时使用这些属性,而JSP
    fragment提供了动态的属性。也就是说,这些属性在JSP处理其标记体时是可以被改变
    的。标签文件是用文本文件格式(JSP语法)实现自制标记,这也是JSP 2.0的一个主要新
    功能。
    ----------------------------
    标签文件的动态复用
    标签文件可以作为模板使用。指令attribute类似于TLD中的<attribute>元素,允许声明
    自定义的动作属性。
    <%@ attribute name="color" %>
    <%@ attribute name="bgcolor" %>
    <%@ attribute name="title" %>
    <TABLE border="0" bgcolor="${color}">
    <TR> <TD><B>${title}</B></TD> </TR>
    <TR> <TD bgcolor="${bgcolor}"> <jsp:doBody/> </TD> </TR>
    </TABLE>
    以下是调用这个Tag文件的jsp文件
    <%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
    <HTML><BODY>
    <TABLE border="0">
    <TR valign="top">
    <TD>
    <tags:display color="#ff0000" bgcolor="#ffc0c0" title="Travel"> Last French
    Concorde Arrives in NY
    Another Travel Headline
    Yet Another Travel Headline
    </tags:display>
    </TD>
    <TD> <tags:display color="#00fc00" bgcolor="#c0ffc0" title="Technology"> Jav
    a for in-flight entertainment
    Another Technology Headline
    Another Technology Headline
    </tags:display>
    </TD>
    <TD> <tags:display color="#ffcc11" bgcolor="#ffffcc" title="Sports"> America
    n Football NBA Soccer
    </tags:display>
    </TD>
    </TR>
    </TABLE> </BODY> </HTML>
    其中<tags:display color="#ffcc11" bgcolor="#ffffcc" title="Sports"> 每次设定
    Tag文件中的相关的属性,而Tag标志文件则根据设定的属性显示相应的结果。
    ----------------------------



    ☆─────────────────────────────────────☆  
    nerd (桔子) 于  (Sun Feb 29 12:19:12 2004)  提到:

    tag早就被支持了啊,没看到什么别的更新的



    ☆─────────────────────────────────────☆  
    cloudor (天赐良机) 于  (Sun Feb 29 17:58:46 2004)  提到:


    那看来你没有写过以前的tag吧,以前的tag都是doTagStart和doTagEnd,
    现在的确简单多了。



    ☆─────────────────────────────────────☆  
    zms (来福) 于  (Tue Mar  2 16:00:51 2004)  提到:

    新引入的是tag file
    tag file比tag  就像jsp比servlet

    索引页面|上一篇|下一篇


       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/9/23 0:40:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2026/1/23 6:56:35

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms