<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-13  評論-6  文章-0  trackbacks-0
      2006年2月16日
    1:
    java.sql.Timestamp a = new java.sql.Timestamp(System.currentTimeMillis());

    2:
    java.util.Date a = new java.util.Date();

    3:
    java.util.Date a;
    a.setTime(System.currentTimeMillis());
    posted @ 2006-03-24 09:41 java之海 閱讀(4997) | 評論 (0)編輯 收藏

    J2EE1.4 新特性之JSP 2.0的新特性

    作者:務實工作室 發文時間:2003.10.27

    SUN 的新版J2EE1.4提供了在J2EE中開發Web Service的基礎,對開發工具做了一些重要的增強,在應用程序部署和服務器管理方面也提供了新的標準,在集成性和安全性方面有所增強,提升了J2EE 開發Web應用程序的能力;在編程模型方面的重要變化包括JSP表達式語言、簡化的標記庫等;EJB 2.1中提供了新的timer服務,查詢語言(QL)也有所增強;Jdbc3.0 API把通常的Jdbc API與擴充API結合起來;J2EE Connectors規范和獨立于消息類型的EJB提供了對雙向通信的支持。下面給大家重點介紹J2EE1.4中包含的JSP2.0 Servlet2.4Jdbc3.0以及EJB2.1方面的新特性。


    一、JSP 2.0的新特性



    JSP 2.0
    屬于J2EE 1.4平臺,它在JSP 1.2基礎之上增加了新的功能。它保證了向下兼容,原先使用的JSP技術在JSP 2.0中都可以支持。JSP 2.0的新功能主要包括下面幾部分:

    (
    )運行環境變化

    1
    web.xml格式變化

    我們知道JSP 1.2可以在Java 2標準版1.3版本運行,而JSP 2.0要求使用Java 2標準版1.4或更新版本,JSP 2.0使用由Servlet 2.4規定的Web程序部署描述格式。

    Web程序描述文件web.xml中需要使用xml schema打頭的格式。在web.xml中主要的變化是所有有關JSP的設置信息要放在標記中。下面程序例1顯示了一個web.xml大致的樣子。

    1




    ??? .......



    ??? http://www.icconcept.com/ics/sample-taglib


    ??? /WEB-INF/jsp/sample-taglib.tld


    ??? ........


    ??? For config the ICW sample application

    JSPConfiguration
    /jsp/datareset.jsp
    true<
    el-ignored>
    ISO-8859-1
    true
    /jsp/prelude.jspf
    /jsp/coda.jspf





    2
    JSP設置

    在標記提供了Web程序中JSP程序的設置信息。包括和兩類元素。定義了Web程序使用的custom tag,它的用法和以前JSP 1.2中的用法相同。定義了一組JSP的特性。這些特性實際上對應JSPpage directive定義的特性。通過只不過可以方便地對多個具有相同屬性的JSP統一定義。

    定義一個或多個URL樣式,在中定義的屬性會適用于匹配這些URL樣式的所有JSP文件。在中的屬性可以定義以下設置:

    (1)
    允許或禁止使用表達式語言(EL)

    在中可以設定是否允許對應的JSP使用JSTL表達式語言(EL)。如果屬性標記被設定為falseJSP中的EL表達式會被處理;如果是trueWeb容器會在轉換JSP時忽略EL表達式。

    (2)
    允許或禁止使用scripting

    屬性可以允許或禁止使用JSP的腳本語言(scripting)。如果這個屬性標記對應為 true,即scripting元素被禁止,則JSP中不能使用scriptletscripting表達式和declaration,否則會有轉換錯 誤。當這個屬性標記為false時,JSP可以像在1.2版本之前那樣使用腳本語言。

    (3)
    聲明JSP編碼

    通過標記可以設置對應的JSP網頁的編碼。這個屬性對應每個JSP中的pageEncoding屬性,Web容器將根據這個屬性對JSP內容進行編碼。

    (4)
    對應隱含包括(Implicit Includes)

    在中可以在對應JSP中加入抬頭(preludes)和結尾(coda),使用和屬性可以設定在JSP網頁中包括的preludescodajspf文件。這些文件的位置相對于當前Web程序的context。當有超過一個preludescoda元素在中時,JSP會按照其順序加入到內容中。

    (
    )引入表達式語言(EL)

    JSP 2.0
    的一個主要特點是它支持表達語言(expression language)JSTL表達式語言可以使用標記格式方便地訪問JSP的隱含對象和JavaBeans組件,JSTL的核心標記提供了流程和循環控制 功能。自制標記也有自定義函數的功能,因此基本上所有seriptlet能實現的功能都可以由JSP替代。在JSP 2.0中,建議盡量使用EL而使JSP的格式更一致。

    web.xml的中可以控制一組JSP是否使用EL,在每個JSP中也可以指定是否該JSP使用EL。在page directive中的isELIgnored屬性用來指定是否忽略。格式為:


    <%@ page isELIgnored "true|false"%>



    如果設定為真,那么JSP中的表達式被當成字符串處理。比如下面這個表達式

    ${2000 % 20}

    isELIgnored"true"時輸出為${2000 % 20},而isELIgnored"false"時輸出為100Web容器默認isELIgnored"false"

    雖然JSP 2.0可以使JSP中完全使用表達語言而避免scriptlet,在實際編程中,應該根據程序的功能要求和編程人員的自身條件選擇合適的方式。使用表達語 言的JSP比較方便規整,但是由于需要將標記進行轉換,在第一次被調用時會比較慢;有些編程人員由于對Java比較了解,因而更習慣JSP 1.2之前的編程方式,因此,在使用中應因地制宜地選擇適用的編程方法。

    (
    )SimpleTag

    JSP 2.0
    中加入了新的創建自制標記的APIjavax.servlet.jsp.tagext.SimpleTag定義了用來實現簡單標記的接口。和 JSP 1.2中的已有接口不同的是,SimpleTag接口不使用doStartTag()doEndTag()方法,而提供了一個簡單的doTag()方 法。這個方法在調用該標記時只被使用一次。而需要在一個自制標記中實現的所有邏輯過程、循環和對標記體的評估等都在這個方法中實現。從這個方面來講, SimpleTagIterationTag可以達到同等的作用。但SimpleTag的方法和處理周期要簡單得多。在SimpleTag中還有用來設 置JSP內容的seUspBody()getJspBody()方法。Web容器會使用setJspBody()方法定義一個代表JSP內容的 JspFragment對象。實現SimpleTag標記的程序可以在doTag方法中根據需要多次調用getJspBody().invoke()方法 以處理JSP內容。

    例如,程序例2 SimpleTag根據指定的次數(times)進行循環并輸出當前序號(sequence)。程序的結構比較簡單,所有邏輯都在doTag方法中實現。

    2


    package ICW.taglib;
    ? import javax.servlet.jsp.JspException;
    ? import javax.servlet.jsp.tagext.SimpleTagSupport;
    ? import java.util.HashMap;
    ? import java.io.IOException;
    ? public class IterationSimpleTag extends SimpleTagSupport{
    ? private int times;
    public void setTimes(int_times){
    ??? this.times=_times;
    ??????? }
    ??? public void doTag() throws JspException,IOException{
    ??? HashMap params=new HashMap();
    ??? for(int i=0; i



    這個標記的TLD文件內容如下,它使用了XML schcma定義標記的使用方法。

    程序例3如下:





    1.0
    Jwad book simple tag
    /JwadSimpleTag
    Simple Tag Handler

    iteration
    ICW.taglib.IterationSimpleTag
    scriptless
    Iteration Tag

    Current iterationnumber
    sequence


    times
    true
    true





    程序例4中的JSP使用上面例3中定義的IterationSimpleTag,它根據Web請求參數中給定的“times”的值進行一定次數的循環。在每次循環中將輸出"sequence"的值。

    4


    <%@ taglib prefix="ictag" uri="/WEB-INF/ics-jsp2.tld" %>




    Interation Simple Tag

    ?





    Reminder:




    ??? This is the ${sequence} Of ${times} times of reminder




    (
    )使用JSP fragment

    JSP 2.0
    中的一個主要功能是JSP fragment,它的基本特點是可以使處理JSP的容器推遲評估JSP標記屬性。我們知道一般JSP是首先評估JSP標記的屬性,然后在處理JSP標記 時使用這些屬性,而JSP fragment提供了動態的屬性。也就是說,這些屬性在JSP處理其標記體時是可以被改變的。JSP需要將這樣的屬性定義為 javax.servlet.jsp.tagext.JspFragment類型。當JSP標記設置成這種形式時,這種標記屬性實際上的處理方法類似于標 記體。在實現標記的程序中,標記屬性可以被反復評估多次。這種用法稱為JSP fragmentJSP fragment還可以定義在一個SimpleTag處理程序中使用的自制標記動作。像前面例子說明的,getJspBody返回一個 JspFragment對象并可以在doTag方法中多次使用。需要注意的是,使用JSP fragmentJSP只能有一般的文本和JSP action,不能有scriptletscriptlet表達式。

    我們可以簡單地認為JSP fragment是一段可以重復使用的JSP。一段JSP fragment可以被傳遞到另一個JSP中并被使用。與JSP include概念不同的是,JSP fragment一般功能比較短小簡單而且重復使用率高。

    JSP fragment
    一般在標記體內或標記體內定義。每次當含有JSP fragment的標記被使用時,Web容器生成一個JspFragment對象,這個對象和當前JSPpage scope聯系起來。同時,這個JspFragment對象和包含它的父標記建立聯系。JspFragment對象可以有兩種調用方式:使用Java編寫 的標記處理程序,或者使用標記文件(tag file)。標記文件可以使用,或者動作使用JSP fragment JSP標記文件可以和JSP fragment共同工作。CustomTag都是以編程方式實現的。JSP標記文件是用文本文件格式(JSP語法)實現自制標記,這也是JSP 2.0的一個主要新功能。一個標記文件可以對應一個標記,可以不需tld文件定義該標記的方法。這樣,即使編程人員不熟悉Java,也可以使用JSP語法 定義自己的標記。標記文件一般使用.tag為后綴并放在Web程序的/WEB-INF目錄下。

    程序例5中的taskstatus.jsp使用了兩個JSP fragment。這個JSP的功能是顯示一組Task的名稱和完成日期,它通過定義了兩段JSPfragment(名稱為onSeheduledelayed)。在標記內的JSP就是JSPfragment,而標記被一個包圍。這個標記是一個通過標記文件定義的自制標記,它的定義文件在/WEB-INF/tags目錄下。標記文件的名稱和標記名稱一致為“listTasks.tag"。這個標記會使用到前面定義的兩個JSP fragment

    5:


    <%@ taglib prefix="ictag" tagdir="/WEB-INF/tags" %>




    JSP Fragment Sample Using Tag Files

    ?


    ?

    Tasks





    Name:${name}

    Date:${date}

    Name:${name}

    Plan: ${pianDate}
    Actural:${actDate}



    (
    )其他特性

    JSP2.0
    還有一些其他特性變化,比如嚴格修正了I18N的語法規則,改進JSP對應XML語法從而允許使用namespaces等。這些并不是核心功能,大家可以參照java.sun.com的有關資料了解功能的細節,這里就不再闡述。

    posted @ 2006-03-23 09:54 java之海 閱讀(444) | 評論 (0)編輯 收藏

    簡單的表達式語言


    Sun Microsystems 在 1997 年下半年推出了 Servlet API,將它定位為 CGI 開發人員使用的一種功能強大的工具,這些開發人員正在尋找比 CGI(通用網關接口)編程更高效和輕便的優秀解決方案。但是,開發人員很快就發現 Servlet API 有其自身的缺點,從代碼的可維護性和可擴展性方面來看,該解決方案難以實施。在某種程度上,這種缺點促使團隊開發一種允許在 HTML 中嵌入 Java 代碼的解決方案 — JavaServer Pages (JSP) 因此而出現。

    不久以后,開發人員意識到將表達與商務邏輯混合在一起的復雜 JSP 頁不易于理解和維護。不能編寫 scriplet 的頁面制作人員所面臨的另一個問題是由于標準標記集而帶來的 JSP 限制。這些限制使得難點變成利用 JSP 實施自定義標記的機制來創建 JSP 自定義標記。

    JSP 標準標記庫 (JSTL) 是自定義標記庫的集合,它將許多 JSP 應用程序通用的核心功能封裝為簡單的標記。它不再需要使用 JSP scriptlet
    和表達式,而使用表達式的更高級語法。它還實現了通用目的的功能,如迭代和條件化、數據管理格式化、XML 操作、數據庫訪問、國際化和對本地化信息敏感的格式化標記以及 SQL 標記。JSTL 1.0 推出了 EL 的概念,但只限于 JSTL 標記。在 JSP 2.0 中,您可以使用帶模板文本的 EL,甚至可以通過 javax.servlet.jsp.el 獲得編程方式的訪問。

    在我們了解 JSTL 如何適應環境以及與 JSTL 表達式語言相關的限制以后,我們來看 JSP 2.0 的重要優點之一 — JSP 表達式語言 (EL)。我們將特別涉及到以下內容:

    JSP 表達式語言定義
    在無腳本的 JSP 頁面中支持 EL 的機制
    表達式語言語法
    JSP EL 中有效的表達式
    使用 EL 表達式

    JSP 表達式語言定義

    表達式語言的靈感來自于 ECMAScript 和 XPath 表達式語言,它提供了在 JSP 中簡化表達式的方法。它是一種簡單的語言,基于可用的命名空間(PageContext 屬性)、嵌套屬性和對集合、操作符(算術型、關系型和邏輯型)的訪問符、映射到 Java 類中靜態方法的可擴展函數以及一組隱式對象。

    EL 提供了在 JSP 腳本編制元素范圍外使用運行時表達式的功能。腳本編制元素是指頁面中能夠用于在 JSP 文件中嵌入 Java 代碼的元素。它們通常用于對象操作以及執行那些影響所生成內容的計算。JSP 2.0 將 EL 表達式添加為一種腳本編制元素。

    腳本編制元素具有三個從屬形式:

  • 聲明
  • Scriptlet
  • 表達式。

    讓我們來看代碼中的這三種從屬形式:

    <%! int i = 1; %> <% -- Declaration --%>
    <% for (int i =0; i < 10; i++) { %> <% -- Scriptlets --%>
    table.getColumn( ) <% -- Expression --%>

    在將 EL 添加到 JSP 工具包以后,可以使用更簡單的語法來編寫以上的代碼,而獲得與以上 JSP 元素相同的結果。EL 表達式的另一個優勢是,可以在不允許使用上述任何腳本編制元素從屬形式的無腳本的 JSP 頁中使用它。但是必須注意,可以不使用三種腳本編制元素從屬形式中的任一種來編寫 JSP 頁,而對 JSP 頁是否應該為無腳本形式的選擇則完全基于應用程序的需求。如果您希望明確分開表達與商務邏輯,則還可以選擇將頁面強制為無腳本形式。通過強制成為無腳本頁 面,必須通過其他元素(如 JavaBean、EL 表達式、自定義操作和標準標記庫)提供 JSP 頁的動態行為。

    在無腳本的 JSP 頁中支持 EL 的機制

    有兩種機制可以確保頁面不包含任何腳本編制元素。每種機制還提供在無腳本的 JSP 頁中支持 EL 的方法。

    • 使用頁面指示:

      在使用頁面指示時,您可以通過將 isELEnabled 指示的值相應地設為“true”或“false”,指定是否支持 EL,如下所示:

      <%@ page isScriptingEnabled="true|false" isELEnabled="true|false"%>
    • 使用部署描述符的元素:

      當使用部署描述符的元素時,您可以通過在 標記間包含布爾值“true”或“false”,指定是否支持 EL,如下所示:
      ...


      *.jsp
      true
      true


      ....

    表達式語言語法

    JSP 表達式語言允許頁面制作人員使用簡單語法訪問組件,如:


    ${expr}

    在以上的語法中,expr 代表有效的表達式。必須注意,該表達式可以與靜態文本混合,還可以與其他表達式結合成更大的表達式。

    JSP EL 中的有效表達式

    有效表達式可以包含文字、操作符、變量(對象引用)和函數調用。我們將分別了解這些有效表達式中的每一種:

    文字

    JSP 表達式語言定義可在表達式中使用的以下文字:

  • 文字文字的值

    Boolean

    true 和 false

    Integer

    與 Java 類似。可以包含任何正數或負數,例如 24、-45、567

    Floating Point

    與 Java 類似。可以包含任何正的或負的浮點數,例如 -1.8E-45、4.567

    String

    任何由單引號或雙引號限定的字符串。對于單引號、雙引號和反斜杠,使用反斜杠字符作為轉義序列。必須注意,如果在字符串兩端使用雙引號,則單引號不需要轉義。

    Nullnull

    讓我們來看一些使用文字作為有效表達式的示例:

    ${false} <%-- evaluates to false --%>
    ${3*8)

    操作符

    JSP 表達式語言提供以下操作符,其中大部分是 Java 中常用的操作符:

    術語定義

    算術型

    +、-(二元)、*、/、div、%、mod、-(一元)

    邏輯型

    and、&&、or、||、!、not

    關系型

    ==、eq、!=、ne、、gt、<=、le、>=、ge。可以與其他值進行比較,或與布爾型、字符串型、整型或浮點型文字進行比較。

    空操作符是前綴操作,可用于確定值是否為空。

    條件型A ?B :C。根據 A 賦值的結果來賦值 B 或 C。

    讓我們來看一些使用操作符作為有效表達式的示例:

    ${ (6 * 5) + 5 } <%-- evaluates to 35 --%>
    ${empty name}

    隱式對象

    JSP 表達式語言定義了一組隱式對象,其中許多對象在 JSP scriplet 和表達式中可用:

    術語定義

    pageContext

    JSP 頁的上下文。它可以用于訪問 JSP 隱式對象,如請求、響應、會話、輸出、servletContext 等。例如,${pageContext.response} 為頁面的響應對象賦值。

    此外,還提供幾個隱式對象,允許對以下對象進行簡易訪問:

    術語定義

    param

    將請求參數名稱映射到單個字符串參數值(通過調用 ServletRequest.getParameter (String name) 獲得)。getParameter (String) 方法返回帶有特定名稱的參數。表達式 $(param.name) 相當于 request.getParameter (name)。

    paramValues

    將請求參數名稱映射到一個數值數組(通過調用 ServletRequest.getParameter (String name) 獲得)。它與 param 隱式對象非常類似,但它檢索一個字符串數組而不是單個值。表達式 ${paramvalues.name) 相當于 request.getParamterValues(name)。

    header

    將請求頭名稱映射到單個字符串頭值(通過調用 ServletRequest.getHeader(String name) 獲得)。表達式 ${header.name} 相當于 request.getHeader(name)。

    headerValues

    將請求頭名稱映射到一個數值數組(通過調用 ServletRequest.getHeaders(String) 獲得)。它與頭隱式對象非常類似。表達式 ${headerValues.name} 相當于 request.getHeaderValues(name)。

    cookie將 cookie 名稱映射到單個 cookie 對象。向服務器發出的客戶端請求可以獲得一個或多個 cookie。表達式 ${cookie.name.value} 返回帶有特定名稱的第一個 cookie 值。如果請求包含多個同名的 cookie,則應該使用 ${headerValues.name} 表達式。
    initParam將上下文初始化參數名稱映射到單個值(通過調用 ServletContext.getInitparameter(String name) 獲得)。

    除了上述兩種類型的隱式對象之外,還有些對象允許訪問多種范圍的變量,如 Web 上下文、會話、請求、頁面:

    術語定義

    pageScope

    將頁面范圍的變量名稱映射到其值。例如,EL 表達式可以使用 ${pageScope.objectName} 訪問一個 JSP 中頁面范圍的對象,還可以使用 ${pageScope.objectName.attributeName} 訪問對象的屬性。

    requestScope

    將請求范圍的變量名稱映射到其值。該對象允許訪問請求對象的屬性。例如,EL 表達式可以使用 ${requestScope.objectName} 訪問一個 JSP 請求范圍的對象,還可以使用 ${requestScope.objectName.attributeName} 訪問對象的屬性。

    sessionScope

    將會話范圍的變量名稱映射到其值。該對象允許訪問會話對象的屬性。例如:

    <% session.put (name", "John Doe"); %>
    $sessionScope.name} <%-- evaluates to John Doe --%>
    <%= session.get("name"); %> <%-- This is an equivalent scripting expression --%>

    applicationScope

    將應用程序范圍的變量名稱映射到其值。該隱式對象允許訪問應用程序范圍的對象。

    必須注意,當表達式根據名稱引用這些對象之一時,返回的是相應的對象而不是相應的屬性。例如:即使現有的 pageContext 屬性包含某些其他值,${pageContext} 也返回 PageContext 對象。

    使用 EL 表達式

    EL 表達式可用于兩種情況:

    • 作為標準操作和自定義操作中的屬性值

    • 在 JSP 文件的模板文本中,如 HTML 或非 JSP 元素 — 在這種情況下,模板文本中的表達式被賦值并插入到當前的輸出中。但是,必須注意,如果標記的主體被聲明為與標記相關,則不會對表達式賦值。
    posted @ 2006-03-23 09:51 java之海 閱讀(630) | 評論 (0)編輯 收藏
    <action path="/articleEdit" attribute="articleForm" input="/ArticleEdit.jsp" name="articleForm" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? type="com.xianeizhu.struts.action.ArticleEditAction">
    <forward name="articleList" path="/articleList.do" redirect="true" />
    </action>

    redirect="true"造成錯誤
    Cannot find bean blacktags in any scope
    posted @ 2006-03-21 16:06 java之海 閱讀(617) | 評論 (0)編輯 收藏
    使用MyEclipse開發web項目,所生成的web.xml頭部如下:
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    等到要在web.xml加入taglib
        <taglib>
            <taglib-uri>/WEB-INF/tiles.tld</taglib-uri>
            <taglib-location>/WEB-INF/tiles.tld</taglib-location>
        </taglib>
    始終會報錯
    后來把頭部改為
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
      "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

    <web-app>
    ......
    </web-app>
    終于可以加taglib了,但原來的filter又報錯,最后把
    filter和filter-mapping放在最前面,終于ok.

    posted @ 2006-03-14 16:02 java之海 閱讀(5007) | 評論 (6)編輯 收藏
    推薦一個java GUI設計的極品網站

    look and feel: http://www.javootoo.com/
    java開源: http://www.open-open.com/

  • 3D Look And Feel
  • Audio Look And Feel
  • Kunststoff Look&Feel
  • Metouia Look & Feel
  • NextStep Look And Feel
  • Teknolust Look And Feel
  • xp look and feel

  • posted @ 2006-03-07 09:46 java之海 閱讀(309) | 評論 (0)編輯 收藏
     

    Table of ASCII Characters

    This table lists the ASCII characters and their decimal, octal and hexadecimal numbers. Characters which appear as names in parentheses (e.g., (nl)) are non-printing characters. A table of the common non-printing characters appears after this table.

    Char  Dec  Oct  Hex | Char  Dec  Oct  Hex | Char  Dec  Oct  Hex | Char Dec  Oct   Hex
    -------------------------------------------------------------------------------------
    (nul) 0 0000 0x00 | (sp) 32 0040 0x20 | @ 64 0100 0x40 | ` 96 0140 0x60
    (soh) 1 0001 0x01 | ! 33 0041 0x21 | A 65 0101 0x41 | a 97 0141 0x61
    (stx) 2 0002 0x02 | " 34 0042 0x22 | B 66 0102 0x42 | b 98 0142 0x62
    (etx) 3 0003 0x03 | # 35 0043 0x23 | C 67 0103 0x43 | c 99 0143 0x63
    (eot) 4 0004 0x04 | $ 36 0044 0x24 | D 68 0104 0x44 | d 100 0144 0x64
    (enq) 5 0005 0x05 | % 37 0045 0x25 | E 69 0105 0x45 | e 101 0145 0x65
    (ack) 6 0006 0x06 | & 38 0046 0x26 | F 70 0106 0x46 | f 102 0146 0x66
    (bel) 7 0007 0x07 | ' 39 0047 0x27 | G 71 0107 0x47 | g 103 0147 0x67
    (bs) 8 0010 0x08 | ( 40 0050 0x28 | H 72 0110 0x48 | h 104 0150 0x68
    (ht) 9 0011 0x09 | ) 41 0051 0x29 | I 73 0111 0x49 | i 105 0151 0x69
    (nl) 10 0012 0x0a | * 42 0052 0x2a | J 74 0112 0x4a | j 106 0152 0x6a
    (vt) 11 0013 0x0b | + 43 0053 0x2b | K 75 0113 0x4b | k 107 0153 0x6b
    (np) 12 0014 0x0c | , 44 0054 0x2c | L 76 0114 0x4c | l 108 0154 0x6c
    (cr) 13 0015 0x0d | - 45 0055 0x2d | M 77 0115 0x4d | m 109 0155 0x6d
    (so) 14 0016 0x0e | . 46 0056 0x2e | N 78 0116 0x4e | n 110 0156 0x6e
    (si) 15 0017 0x0f | / 47 0057 0x2f | O 79 0117 0x4f | o 111 0157 0x6f
    (dle) 16 0020 0x10 | 0 48 0060 0x30 | P 80 0120 0x50 | p 112 0160 0x70
    (dc1) 17 0021 0x11 | 1 49 0061 0x31 | Q 81 0121 0x51 | q 113 0161 0x71
    (dc2) 18 0022 0x12 | 2 50 0062 0x32 | R 82 0122 0x52 | r 114 0162 0x72
    (dc3) 19 0023 0x13 | 3 51 0063 0x33 | S 83 0123 0x53 | s 115 0163 0x73
    (dc4) 20 0024 0x14 | 4 52 0064 0x34 | T 84 0124 0x54 | t 116 0164 0x74
    (nak) 21 0025 0x15 | 5 53 0065 0x35 | U 85 0125 0x55 | u 117 0165 0x75
    (syn) 22 0026 0x16 | 6 54 0066 0x36 | V 86 0126 0x56 | v 118 0166 0x76
    (etb) 23 0027 0x17 | 7 55 0067 0x37 | W 87 0127 0x57 | w 119 0167 0x77
    (can) 24 0030 0x18 | 8 56 0070 0x38 | X 88 0130 0x58 | x 120 0170 0x78
    (em) 25 0031 0x19 | 9 57 0071 0x39 | Y 89 0131 0x59 | y 121 0171 0x79
    (sub) 26 0032 0x1a | : 58 0072 0x3a | Z 90 0132 0x5a | z 122 0172 0x7a
    (esc) 27 0033 0x1b | ; 59 0073 0x3b | [ 91 0133 0x5b | { 123 0173 0x7b
    (fs) 28 0034 0x1c | < 60 0074 0x3c | \ 92 0134 0x5c | | 124 0174 0x7c
    (gs) 29 0035 0x1d | = 61 0075 0x3d | ] 93 0135 0x5d | } 125 0175 0x7d
    (rs) 30 0036 0x1e | > 62 0076 0x3e | ^ 94 0136 0x5e | ~ 126 0176 0x7e
    (us) 31 0037 0x1f | ? 63 0077 0x3f | _ 95 0137 0x5f | (del) 127 0177 0x7f
    ASCII Name Description C Escape Sequence
    nul null byte \0
    bel bell character \a
    bs backspace \b
    ht horizontal tab \t
    np formfeed \f
    nl newline \n
    cr carriage return \r
    vt vertical tab
    esc escape
    sp space
    posted @ 2006-03-07 09:45 java之海 閱讀(351) | 評論 (0)編輯 收藏
    mysql error number 1005 can't create table errno: 150

    這是建外鍵的列與要關聯的列類型不匹配造成的。
    一個表用powerdesigner導入的整型長度為11
    另一個直接再mysql中建立的表默認整型長度是10

    造成不能建立外鍵
    posted @ 2006-03-03 17:09 java之海 閱讀(1287) | 評論 (0)編輯 收藏

    Tomcat服務器配置參考

    Host容器

    概述

    Host元素代表一個虛擬主機,虛擬主機將服務器的網絡名(比如www.mycompany.com)和運行Catalinade的某個特定服務器聯系起來。為了生效,網絡名稱必須在管理你所在的Internet域的DNS服務器進行登記---請聯系你的網絡管理員。

    在許多情況下,系統管理員可能希望為同一個虛擬主機或應用關聯多個網絡名稱(比如www.mycompany.com和company.com)。這可以利用下面討論的Host Name Alias特征來完成。

    在Engine元素中可以嵌套一個或多個Host元素。在Host元素中可以嵌套context元素。在與每個Engine相關聯的所有Host中,必須有一個Host的名稱與Engine的defaultHost屬性匹配。

    以下的描述使用變量$CATALINA_HOME來指Tomcat 5安裝的目錄。大多數的相對路徑都是以該目錄為基準。但是,通過設置CATALINA_BASE目錄,可以運行多個Tomcat 5實例,這時你應該使用$CATALINA_BASE來作為目錄基準,而不是使用$CATALINA_HOME。

    屬性
    公共屬性

    所有Host的實現必須支持如下屬性:

    屬性 描述
    appBase

    虛擬主機的Applicaton Base目錄。這是在該虛擬主機上發布web應用的目錄路徑。你可以指定絕對路徑,或者使用相對于$CATALINA_HOME的路徑。有關web應用的自動識別和發布的更多信息,請參考應用自動發布。

    autoDeploy

    這個標志表示,在Tomcat運行的時候,放到appBase目錄下的新的web應用是否自動發布。缺省為true。這方面的更多信息參考應用自動發布

    backgroundProcessorDelay

    這個值代表在該host及其子容器(包括所有的wrappers)上調用backgroundProcess方法的延時,以秒為單位。如果延時值非負,子容器不會被調用,這意味著子容器使用自己的處理線程。如果該值為正,會創建一個新的線程。在等待指定的時間以后,該線程在Host及其子容器上調用backgroundProcess方法。Host使用后臺處理進行與web應用實時發布有關的操作。如果沒有指定,缺省值是-1,說明host依賴其所屬的Engine的后臺處理。

    className

    實現的Java類名。該類必須實現org.apache.catalina.Host接口。如果沒有指定,使用標準實現(在下面定義)

    deployOnStartup

    這個標志表明這個host的web應用是否由host configurator 自動發布。缺省為true。這方面的更多信息參考自動應用發布。

    name

    虛擬主機的網絡名稱,也就是在DNS服務器上注冊的名稱。嵌套在Engine的所有Host中,必須有一個Host的名字與Engine的defaultHost屬性相同。如果想為同一個虛擬主機指定多個網絡名稱,參考主機名別名。

     

    標準實現

    Host的標準實現是org.apache.catalina.core.StandardHost。它還支持如下的附加屬性

    屬性 描述
    debug

    與Engine相關聯的Logger的調試信息的詳細程度。數字越大,輸出越詳細。如果沒有指定,缺省值為0。

    deployXML

    如果不想使用Context XML配置文件來發布web應用,設為false。同時也失去了利用manager應用程序安裝web應用或者“.war”文件的能力(這些web應用或.war文件不在Host的配置基準目錄$CATALINA_HOME/conf/[engine_name]/[host_name]下面)

    web應用使用catalina的安全許可發布,如果需要讓不可信的用戶管理web應用,這個值可以設為false。缺省為true。

    errorReportValveClass

    Host使用的錯誤報告valve的Java類名。這個valve的責任是輸出錯誤報告。設置這個值可以定制Tomcat產生的錯誤頁面的格式。這個類必須實現org.apache.catalina.Valve接口。如果沒有指定,使用缺省值

    og.apache.catalina.valvees.ErrorReportValve.

    unpackWARs

    如果希望將位于appBase目錄下的WAR文件解壓縮成對應的目錄結構,設為true。如果希望直接從WAR文件運行web應用,設為false。更多信息參考應用自動發布。

    workDir

    Host的web應用使用的臨時目錄的路徑。每個應用都有自己的子目錄,用于臨時的讀寫。如果在Context中設置了workDir屬性,它將會覆蓋Host的workDir屬性。如Servlet Specification中所述,通過servlet context的屬性javax.servlet.context.tempdir,這個目錄可以被servlet使用。如果沒有指定,使用$CATALINA_HOME/work下面的合適的目錄。

    嵌套組件

    可以在Host元素中嵌套一個或者多個Context元素,每個Context元素代表這個虛擬主機下的一個不同的web應用。同時,你可以嵌套一個DefaultContext元素,用來定義后續發布的web應用的缺省值

    可以在Host元素中選擇嵌套一個DefaultContext元素,用來定義自動發布的web應用的缺省特性。

    下列元素可以嵌套在Host元素中,但至多只能嵌套一個實例:

    • Logger - 配置一個logger,用來接收和處理Host的所有日志消息,以及這個Host的所有Context的日志消息(除非被低一級的Logger配置覆蓋)
    • Realm -配置一個realm,Realm的用戶數據庫以及用戶角色被這個Host的所有Context共享(除非被低一級的Realm配置覆蓋)
    專有特征
    訪問日志

    正常情況下,運行web服務器會生成訪問日志。訪問日志以標準格式為每個請求輸出一行信息。Catalina包含一個可選的Valve實現,可以用標準格式生成日志,還可以使用任意定制的格式。

    通過在Engine,Host或者Context中嵌套一個Valve元素,Catalina會為該容器處理的所有請求創建訪問日志,如下所示:

    <Host name="localhost" ...>
      ...
      <Valve className="org.apache.catalina.valves.AccessLogValve"
             prefix="localhost_access_log." suffix=".txt"
             pattern="common"/>
      ...
    </Host>
    
    參考Access Log Valve,以獲得更多配置屬性的信息;
    應用自動發布

    如果使用標準的Host實現,當Catalina第一次啟動時,如果deployOnStartup屬性為true,tomcat會自動采取如下的步驟:

    • 假定$CATALINA_HOME/conf/[engine_name]/[host_name]目錄中的任何XML文件都包含一個Context元素(以及它的相關的子元素),通常情況下,這個<Context>的docBase屬性指向一個web應用目錄的絕對路徑,或者是WAR文件的絕對路徑。
    • 如果WAR文件對應的目錄不存在,則這個WAR文件會被自動展開,除非unpackWARs屬性設為false。在重新發布更新后的WAR文件時,重新啟動Tomcat之前一定要刪除展開后的目錄,這樣更新后的WAR文件才會被重新展開(如果使能了auto deployer,它會自動完成這項工作)
    • application base目錄下的任何子目錄,如果包含/WEB-INF/web.xml文件,Tomcat認為這個一個展開后的web應用,會為這個目錄自動產生一個Context元素,即使這個目錄沒有在conf/server.xml文件中出現。產生的Context會使用DefaultContext中的屬性來配置。自動產生的Context的context路徑是“/”后面跟上目錄名,除非目錄名是ROOT,這種情況下context路徑是空字符串(“”);

    除了啟動時候的自動發布以外,在Tomcat運行的時候,當新的XML 配置文件,WAR文件或者子目錄(包含新的web應用)放到appBase目錄下,或者當XML配置文件放到$CATALINA_HOME/conf/[engine_name]/[host_name]目錄)的時候,該web應用被自動發布。auto deployer也負責跟蹤web應用的如下變化:

    • 如果更新了WEB-INF/web.xml文件,會觸發web應用的重載;
    • 如果WAR文件被更新,并且WAR文件已經展開,首先刪除展開的web應用,然后發布更新的WAR文件;
    • 如果XML配置文件被更新,首先刪除該應用(但是不刪除任何展開以后的目錄),然后發布相關的web應用
    主機名別名

    在許多服務器環境中,多個網絡名稱可能指向同一個IP地址(比如,www.mycompany.com和company.com都指向192.168.1.1)。正常情況下,每個網絡名稱應該在conf/server.xml中對應一個Host元素,每個Host元素有自己的一套web應用。

    但是,有些情況下,可能希望兩個或者更多網絡名稱解析到同一個虛擬主機上,運行相同的一套web應用。這種情況的典型用途是公司網站。用戶可以使用www.mycompany.com和company.com訪問同樣的內容和應用。

    通過在Host元素中嵌套一個或者多個Alias元素,可以完成上述功能。

     

    <Host name="www.mycompany.com" ...>
      ...
      <Alias>mycompany.com</Alias>
      ...
    </Host>
    

    為了使這個策略生效,所有的網絡名稱必須在DNS服務器登記,指向運行Catalina實例的同一臺計算機。

     

    生命期Listeners

    如果一個Java對象需要知道Context什么時候啟動,什么時候停止,可以在這個對象中嵌套一個Listener元素。該Listener元素必須實現了org.apache.catalina.LifecycleListener接口,在發生對應的生命期事件的時候,通知該Listener。可以按照如下的格式配置這樣的Listener:

    <Host name="localhost" ...>
      ...
      <Listener className="com.mycompany.mypackage.MyListener" ... >
      ...
    </Host>
    
    注意,一個listener可以具有任意多的附加屬性。屬性名與JavaBean的屬性名相對應,使用標準的屬性命名方法。
    請求過濾器
    對每個發送到Engine,Host或者Context的請求,可以要求Catalina檢查IP地址或主機名稱。Catalina使用一系列配置好的“接受”或者“拒絕”過濾器對客戶端的地址或者主機名進行檢查,過濾器是按照正則表達式語法定義的,由Jakarta Regexp正則表達式庫支持。不被接受的請求會返回一個HTTP“Forbidden”錯誤。下面是過濾器的定義。
    <Host name="localhost" ...>
      ...
      <Valve className="org.apache.catalina.valves.RemoteHostValve"
             allow="*.mycompany.com,www.yourcompany.com"/>
      <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             deny="192.168.1.*"/>
      ...
    </Host>
    

     

    如果想知道過濾器支持的更多選項的信息,參考Remote Address Filter和Remote Host Filter

    單次登錄(Single Sign On

    在許多環境尤其是門戶環境下,對特定虛擬主機上的一套web應用,只希望對用戶進行一次認證。這可以在Host元素中嵌套如下的元素完成:

    <Host name="localhost" ...>
      ...
      <Valve className="org.apache.catalina.authenticator.SingleSignOn"
             debug="0"/>
      ...
    </Host>
    

    單次登錄根據如下規則運作:

    • 這個虛擬主機的所有web應用必須共享同一個Realm。在實際情況中,這意味著你可以在這個Host元素中嵌套Realm元素(或者是Engine元素),但不能在web應用對應的Context中嵌套Realm元素
    • 如果用戶只訪問這個虛擬主機上任意web應用的沒有加保護的資源,他們不會被要求認證;
    • 一旦用戶訪問這個虛擬主機下的任意web應用的保護資源,用戶會被要求認證。使用正在訪問的web應用的login方法;
    • 一旦認證通過,與這個用戶相關聯的角色決定了它對所有的web應用的訪問控制權限;而不需要對每個應用單獨認證;
    • 一旦用戶從某個web應用注銷(比如,如果使用了基于表單的login,對應的session過期或者無效),用戶在所有web應用的session都會失效;任何后續的對保護資源的訪問會要求對用戶重新認證;
    • 單次登錄特征使用HTTP cookies傳輸令牌,將每個請求和用戶身份聯系起來,因此客戶端必須支持cookies;
    用戶Web應用

    許多web服務器會自動將以"~"和用戶名開始的URI映射到用戶主目錄下的某個目錄(通常為public_html)。在Catalina中,通過使用特殊的Listener元素,可以完成上述功能

    在利用/etc/password來標識有效用戶的Unix系統下使用如下配置:

    <Host name="localhost" ...>
      ...
      <Listener className="org.apache.catalina.startup.UserConfig"
                directoryName="public_html"
                userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
      ...
    </Host>
    

    在不使用/etc/password的服務器上,可以要求Catalina將指定的基準目錄下的所有目錄(比如c:\homes)看成是用戶主目錄:

    <Host name="localhost" ...>
      ...
      <Listener className="org.apache.catalina.startup.UserConfig"
                directoryName="public_html"
                homeBase=c:\Homes"
                userClass="org.apache.catalina.startup.HomesUserDatabase"/>
      ...
    </Host>
    

    如果某個名為craigmcc的用戶的主目錄已經設置好,通過使用如下URL,可以瀏覽它的內容:

    http://www.mycompany.com:8080/~craigmcc
    

     

    使用這個特征需要注意如下幾個問題:

    • 每個用戶web應用會使用該Host的DefaultContext元素定義的特征發布;
    • 包含多個Listener元素的實例也是有效的。但是,這只在你希望配置多個homeBase目錄情況下才有意義;
    • 執行Catalina的用戶名對每個用戶的web應用目錄以及它的所有內容必須有讀的權限;
    posted @ 2006-02-16 17:05 java之海 閱讀(3046) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 亚洲处破女AV日韩精品| 精品亚洲综合在线第一区 | 亚洲一区视频在线播放| 美女视频黄a视频全免费网站色| 午夜色a大片在线观看免费| 亚洲五月丁香综合视频| 免费看美女被靠到爽| 亚洲日本VA午夜在线电影| 免费理论片51人人看电影| 国产天堂亚洲精品| 亚洲综合色在线观看亚洲| 中文字幕不卡免费视频| 亚洲国产精品久久久久久| 亚洲一区二区三区免费在线观看| 久久亚洲熟女cc98cm| 成人无码区免费A片视频WWW| 亚洲日韩国产AV无码无码精品| 最好免费观看韩国+日本| 国产精品成人亚洲| 久久国产成人精品国产成人亚洲| 99久久免费国产精精品| 亚洲自偷自偷精品| 天天干在线免费视频| 污网站免费在线观看| 亚洲av日韩av无码| 免费高清资源黄网站在线观看| 一级做a爱过程免费视| 久久精品国产精品亚洲艾草网| 国产a视频精品免费观看| 国产亚洲人成在线播放| 亚洲国产日韩在线视频| 四虎免费影院ww4164h| 在线观看亚洲免费视频| 久久亚洲精品视频| 免费看美女被靠到爽的视频| 久久WWW免费人成—看片| 亚洲伊人久久大香线蕉在观 | 成人无码区免费A∨直播| 亚洲国产成人精品电影| 亚洲国产精品碰碰| 91制片厂制作传媒免费版樱花|