??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧美国产日韩中文字幕,视频在线观看入口黄最新永久免费国产,国产成人精品www牛牛影视http://www.aygfsteel.com/hitlang/category/14251.html学以致用zh-cnWed, 28 Feb 2007 08:20:26 GMTWed, 28 Feb 2007 08:20:26 GMT60JSP学习W记http://www.aygfsteel.com/hitlang/articles/71845.htmlliulangliulangMon, 25 Sep 2006 14:52:00 GMThttp://www.aygfsteel.com/hitlang/articles/71845.htmlhttp://www.aygfsteel.com/hitlang/comments/71845.htmlhttp://www.aygfsteel.com/hitlang/articles/71845.html#Feedback0http://www.aygfsteel.com/hitlang/comments/commentRss/71845.htmlhttp://www.aygfsteel.com/hitlang/services/trackbacks/71845.html                  2004-9-27      星期一      ?/b>

JSP介绍

1.  概况
{:1) 以文本ؓ基础能够q回动态内容到客户?
    2) Http是请求和响应的默认协?
    3) 一个页面可以؜和html代码、Java代码以及JSP标答;
    4) 允许讉Klg;

2.  JSP的好?br />{:1) 通过lg使用支持lg模型和Y仉?
    2) 源文件改变自动编?
    3) 用户自定义标{化页面开?
    4) 能把Web内容, Java代码分开(针对Servlet而言);
    5) q_无关;
    6) 性能和可扩展;
    7) 可靠;
    8) 作ؓJ2EE的一部分(Servlet、JSP以及EJB是J2EE的三大组??/b>

创徏、配|以及执行JSP

1.  JSP环境
{:1) 开发环?br />       a. 览器:IE/Netscape
       b. 开发工PC本、SunOne Studio、JBuilder、WSAD
    2) 配置和执行环?br />       a. Tomcat
       b. Weblogic
       c. Websphere
       d. SunONE Application Server

2. W一个JSP面
{:1) 脚本程?Scriptlet):
       对应于Servlet中serviceҎ中内?br />       <%...%>?lt;jsp:scriptlet></jsp:scriptlet>
    2) 指o(Directives)
       a. page
          <%@page import="java.util.*"%>?lt;jsp:directive.page import="java.util.*"/>
       b. include
          <%@include file="footer.jsp"%>?lt;jsp:directive.include file="footer.jsp"/>
    3) 声明(Declarations)
       <%!String str="This is a string!";%>?lt;jsp:declaration>str="This is a string!"</jsp:declaration>
    4) 表达?Expressions)
       <%=str%>?lt;jsp:expression>str</jsp:expression>

2004-9-28      星期二    ??/b>

脚本元素

1.  在JSP面通过以下脚本元素可用以插入Java代码
{:1) 声明(Declarations)Q?lt;%! %>?lt;jsp:declaration></jsp:declaration>
    2) 脚本程?Scriptlet)Q?lt;%...%>?lt;jsp:scriptlet></jsp:scriptlet>
    3) 表达?Expressions)Q?lt;%=%>?lt;jsp:expression></jsp:expression>
    4) 指o(Directives)Q?lt;%@%>?lt;jsp:directive.type attribute />

2.  声明(Declarations)
{:1) 允许定义插入到ServletcȝM?由service调用, 与Service()Ҏq)的一些方法或?
    2) 语法Q?br />       <%! Java代码 %> ?br />       <jsp:declaration></jsp:declaration>
    3) CZQ?br />       a. 变量定义Q?br />          <%! int i=0;%>
       b. Ҏ定义Q?br />          <%! public String f(int i){if(i<3) return("...");...}%>
    4) 声明规则Q?br />       a. JSP中声明的变量和方法对应于Servlet中的实例Ҏ和实例变量。这些将被同时请求该面的所有用h׃n;
       b. 在用变量或Ҏ前须先定?不是说声明变量的位置在页面中要处于用变量的前面Q而是指变量不声明不能使用);
       c. 声明的变量或Ҏ的作用域为当前页面或包含的页?
       d. 语句间以分号分隔?/b>

3.  脚本程?Scriptlet)
{:1) Java代码片断Q能执行比标记语a更强的功?br />    2) 语法Q?br />       <%...%>?lt;jsp:scriptlet></jsp:scriptlet>
    3) 脚本程序规则:
       a. 你用的脚本语言军_了脚本小E序的规?
       b. 语句间以分号分隔;
       c. 可以使用默认的对象、importq的cRdeclaration声明的方法和对象以及useBean tag中声明的对象?/b>

4.  表达?Expression)
{? 1) 用来值直接插入到输出?br />    2) 语法Q?br />       <%=%>?lt;jsp:expression></jsp:expression>
    3) 表达式规则:
       a. 你用的脚本语言军_了脚本小E序的规?
       b. 执行的顺序ؓ从左到右;
       c. 分号不能用于表达式?/b>

5.  指o(Directive)
{:1) Page: 定义面的全局属?br />       语法Q?lt;%@page ...%>?lt;jsp:directive.page .../>
    2) Include: 插入一个静态页面内?br />       语法Q?lt;%@include file="header.jsp"%>?lt;jsp:directive.include file="header.jsp"/>

6.  操作(Actions)
{:1) forward操作Q将h指向一个特定的面(cM于Servlet中的RequestDispatcher);
       语法Q?lt;jsp:forward page="URL"/>
    2) include操作Q在面插入动态的内容
       语法Q?lt;jsp:include page="URL" flush="true"/>
    3) plugin操作Q在输出面嵌入一个对?br />       语法Q?lt;jsp:plugin type="bean|applet" code="objectCode" codebase="objectCodebase">
             <jsp:params>
             ...
             </jsp:params>
             </jsp:plugin>
7.  注释
{:JSP中有二种cd的注释:
    1) 服务器端注释Q不会送回客户?br />       <%--this is a comment--%>
    2) 客户端注释:发送回客户?br />       <!--comments-->

8.  JSP处理q程Q?br />{:JSP源文件处理分成二个阶D:
    1) JSP面转换阶段Q页面被~译成一个Javac,所有的HTML标记和JSP标记都被转换创徏一个Servlet。这Ӟ脚本和表辑ּq没有被执行;
    2) h处理阶段Q发生在服务器将一个客Lh指向JSP面。一个请求对象创建、解析以及提交给~译好的JSP对应的servlet。当q个servlet处理求求的时候它执行先前在JSP中定义的处理脚本程序和表达式?/b>

9.  使用脚本代码的缺点和指导斚w
{:1) ~点Q?br />       a. q度使用脚本代码使用JSP面混ؕ和难以维?
       b. 脚本代码降低JSP二个主要的优点:软g重用和代码分开
    2) 指导斚wQ?br />       只在lg功能无能为力或需要有限的脚本时用?br />2004-9-29      星期三    ??/strong>

使用可重用组?/strong>

1.  JavaBeans
{:1) JavaBeans是一个轻便的、^台无关的、用Java写的lg模型Q用以创建可重用的组?
    2) Beans能被lg创徏健壮、跨q_的应用程序和应用程序?/strong>

2.  JSP和组?br />{:1) 在需要的时候,JSP可以讉KJavaBean和EJBQ?br />    2) JSP使用action标记来用、修改以及创建服务器端对?例如Beans);

3.  JavaBean与一般Javacȝ区别
{:1) Beancdd有不带参数的构造函?
    2) Beancd该没有Q何公用实例变??;
    3) 通过get和setҎ应该获得一致的倹{?/strong>

4.  Bean的基本用?br />{:1) 调用Bean
       语法Q?lt;jsp:useBean id="thread1" class="MyClass" type="Runnable"/>
             通常可以认ؓ{h于小脚本Q?br />             Runnable thread1 = new MyClass();
             以上代码意味着仅当不存在具有相同id和scope的对象时实例化class所指定的类对象Qƈ其l定到由id指定名称的变?br />    2) 讉KBean的属?br />       语法Q?lt;jsp:getProperty name="book1" property="title"/> 或?br />             <%=book1.getTitle()%>
    3) 讄Bean的属?br />       a. 单情?br />          语法Q?lt;jsp:setProperty name="book1" property="title" value="Core Servlets and JavaServer Page"/> 或?lt;%book1.setTitle("Core Servlets and JavaServer Page");%>
       b. 使用JSP表达式作为value参数
          语法Q?lt;jsp:setProperty
                     name="entry"
                     property="itemID"
                     value='<%=request.getParameter("itemID")%>'/>
       c. 建立个别属性与输入参数之间的关?br />          语法Q?lt;jsp:setProperty
                     name="entry"
                     property="numItems"
                     param="numItems"/> //使用param指定输入参数Q此参数D动用作该属性|q自动执行简单的cd转换
       d. 建立所有属性与输入参数之间的关?br />          语法Q?lt;jsp:setProperty
                     name="entry"
                     property="*"/>
          需要注意:i : 当输入参数遗失时Q不执行M操作Q系l不会提供null作ؓ属性?
                    ii: 无法完成值类型ؓdouble的属性的cd转换;
                    iV: 在用自动类型{换时Q需要考虑错误处理面;
                    v : 属性名和输入参数必d全匹配?/strong>

5.  ׃nBean
{:1) scope作用域:
       a. page       : 默认|表明Bean对象除了被绑定到局部变量,q将位于PageContext对象?
       b. application: 表明Bean对象除了被绑定到局部变量,q将位于ServletContext对象?
       c. session    : 表明Bean对象除了被绑定到局部变量,q将位于当前h相关的HttpSession对象?
       d. request    : 表明Bean对象除了被绑定到局部变量,q将位于ServletRequest对象?
    2) 调用Bean的方式:
       <jsp:useBean ...>
       语句(仅当创徏Bean而不是用现有Bean时才被执?
       </jsp:useBean>

2004-9-30      星期四    ??/strong>

处理异常

1.  q行时异?br />{:1) 一个程序运行时重获的错?
    2) 能被一固有的异常对象引用所使用;
    3) 可以利用异常引用创徏或生一个JSP面昄异常信息l用戗?/strong>

2.  创徏一个异常跟t方?br />{:1) 在每一个JSP面Q包含要创徏的异帔R面名U?
       <
%@page import="numberguess.NumberGuessBean" errorPage="error.jsp"%>
    2) 创徏一个异帔R?
       <
%@page isErrorPage="true"%>

3.  JSP面中的异常处理
{:1) <%=exception.toString()%>        打印异常名称;
    2) <%exception.printStackTrace();%> 打印当前错误中所有错误的列表;
    3) <%=exception.getMessage()%>      打印错误的详l描qC?/strong>

更高U的主题

1.  JSP中黙认的内在对象
{:名称         cd                                     注释和范?br />    request      javax.servlet.http.HttpServletRequest    request
    response     javax.servlet.http.HttpServletResponse   response
    pageContext  javax.servlet.jsp.PageContext            page
    session      javax.servlet.http.HttpSession           session
    application  javax.servlet.ServletContext             ServletContext
    out          javax.servlet.jsp.JspWriter              output stream
    config       javax.servlet.ServletConfig              ServletConfig
    page         javax.lang.Object                        page
    Exception    java.lang.Throwable                      page

2.  默认对象之请?request)
{:装了来自客L的请求:
    ҎQ?) getCookies: 取得Cookie数组;
          2) getMethod: q回h形成的方?GET/POST);
          3) getParameterNames: q回form中对象名U的枚D;
          4) getParameterQ返回指定名U的对象?
          5) getParameterValues: q回指定名称的对象值数l?
          6) setAttribute: 讄属?
          7) getAttribute: q回属性?
          8) getAttributeNames: q回属性名U的枚D

3.  默认对象之out
{:JSPWriter的一个实? 用于发送响应给客户?br />    ҎQ?) print(String)/println(String)
          2) print(int)/println(int)
          3) flush()

4.  默认对象之exception
{:1) 用于异常对象的异常实?
    2) 异常面在page指o中存在属性isErrorPage="true";
    3) ҎQgetMessage()/printStackTrace()/toString()
 
5.  默认对象之session
{:1) HttpSession的一个实? 用于在一个session中保持状?br />    2) ҎQgetAttribute()
             setAttribute()
             removeAttribute()
             getAttributeNames()

6.  默认对象之application
{:1) ServletContext一个实例,用于保持application的状?br />    2) ҎQgetAttribute()
             setAttribute()
             getInitParameter()
             getServletInfo()
    3) application的作用域比session大得多,一个session和一个client联系, 而application保持了用于所有客L的状?/strong>

2004-10-8      星期四    ?晾b                                           ?

自定义标{ֺ(?

1.  什么是自定义标{?br />{:1) 用户自定义的Java语言元素, 实质是运行一个或者两个接口的JavaBean;
    2) 可以非常机密地和JSP的表C逻辑联系在一P又具有和普通JavaBean相同的业务逻辑处理能力;
    2) 当一个JSP面转变为servletӞ光的用戯定义标签转化为操作一个称为标{hander的对?
    3) 可操作默认对象,处理表单数据Q访问数据库以及其它企业服务;                

2.  自定义标{ֺ的特?br />{:1) 通过调用面传递参数实现定?
    2) 讉K所有对JSP面可能的对?
    3) 修改调用面生成的响?
    4) 自定义标{N可相互通信;
    5) 在同一个JSP面中通过标签嵌套Q可实现复杂交互?/strong>

3.  如何使用自定义标{ֺ
{:1) 声明标签?br />    2) 使标{ֺ执行对Web应用E序可用

4.  声明标签?br />{:1) 使用taglib指o声明标签?br />    2) 语法Q?lt; %@taglib uri="URI" prefix="pre" %>
       注意Qa. uri属性可以是l对的,也可以是相对URLQ该URL指向标记库描q符(TLD)文g;
             b. uri属性也可以是一个ƈ不存在的URLQ该URL为web.xml文g中将标记库描q符(TLD)文g的绝对URL到本地系l的一个映?
    3) 范例Q?lt;
%@taglib uri="/WEB-INF/template.tld" prefix="test" %>
             <
%@taglib uri=" http://java.sun.com/jstl/core " prefix="core" %>      

5.  使标{ֺ执行可用
{:方式一Q在WEB-INF/classes目录下部|标记处理程序类;
    方式二:标记处理程序类打包成jar文gq置于WEB-INF/lib目录?/strong>

6.  几种典型的标{?疑问Q可以有带主体而没有属性的标签么?)
{:1) 不带属性和M的简单标{:<mytaglibs:SomeTag/>;
    2) 不带M但有属性的标签Q?lt;mytaglibs:SomeTag user="TonyDeng"/>;
    3) 带有M和属性的标签Q?lt;mytaglibs:SomeTag user="TonyDeng">
                             ...// 标签?br />                             </mytaglibs:SomeTag>;
    注意Qa. 属性列于start tag中,它是在标记库描述W?TLD)文g中指定,服务于标记库的自定义行ؓ;
          b. 标签体位于start tag和end tag_可以是Q何合法的JSP内容或者标{?

7.  定义标签
{:1) 开发实现tag的类(tag handler);
    2) ~辑标记库描q符(TLD)文g;
    3) 在web.xml中ؓ标记库描q符(TLD)文g的绝对URL建立一个映?该步骤可?;

8.  标记库描q符(TLD)文g
{:1) 一个描q标记库的XML文g;
    2) 内容开始是整个库的描述Q然后是tag的描q?
    3) 标记库描q符(TLD)文g用于Web Container认tag以及JSP面发展工具;

9.  实现tag的类(tag handler)
{:1) 是一些在引用了标{JSP面执行期间被Web Container调用以求自定义标{ր的对象;
    2) 必须实现Tag, SimpleTag和BodyTag之一;
    3) 可以l承TagSupport和BodyTagSupport之一?/strong>

10. 标签库的接口和类的承关p?br />{:表现形式一Q?br />    a. 接口的承关p:
       ?interface javax.servlet.jsp.tagext.JspTag
          ?interface javax.servlet.jsp.tagext.SimpleTag
          ?interface javax.servlet.jsp.tagext.Tag
             ?interface javax.servlet.jsp.tagext.IterationTag
             ?interface javax.servlet.jsp.tagext.BodyTag
    b. cȝl承关系Q?br />       ?class javax.servlet.jsp.tagext.TagSupport (implements javax.servlet.jsp.tagext.IterationTag, java.io.Serializable)
          ?class javax.servlet.jsp.tagext.BodyTagSupport (implements javax.servlet.jsp.tagext.BodyTag)
       ?class javax.servlet.jsp.tagext.SimpleTagSupport (implements javax.servlet.jsp.tagext.SimpleTag)
    表现形式二:
                  (Interface)
                    JspTag
                      ?br />              |ˉˉˉˉˉˉˉˉ|   
         (Interface)      (Interface)
             Tag           SimpleTag ←-QSimpleTagSupport
              ↑                         ?
              |                           
         (Interface) 
         IterationTag←-QTagSupport
              ↑              ??br />              |                 |
         (Interface)            |
           BodyTag   ←-QBodyTagSupport

    标签接口Ҏ一览表

                  (Interface)
                    JspTag(没有Ҏ)
                      ?br />              |ˉˉˉˉˉˉˉˉ|   
         (Interface)      (Interface)
             Tag           SimpleTag
              ↑                         ?
              |         (int doEndTag()、int doStartTag()、Tag getParent()、void release()、void setPageContext(PageContext pc)、void setParent(Tag t))
         (Interface) 
         IterationTag   (int doAfterBody())
 
              ↑  ?
              |    
         (Interface)
           BodyTag      (void doInitBody()、void setBodyContent(BodyContent b))

 

2004-10-9      星期四    ?晾b                                           ?

自定义标{ֺ(?

11. 一个Tag处理E序cdd现的Ҏ
{:标签处理E序cd            Ҏ
    Simple                      doStartTag, doEndTag, release
    Attributes                  doStartTag, doEndTag, set/getAttribute...release
    Body,No Itrative and        doStartTag, doEndTag, release
    Evaluation 
    Body, Itrative Evaluation   doStartTag, doAterTag, doEndTag, release
    Body, Interaction           doStartTag, doEndTag, release, doInitbody, doAfterBody

12. 单的标签处理E序c?br />{:1) 必须实现Tag接口的doStartTag()和doEndTag()Ҏ;
    2) 因ؓ不存在BodyQdoStartTag()Ҏ必须q回SKIP_BODY;
    3) 如其余页面要执行QdoEndTag()Ҏq回EVAL_PAGE, 否则q回SKIP_PAGE;
    4) 对于每一个标{ֱ性,你必d标签处理E序c里定义一个特性以及get和setҎ以一致于JavaBeans体系惯例

13. 带Body的自定义标签
{:1) 必须实现Tag接口的doStartTag()和doEndTag()Ҏ;
    2) 可以实现IterationTag接口的doAfterBody()Ҏ;
    3) 可以实现BodyTag接口的doInitBody和setBodyContentҎ;
    4) doStartTagҎ可以q回SKIP_BODY、EVAL_BODY_INCLUDE、或者EVAL_BODY_BUFFERED(当你想用BodyContent);
    5) doEndTagҎ可以q回SKIP_PAGE或EVAL_PAGE;
    6) doAfterBodyҎ可以q回EVAL_BODY_AGAIN, SKIP_BODY;

14. 定义脚本变量的标{?q代的标{ֺ)
{:1) 定义脚本标签的二个步?
       a. 在标记库描述W?TLD)文g中列明脚本变?
       b. 定义标签扩展信息c?TEI)q且在TLD文g中包括这个类元素(tei-class);
    2) 变量必须在标{֤理程序类中用pageContext.setAttribute()Ҏ讄;
    3) 标签扩展信息c?TEI)必须l承TagExtraInfo以及覆盖getVariableInfo()Ҏ;
    4) 变量的范围可以是AT_BEGIN, NESTED, AT_END(标签扩展信息c?TEI)的VariableInfo中定?之一;

15. 脚本变量的有效?br />{:变量     |   有效性                  ?
    ---------------------------------------
    NESTED   | 标签中的参数在starttag到endtag之间是有效的
    AT_BEGIN | 标签中的参数在标{开始到JSP面l束是有效的
    AT_END   | 标签中的参数在标{l束到JSP面l束是有效的

2004-10-10     星期四    ??

16.  Tag接口的方?br />{:interface javax.servlet.jsp.tagext.Tag
    ------------------------------------------------------
    +EVAL_BODY_INCLUDE:int
    +EVAL_PAGE:int
    +SKIP_BODY:int
    +SKIP_PAGE:int
    ------------------------------------------------------
    +release():void
    +getParent():javax.servlet.jsp.tagext.Tag
    +setParent(javax.servlet.jsp.tagext.Tag):void
    +doEndTag():int
    +doStartTag():int
    +setPageContext(javax.servlet.jsp.PageContext):void

17.  Tag的生命周?br />{:1) setPageContext(javax.servlet.jsp.PageContext):void
    2) setParent(javax.servlet.jsp.tagext.Tag):void
    3) //setAttribute:void
    4) doStartTag():int
    5) doEndTag():int
    6) release():void

18.  BodyTag和Tag接口的关p?br />{:interface javax.servlet.jsp.tagext.BodyTag      -->     interface javax.servlet.jsp.tagext.Tag
    ------------------------------------------
    +EVAL_BODY_AGAIN:int
    ------------------------------------------
    +doInitBody():void
    +setBodyContent(javax.servlet.jsp.tagext.BodyContext):void
    +doAfterBody():int

19.  BodyTag的处理过E?br />{:1) setPageContext(javax.servlet.jsp.PageContext):void
    2) setParent(javax.servlet.jsp.tagext.Tag):void
    3) //setParent()
    4) doStartTag():int
    5) setBodyContent(javax.servlet.jsp.tagext.BodyContent):void
    6) doInitBody():void
    7) doAfterBody():int
    8) doEndTag():int
    9) release():void

20.  SimpleTag接口的方?br />{:javax.servlet.jsp.tagext.SimpleTag
    ------------------------------------------
    +doTag():void
    +getParent():JspTag
    +setJspBody(JspFragment jspBody):void
    +setJspContext(JspContext pc):void
    +setParent(JspTag parent):void

21.  SimpleTage接口的生命周?br />{:1) new:
       每次遇到标签Q容器构造一个SimpleTag的实例,q个构造方法没有参数。和U典的标{一PSimpleTag不能~冲Q故不能重用Q每ơ都需要构造新的实例?br />    2) setJspContext()、setParent(): 只有q个标签在另一个标{之内时Q才调用setParent()Ҏ;
    3) 讄属性:调用每个属性的setterҎ;
    4) setJspBody();
    5) doTag(): 所有标{逻辑、P代和Body计算Q都在这个方法中;
    6) return

2004-10-11     星期五    ??

 

 

 

 
      
        
               



liulang 2006-09-25 22:52 发表评论
]]>
վ֩ģ壺 Ϳ| | ͨ| | DZɽ| | ̨| Ž| | ײ| | ٳ| ̶| ̨| ɽ| Ͽ| ԭ| | | | ɽ| ̩| | ij| | ³| | | | ȳ| | Ϫ| | ɽ| ̰| | | | | ˳| ٤ʦ|