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

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

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

    posts - 44,  comments - 48,  trackbacks - 0
      2006年8月24日
    1.下載所需軟件
        1.1SVN服務端(svn-1.4.3-setup.exe)
            http://subversion.tigris.org/project_packages.html
        1.2把SVN設置成window服務(SVNService.exe)
            我沒有下載地址,如有需要,留下你的email
        1.3Eclipse的SVN插件(用Eclipse插件下載):

    2.配置服務端
        2.1安裝svn-1.4.3-setup.exe
        2.2開始->運行->cmd->進入SVN服務端的安裝目錄下面的bin目錄
        2.3cmd下運行svnadmin create SVN庫的位置(如:D:\SVN_PRJ)
        2.4復制SVNService.exe到SVN服務端安裝目錄下的bin目錄
        2.5cmd下運行SVNService -install -d -r D:\SVN_PRJ(SVN庫的位置)
        2.6如果想撤消掉后臺服務,則運行SVNService -remove
        2.7進入D:\SVN_PRJ\conf目錄下編輯svnserve.conf,內容如下(切記下面幾行字前不能有空格):
            [general]
            anon-access = read    #匿名訪問權限,取值為read,write,none
            auth-access = write   #認證用戶的權限
            password-db = passwd #認證用戶數據庫,即允許連到SVN的用戶(當前目錄下的passwd文件中存放的用戶及密碼)
            realm = TESTING       #在用戶認證界面上出現的提示語句
        2.8編輯D:\SVN_PRJ\conf\passwd文件,內容如下
            [users]
            test = password       #這時你連接SVN的時候可以使用用戶名為test密碼為password來連接SVN
        2.9開始->設置->控制面板->管理工具->服務->啟動SVNService服務

    3.Eclipse下配置SVN插件
        3.1幫助->軟件更新->查找并安裝->搜索要安裝的新功能部件->新建遠程站點->輸入一個任意的名稱->URL輸入

    http://subclipse.tigris.org/update_1.2.x->確定->選中你剛才添加的遠程站點->完成->選中Subclipse->執行安裝操作
        3.2窗口->打開透視圖->SVN資源庫研究->右鍵->新建->資源庫位置->URL中輸入svn://127.0.0.1/->輸入2.7定義的用戶名test和密碼

    password

    4.提交工程
        4.1右擊工程->小組->共享項目->選擇SVN->選擇svn://127.0.0.1(如果沒有,則創建一個新的資源庫)->下一步->完成

    5.下載工程
        5.1在SVN資源庫透視圖下,點開svn://127.0.0.1,會顯示出現在本機SVN上的所有工程,右擊你想下載的工程->檢出為->下一步->完成

    6.基本操作
        6.1同步
            在MyEclipse J2EE透視圖下,右擊你要同步的工程->小組->與資源庫同步->這時會進入同步透視圖,會顯示出本機與SVN上內容有不同的文件,雙擊文件名,會顯示出兩個文件中哪里不同;
        6.2提交
            在同步透視圖下有"灰色向右的箭頭,表示你本機修改過",右擊該文件,可以選擇提交操作;
        6.3覆蓋/更新
            在同步透視圖下有"藍色向左的箭頭,表示你本機修改過",右擊該文件,可以選擇覆蓋/更新操作;

    7.圖標說明
        7.1灰色向右箭頭:本地修改過
        7.2藍色向左箭頭:SVN上修改過
        7.3灰色向右且中間有個加號的箭頭:本地比SVN上多出的文件
        7.4藍色向左且中間有個加號的箭頭:SVN上比本地多出的文件
        7.5灰色向右且中間有個減號的箭頭:本地刪除了,而SVN上未刪除的文件
        7.6藍色向左且中間有個減號的箭頭:SVN上刪除了,而本地未刪除的文件
        7.7紅色雙向箭頭:SVN上修改過,本地也修改過的文件

    8.一些我遇到的出錯信息
        8.1在上面講的3.2步輸入URL(svn://127.0.0.1)點下一步出現"svnserve.conf:12: Option expected"錯誤
            你打開svnserve.conf文件中的第12行,該錯誤是由于該行的前面有空格引起的,把左邊多出的空格刪除掉即可;
        8.2在上面講的3.2步輸入URL(svn://127.0.0.1/SVN_PRJ)點下一步出現"svn://127.0.0.1/SVN_PRJ non-existent in revision '7'"錯誤
            URL錯了,應該輸入svn://127.0.0.1即可
    9.SVN服務端自帶的基于命令行的操作語句
        9.1設置SVN服務端安裝目錄下的/bin到環境變量中;
        9.2在命令行下運行svn import c:/test svn://127.0.0.1/test -m "initial import" --username test --password passwd可進行上傳操作
        9.3進入你要檢出的目錄,在命令行下運行svn checkout svn://127.0.0.1/test --username test -password passwd 可進行檢出工程的操作
        9.4在命令行下運行svn commit test.txt -m "modified" --username test -password passwd 可進行提交操作
        9.5在命令行下運行svn update -r HEAD test.txt --username test -password passwd 可進行更新操作

    注:上面講的127.0.0.1可以換成外網IP,或者局域網IP皆可(即,在家里創建一個SVN服務端,即可在公司去訪問家里的SVN)
    posted @ 2008-01-05 23:40 摩西 閱讀(38591) | 評論 (6)編輯 收藏

    import java.io.UnsupportedEncodingException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class TempClass {

     /**
      * @param args
      * @throws UnsupportedEncodingException
      * @throws ClassNotFoundException
      * @throws SQLException
      */
     public static void main(String[] args) throws UnsupportedEncodingException {
      String url = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=tran";
      try {
       Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
       Connection conn = DriverManager.getConnection(url, "sa", "sa");
       Statement st = conn.createStatement();
       ResultSet rs = st.executeQuery("select vcword from cn_other");

       // mysql
       String url_mysql = "jdbc:mysql://127.0.0.1:3306/zwspace";
       Class.forName("org.gjt.mm.mysql.Driver");
       Connection conn_mysql = DriverManager.getConnection(url_mysql,
         "root", "root");
       PreparedStatement st_mysql = conn_mysql
         .prepareStatement("insert into chds_cihui(name) values(?)");

       if (rs.next()) {

        String rsname = rs.getString("vcword");
        // String name = new String(rsname.getBytes("GB2312"),
        // "GB2312");
        // String name = new String(rsname.getBytes("UTF-8"), "GB2312");
        // String name = new String(rsname.getBytes("utf8"), "GB2312");
        // String name = new String(rsname.getBytes("iso-8859-1"),
        // "GB2312");
        // String name = new String(rsname.getBytes("GBK"), "GB2312");

        // String name = new String(rsname.getBytes("GBK"), "GBK");
        // String name = new String(rsname.getBytes("GB2312"), "GBK");
        // String name = new String(rsname.getBytes("UTF-8"), "GBK");
        // String name = new String(rsname.getBytes("iso-8859-1"),
        // "GBK");

        // String name = new String(rsname.getBytes("GBK"), "UTF-8");
        // String name = new String(rsname.getBytes("GB2312"), "UTF-8");
        // String name = new String(rsname.getBytes("UTF-8"), "UTF-8");
        // String name = new String(rsname.getBytes("iso-8859-1"),
        // "UTF-8");

        // String name = new String(rsname.getBytes("GBK"),
        // "iso-8859-1");
        // String name = new String(rsname.getBytes("GB2312"),
        // "iso-8859-1");
        // String name = new String(rsname.getBytes("UTF-8"),
        // "iso-8859-1");
        // String name = new String(rsname.getBytes("iso-8859-1"),
        // "iso-8859-1");

        // String name = new String(rsname.getBytes(), "GBK");
        // String name = new String(rsname.getBytes(), "GB2312");
        // String name = new String(rsname.getBytes(), "UTF-8");
        // String name = new String(rsname.getBytes(), "iso-8859-1");
        String name = rsname;

        System.out.println(rsname);

        st_mysql.setString(1, name);
        st_mysql.executeUpdate();
       }
       rs.close();
       st.close();
       conn.close();

       st_mysql.close();
       conn_mysql.close();

      } catch (ClassNotFoundException e) {
       e.printStackTrace();
      } catch (SQLException e) {
       e.printStackTrace();
      }
     }

    }



    試過以上的所有編碼都無法解決數據在MYSQL中的亂碼問題,看來是jdbc連mysql時的編碼不對,于是
    將   String url_mysql="jdbc:mysql://127.0.0.1:3306/zwspace";后加上編碼
       String url_mysql="jdbc:mysql://127.0.0.1:3306/zwspace?useUnicode=true&characterEncoding=utf8";終于OK了

    posted @ 2007-11-20 15:21 摩西 閱讀(862) | 評論 (0)編輯 收藏
    在使用hibernate項目中,持久化類的ID用Long與long有很大區別!!
    用long 作為id,當一個新的臨時類要持久化時會報一個這種錯:
    Exception executing batch: org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
    因為這個臨時類,已經有一個id=0 (long的默認值);這時hibernate 為錯認為這是一條持久化類,從而進行更新操作,故報錯!!
    這時把持久類的id 類型改成Long 就OK了,再create 時,臨時類的id為null ,hibernate 才會正確的判斷這是臨時類而進行save操作!!
    posted @ 2007-09-28 11:42 摩西 閱讀(2445) | 評論 (1)編輯 收藏
                    user.getUserinfo().setSex(new String(pu.getSex().getBytes("ISO8859_1"),"GB2312"));
                    user.setNickname(new String(pu.getName().getBytes("ISO8859_1"),"GB2312"));
                    userService.createUser(user);
     

                String(byte[] bytes, int offset, int length, String charsetName) 
                 通過使用指定的字符集解碼指定的 byte 子數組,構造一個新的 String。 
                
     byte[] getBytes(String charsetName)
              使用指定的字符集將此 String 編碼為 byte 序列,并將結果存儲到一個新的 byte 數組中



    #800080      

    #7B7D62

    #56B6E9

    #4B8D32

    posted @ 2007-08-29 13:45 摩西 閱讀(420) | 評論 (0)編輯 收藏
    <script language="JavaScript">
    function doZoom(size){

     document.getElementById("zwsky_content").style.fontSize=size+'px'
    }
     function ReImgSize(){
       for (j=0;j<document.images.length;j++)
       {
         if (document.images[j].src.indexOf("www.***.com/back") >0)
         document.images[j].src=document.images[j].src.replace("www.***.com/back","back.****.com/back");
       }
     }
    </script>

    ............................


    <body  bottommargin="0" leftmargin="0" rightmargin="0" topmargin="0" onload="ReImgSize()">
    posted @ 2007-08-23 17:47 摩西 閱讀(350) | 評論 (0)編輯 收藏
    <input type="button" name="Submit3" value="搜 索"  onClick="location.href='SearchResult.jsp?cluster_node_id=&key_word=' + document.CMS4JSearchForm.KEY_WORD.value + '&db_id=' + document.CMS4JSearchForm.DB_ID.value;">
    posted @ 2007-08-21 10:51 摩西 閱讀(1889) | 評論 (0)編輯 收藏
    這個錯誤我一共遇到過兩次,一直沒有找到很好的解決方案,這個錯誤產生原因相信大家都知道,因為在hibernate中同一個session里面有了兩個相同標識但是是不同實體.
    一開始按網上說的用session.merge(Object)報了一個錯,可能是沒有用好,改用 session.clear(); session.update(user);這樣就OK了,
    方法為:

    package org.springframework.orm.hibernate3.support;
    ...
        public void modifyByMerge(User user) {
            Session session = getHibernateTemplate().getSessionFactory().
                              getCurrentSession();
            session.clear();
            session.update(user);
        }
    ...
    項目用的是spring + hibernate所以得用
    getHibernateTemplate().getSessionFactory().getCurrentSession();得當前Session


    posted @ 2007-08-20 11:29 摩西 閱讀(29506) | 評論 (9)編輯 收藏

         上一次在做交友模板時,出來了這種問題,后來才發現是hibernate的一個映射文件配錯了,今天在做DC攝影時,
    映射文件加了一個lazy="false" fetch="join"  結果,也出現了數據重復取。
    <many-to-one name="user" column="user_id"  class="com.zwspace.domain.User" lazy="false" fetch="join" />
    這樣也會有錯嗎!想不通,只能把它給刪了。


    posted @ 2007-08-14 16:53 摩西 閱讀(699) | 評論 (0)編輯 收藏

    js驗證表單大全
    1. 長度限制
    <script>
    function test()
    {
    if(document.a.b.value.length>50)
    {
    alert("不能超過50個字符!");
    document.a.b.focus();
    return false;
    }
    }
    </script>
    <form name=a onsubmit="return test()">
    <textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea>
    <input type="submit" name="Submit" value="check">
    </form>

    2. 只能是漢字
    <input onkeyup="value="/oblog/value.replace(/[^\u4E00-\u9FA5]/g,'')">

    3." 只能是英文
    <script language=javascript>
    function onlyEng()
    {
    if(!(event.keyCode>=65&&event.keyCode<=90))
    event.returnvalue=false;
    }
    </script>

    <input onkeydown="onlyEng();">

    4. 只能是數字
    <script language=javascript>
    function onlyNum()
    {
    if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
    //考慮小鍵盤上的數字鍵
    event.returnvalue=false;
    }
    </script>

    <input onkeydown="onlyNum();">

    5. 只能是英文字符和數字
    <input onkeyup="value="/oblog/value.replace(/[\W]/g,"'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">

    6. 驗證油箱格式
    <SCRIPT LANGUAGE=javascript RUNAT=Server>
    function isEmail(strEmail) {
    if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
    return true;
    else
    alert("oh");
    }
    </SCRIPT>
    <input type=text onblur=isEmail(this.value)>

    7. 屏蔽關鍵字(這里屏蔽***和****)
    <script language="javascript1.2">
    function test() {
    if((a.b.value.indexOf ("***") == 0)||(a.b.value.indexOf ("****") == 0)){
    alert(":)");
    a.b.focus();
    return false;}
    }
    </script>
    <form name=a onsubmit="return test()">
    <input type=text name=b>
    <input type="submit" name="Submit" value="check">
    </form>

    8. 兩次輸入密碼是否相同
    <FORM METHOD=POST ACTION="">
    <input type="password" id="input1">
    <input type="password" id="input2">
    <input type="button" value="test" onclick="check()">
    </FORM>
    <script>
    function check()
    {
    with(document.all){
    if(input1.value!=input2.value)
    {
    alert("false")
    input1.value = "";
    input2.value = "";
    }
    else document.forms[0].submit();
    }
    }
    </script>
    夠了吧 :)
    屏蔽右鍵 很酷
    oncontextmenu="return false" ondragstart="return false" onselectstart="return false"
    加在body中


    2.1  表單項不能為空

    <script  language="javascript">
    <!--
    function  CheckForm()

    if  (document.form.name.value.length  ==  0)  { 
    alert("請輸入您姓名!");
    document.form.name.focus();
    return  false;
    }
    return  true;
    }
    -->
    </script>

    2.2  比較兩個表單項的值是否相同

    <script  language="javascript">
    <!--
    function  CheckForm()
    if  (document.form.PWD.value  !=  document.form.PWD_Again.value)  { 
    alert("您兩次輸入的密碼不一樣!請重新輸入.");
    document.ADDUser.PWD.focus();
    return  false;
    }
    return  true;
    }
    -->
    </script>

    2.3  表單項只能為數字和"_",用于電話/銀行帳號驗證上,可擴展到域名注冊等

    <script  language="javascript">
    <!--
    function  isNumber(String)

    var  Letters  =  "1234567890-";  //可以自己增加可輸入值
    var  i;
    var  c;
    if(String.charAt(  0  )=='-')
    return  false;
    if(  String.charAt(  String.length  -  1  )  ==  '-'  )
    return  false;
    for(  i  =  0;  i  <  String.length;  i  ++  )

    c  =  String.charAt(  i  );
    if  (Letters.indexOf(  c  )  <  0)
    return  false;
    }
    return  true;
    }
    function  CheckForm()

    if(!  isNumber(document.form.TEL.value))  { 
    alert("您的電話號碼不合法!");
    document.form.TEL.focus();
    return  false;
    }
    return  true;
    }
    -->
    </script>


    2.4  表單項輸入數值/長度限定

    <script  language="javascript">
    <!--
    function  CheckForm() 

    if  (document.form.count.value  >  100  ||  document.form.count.value  <  1)

    alert("輸入數值不能小于零大于100!");
    document.form.count.focus();
    return  false;
    }
    if  (document.form.MESSAGE.value.length<10)

    alert("輸入文字小于10!");
    document.form.MESSAGE.focus();
    return  false;
    }
    return  true;
    }
    //-->
    </script>

    2.5  中文/英文/數字/郵件地址合法性判斷

    <SCRIPT  LANGUAGE="javascript">
    <!--

    function  isEnglish(name)  //英文值檢測

    if(name.length  ==  0)
    return  false;
    for(i  =  0;  i  <  name.length;  i++)  { 
    if(name.charCodeAt(i)  >  128)
    return  false;
    }
    return  true;
    }

    function  isChinese(name)  //中文值檢測

    if(name.length  ==  0)
    return  false;
    for(i  =  0;  i  <  name.length;  i++)  { 
    if(name.charCodeAt(i)  >  128)
    return  true;
    }
    return  false;
    }

    function  isMail(name)  //  E-mail值檢測

    if(!  isEnglish(name))
    return  false;
    i  =  name.indexOf("  at  ");
    j  =  name  dot  lastIndexOf("  at  ");
    if(i  ==  -1)
    return  false;
    if(i  !=  j)
    return  false;
    if(i  ==  name  dot  length)
    return  false;
    return  true;
    }

    function  isNumber(name)  //數值檢測

    if(name.length  ==  0)
    return  false;
    for(i  =  0;  i  <  name.length;  i++)  { 
    if(name.charAt(i)  <  "0"  ||  name.charAt(i)  >  "9")
    return  false;
    }
    return  true;
    }

    function  CheckForm()

    if(!  isMail(form.Email.value))  { 
    alert("您的電子郵件不合法!");
    form.Email.focus();
    return  false;
    }
    if(!  isEnglish(form.name.value))  { 
    alert("英文名不合法!");
    form.name.focus();
    return  false;
    }
    if(!  isChinese(form.cnname.value))  { 
    alert("中文名不合法!");
    form.cnname.focus();
    return  false;
    }
    if(!  isNumber(form.PublicZipCode.value))  { 
    alert("郵政編碼不合法!");
    form.PublicZipCode.focus();
    return  false;
    }
    return  true;
    }
    //-->
    </SCRIPT>

    2.6  限定表單項不能輸入的字符

    <script  language="javascript">
    <!--

    function  contain(str,charset)//  字符串包含測試函數

    var  i;
    for(i=0;i<charset.length;i++)
    if(str.indexOf(charset.charAt(i))>=0)
    return  true;
    return  false;
    }

    function  CheckForm()

    if  ((contain(document.form.NAME.value,  "%\(\)><"))  ||  (contain(document.form.MESSAGE.value,  "%\(\)><")))

    alert("輸入了非法字符");
    document.form.NAME.focus();
    return  false;
    }
    return  true;
    }
    //-->
    </script> 

    1. 檢查一段字符串是否全由數字組成      
    ---------------------------------------      
    <script language="Javascript"><!--          
    function checkNum(str){return str.match(/\D/)==null}          
    alert(checkNum("1232142141"))          
    alert(checkNum("123214214a1"))          
    // --></script>        
         
    2. 怎么判斷是否是字符        
    ---------------------------------------      
    if (/[^\x00-\xff]/g.test(s)) alert("含有漢字");         
    else alert("全是字符");     
              
    3. 怎么判斷是否含有漢字       
    ---------------------------------------       
    if (escape(str).indexOf("%u")!=-1) alert("含有漢字");        
    else alert("全是字符");          
       
    4. 郵箱格式驗證   
    ---------------------------------------     
    //函數名:chkemail    
    //功能介紹:檢查是否為Email Address    
    //參數說明:要檢查的字符串    
    //返回值:0:不是 1:是    
    function chkemail(a)    
    { var i=a.length;    
    var temp = a.indexOf('@');    
    var tempd = a.indexOf('.');    
    if (temp > 1) {    
    if ((i-temp) > 3){    
    if ((i-tempd)>0){    
    return 1;    
    }    
       
    }    
    }    
    return 0;    
    }    
       
    5. 數字格式驗證   
    ---------------------------------------     
    //函數名:fucCheckNUM    
    //功能介紹:檢查是否為數字    
    //參數說明:要檢查的數字    
    //返回值:1為是數字,0為不是數字    
    function fucCheckNUM(NUM)    
    {    
    var i,j,strTemp;    
    strTemp="0123456789";    
    if ( NUM.length== 0)    
    return 0    
    for (i=0;i<NUM.length;i++)    
    {    
    j=strTemp.indexOf(NUM.charAt(i));    
    if (j==-1)    
    {    
    //說明有字符不是數字    
    return 0;    
    }    
    }    
    //說明是數字    
    return 1;    
    }    
       
    6. 電話號碼格式驗證   
    ---------------------------------------     
    //函數名:fucCheckTEL    
    //功能介紹:檢查是否為電話號碼    
    //參數說明:要檢查的字符串    
    //返回值:1為是合法,0為不合法    
    function fucCheckTEL(TEL)    
    {    
    var i,j,strTemp;    
    strTemp="0123456789-()# ";    
    for (i=0;i<TEL.length;i++)    
    {    
    j=strTemp.indexOf(TEL.charAt(i));    
    if (j==-1)    
    {    
    //說明有字符不合法    
    return 0;    
    }    
    }    
    //說明合法    
    return 1;    
    }   
      
    7. 判斷輸入是否為中文的函數  
    ---------------------------------------     
    function ischinese(s){  
    var ret=true;  
    for(var i=0;i<s.length;i++)  
    ret=ret && (s.charCodeAt(i)>=10000);  
    return ret;  
    }   
      
    8. 綜合的判斷用戶輸入的合法性的函數 
    ---------------------------------------     
    <script language="javascript"> 
    //限制輸入字符的位數開始 
    //m是用戶輸入,n是要限制的位數 
    function issmall(m,n) 

    if ((m<n) && (m>0)) 
      { 
      return(false); 
      } 
    else 
    {return(true);} 

     
    9. 判斷密碼是否輸入一致 
    ---------------------------------------     
    function issame(str1,str2) 

    if (str1==str2) 
    {return(true);} 
    else 
    {return(false);} 

     
    10. 判斷用戶名是否為數字字母下滑線
    ---------------------------------------     
    function notchinese(str){
    var reg=/[^A-Za-z0-9_]/g
        if (reg.test(str)){
        return (false);
        }else{
    return(true);    }
    }

    11. form文本域的通用校驗函數
    ---------------------------------------     
    作用:檢測所有必須非空的input文本,比如姓名,賬號,郵件地址等等。
    該校驗現在只針對文本域,如果要針對form里面的其他域對象,可以改變判斷條件。

    使用方法:在要檢測的文本域中加入title文字。文字是在提示信息,你要提示給用戶的該字段的中文名。比如要檢測用戶名
    html如下<input name="txt_1" title="姓名">,當然,最好用可視化工具比如dreamweaver什么的來編輯域。
    如果要檢測數字類型數據的話,再把域的id統一為sz.
    javascript判斷日期類型比較麻煩,所以就沒有做日期類型校驗的程序了.高手可以補充。

    程序比較草,只是提供一個思路。拋磚引玉! :)
    哦,對了,函數調用方法:< form  onsubmit="return dovalidate()">

    function dovalidate()
    {
    fm=document.forms[0] //只檢測一個form,如果是多個可以改變判斷條件
        for(i=0;i<fm.length;i++)
        { 
        //檢測判斷條件,根據類型不同可以修改
        if(fm[i].tagName.toUpperCase()=="INPUT" &&fm[i].type.toUpperCase()=="TEXT" && (fm[i].title!=""))
       
             if(fm[i].value="/blog/="")//
             {
             str_warn1=fm[i].title+"不能為空!";
             alert(str_warn1);
            fm[i].focus();
             return false;        
             }
             if(fm[i].id.toUpperCase()=="SZ")//數字校驗
             {
                     if(isNaN(fm[i].value))
                    { str_warn2=fm[i].title+"格式不對";
                    alert(str_warn2);
                    fm[i].focus();
                     return false;
                     }
            }
        }
        return true;
    }


    2 >表單提交驗證類


    2.1 表單項不能為空

    <script language="javascript">
    <!--
    function CheckForm()
    {
    if (document.form.name.value.length == 0) {
    alert("請輸入您姓名!");
    document.form.name.focus();
    return false;
    }
    return true;
    }
    -->
    </script>

    2.2 比較兩個表單項的值是否相同

    <script language="javascript">
    <!--
    function CheckForm()
    if (document.form.PWD.value != document.form.PWD_Again.value) {
    alert("您兩次輸入的密碼不一樣!請重新輸入.");
    document.ADDUser.PWD.focus();
    return false;
    }
    return true;
    }
    -->
    </script>

    2.3 表單項只能為數字和"_",用于電話/銀行帳號驗證上,可擴展到域名注冊等

    <script language="javascript">
    <!--
    function isNumber(String)
    {
    var Letters = "1234567890-"; //可以自己增加可輸入值
    var i;
    var c;
    if(String.charAt( 0 )=='-')
    return false;
    if( String.charAt( String.length - 1 ) == '-' )
    return false;
    for( i = 0; i < String.length; i ++ )
    {
    c = String.charAt( i );
    if (Letters.indexOf( c ) < 0)
    return false;
    }
    return true;
    }
    function CheckForm()
    {
    if(! isNumber(document.form.TEL.value)) {
    alert("您的電話號碼不合法!");
    document.form.TEL.focus();
    return false;
    }
    return true;
    }
    -->
    </script>


    2.4 表單項輸入數值/長度限定

    <script language="javascript">
    <!--
    function CheckForm()
    {
    if (document.form.count.value > 100 || document.form.count.value < 1)
    {
    alert("輸入數值不能小于零大于100!");
    document.form.count.focus();
    return false;
    }
    if (document.form.MESSAGE.value.length<10)
    {
    alert("輸入文字小于10!");
    document.form.MESSAGE.focus();
    return false;
    }
    return true;
    }
    //-->
    </script>

    2.5 中文/英文/數字/郵件地址合法性判斷

    <SCRIPT LANGUAGE="javascript">
    <!--

    function isEnglish(name) //英文值檢測
    {
    if(name.length == 0)
    return false;
    for(i = 0; i < name.length; i++) {
    if(name.charCodeAt(i) > 128)
    return false;
    }
    return true;
    }

    function isChinese(name) //中文值檢測
    {
    if(name.length == 0)
    return false;
    for(i = 0; i < name.length; i++) {
    if(name.charCodeAt(i) > 128)
    return true;
    }
    return false;
    }

    function isMail(name) // E-mail值檢測
    {
    if(! isEnglish(name))
    return false;
    i = name.indexOf(" at ");
    j = name dot lastIndexOf(" at ");
    if(i == -1)
    return false;
    if(i != j)
    return false;
    if(i == name dot length)
    return false;
    return true;
    }

    function isNumber(name) //數值檢測
    {
    if(name.length == 0)
    return false;
    for(i = 0; i < name.length; i++) {
    if(name.charAt(i) < "0" || name.charAt(i) > "9")
    return false;
    }
    return true;
    }

    function CheckForm()
    {
    if(! isMail(form.Email.value)) {
    alert("您的電子郵件不合法!");
    form.Email.focus();
    return false;
    }
    if(! isEnglish(form.name.value)) {
    alert("英文名不合法!");
    form.name.focus();
    return false;
    }
    if(! isChinese(form.cnname.value)) {
    alert("中文名不合法!");
    form.cnname.focus();
    return false;
    }
    if(! isNumber(form.PublicZipCode.value)) {
    alert("郵政編碼不合法!");
    form.PublicZipCode.focus();
    return false;
    }
    return true;
    }
    //-->
    </SCRIPT>

    2.6 限定表單項不能輸入的字符

    <script language="javascript">
    <!--

    function contain(str,charset)// 字符串包含測試函數
    {
    var i;
    for(i=0;i<charset.length;i++)
    if(str.indexOf(charset.charAt(i))>=0)
    return true;
    return false;
    }

    function CheckForm()
    {
    if ((contain(document.form.NAME.value, "%\(\)><")) || (contain(document.form.MESSAGE.value, "%\(\)><")))
    {
    alert("輸入了非法字符");
    document.form.NAME.focus();
    return false;
    }
    return true;
    }
    //-->
    </script>

     

    posted @ 2007-06-07 10:47 摩西 閱讀(369) | 評論 (0)編輯 收藏
    Java/J2EE中文問題終極解決之道
     
    Java中文問題一直困擾著很多初學者,如果了解了Java系統的中文問題原理,我們就可以對中文問題能夠采取根本的解決之道。

      最古老的解決方案是使用String的字節碼轉換,這種方案問題是不方便,我們需要破壞對象封裝性,進行字節碼轉換。

      還有一種方式是對J2EE容器進行編碼設置,如果J2EE應用系統脫離該容器,則會發生亂碼,而且指定容器配置不符合J2EE應用和容器分離的原則。

      在Java內部運算中,涉及到的所有字符串都會被轉化為UTF-8編碼來進行運算。那么,在被Java轉化之前,字符串是什么樣的字符集? Java總是根據操作系統的默認編碼字符集來決定字符串的初始編碼,而且Java系統的輸入和輸出的都是采取操作系統的默認編碼。

      因此,如果能統一Java系統的輸入、輸出和操作系統3者的編碼字符集合,將能夠使Java系統正確處理和顯示漢字。這是處理Java系統漢字的一個原則,但是在實際項目中,能夠正確抓住和控制住Java系統的輸入和輸出部分是比較難的。J2EE中,由于涉及到外部瀏覽器和數據庫等,所以中文問題亂碼顯得非常突出。

      J2EE應用程序是運行在J2EE容器中。在這個系統中,輸入途徑有很多種:一種是通過頁面表單打包成請求(request)發往服務器的;第二種是通過數據庫讀入;還有第3種輸入比較復雜,JSP在第一次運行時總是被編譯成Servlet,JSP中常常包含中文字符,那么編譯使用javac時,Java將根據默認的操作系統編碼作為初始編碼。除非特別指定,如在Jbuilder/eclipse中可以指定默認的字符集。

      輸出途徑也有幾種:第一種是JSP頁面的輸出。由于JSP頁面已經被編譯成Servlet,那么在輸出時,也將根據操作系統的默認編碼來選擇輸出編碼,除非指定輸出編碼方式;還有輸出途徑是數據庫,將字符串輸出到數據庫。

      由此看來,一個J2EE系統的輸入輸出是非常復雜,而且是動態變化的,而Java是跨平臺運行的,在實際編譯和運行中,都可能涉及到不同的操作系統,如果任由Java自由根據操作系統來決定輸入輸出的編碼字符集,這將不可控制地出現亂碼。

      正是由于Java的跨平臺特性,使得字符集問題必須由具體系統來統一解決,所以在一個Java應用系統中,解決中文亂碼的根本辦法是明確指定整個應用系統統一字符集。

      指定統一字符集時,到底是指定ISO8859_1 、GBK還是UTF-8呢? 

      (1)如統一指定為ISO8859_1,因為目前大多數軟件都是西方人編制的,他們默認的字符集就是ISO8859_1,包括操作系統Linux和數據庫MySQL等。這樣,如果指定Jive統一編碼為ISO8859_1,那么就有下面3個環節必須把握:

      開發和編譯代碼時指定字符集為ISO8859_1。

      運行操作系統的默認編碼必須是ISO8859_1,如Linux。

      在JSP頭部聲明:<%@ page contentType="text/html;charset=ISO8859_1" %>。

      (2)如果統一指定為GBK中文字符集,上述3個環節同樣需要做到,不同的是只能運行在默認編碼為GBK的操作系統,如中文Windows。

      統一編碼為ISO8859_1和GBK雖然帶來編制代碼的方便,但是各自只能在相應的操作系統上運行。但是也破壞了Java跨平臺運行的優越性,只在一定范圍內行得通。例如,為了使得GBK編碼在linux上運行,設置Linux編碼為GBK。

      那么有沒有一種除了應用系統以外不需要進行任何附加設置的中文編碼根本解決方案呢?

      將Java/J2EE系統的統一編碼定義為UTF-8。UTF-8編碼是一種兼容所有語言的編碼方式,惟一比較麻煩的就是要找到應用系統的所有出入口,然后使用UTF-8去“結扎”它。

      一個J2EE應用系統需要做下列幾步工作:

    1. 開發和編譯代碼時指定字符集為UTF-8。JBuilder和Eclipse都可以在項目屬性中設置。 
    2. 使用過濾器,如果所有請求都經過一個Servlet控制分配器,那么使用Servlet的filter執行語句,將所有來自瀏覽器的請求(request)轉換為UTF-8,因為瀏覽器發過來的請求包根據瀏覽器所在的操作系統編碼,可能是各種形式編碼。關鍵一句:
      request.setCharacterEncoding("UTF-8")。
      網上有此filter的源碼,Jdon框架源碼中com.jdon.util.SetCharacterEncodingFilter
      需要配置web.xml 激活該Filter。 
    3. 在JSP頭部聲明:<%@ page contentType="text/html;charset= UTF-8" %>。 
    4. 在Jsp的html代碼中,聲明UTF-8:
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    5. 設定數據庫連接方式是UTF-8。例如連接MYSQL時配置URL如下:
      jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8
      注意,上述寫法是JBoss的mysql-ds.xml寫法,多虧網友提示,在tomcat中&amp;要寫成&即可。一般其他數據庫都可以通過管理設置設定UTF-8 
    6. 其他和外界交互時能夠設定編碼時就設定UTF-8,例如讀取文件,操作XML等。 
         筆者以前在Jsp/Servlet時就采取這個原則,后來使用Struts、Tapestry、EJB、Hibernate、Jdon等框架時,從未被亂碼困擾過,可以說適合各種架構。希望本方案供更多初學者分享,減少Java/J2EE的第一個攔路虎,也避免因為采取一些臨時解決方案,導致中文問題一直出現在新的技術架構中。 
    posted @ 2007-04-27 15:24 摩西 閱讀(389) | 評論 (0)編輯 收藏
        
    <entry key="webaddsuccess" value="redirect:/web.do?method=friendSitelist"/>
    posted @ 2007-04-27 09:30 摩西 閱讀(901) | 評論 (2)編輯 收藏
    jsp頁面代碼: 
    <% boolean isClubManager=false;
      Long regionid2 = ((Region)request.getSession().getAttribute("RegionSession")).getId();
      isClubManager=newsPostService.isClubManager(regionid2);
      Region region=(Region)request.getSession().getAttribute("RegionSession");
      String memo=region.getParent().getMemo();
      request.setAttribute("memo",memo);
      %>

    .........

    <gd:label maxLength="150"  text="${memo}"/>
    posted @ 2007-04-24 14:02 摩西 閱讀(1865) | 評論 (0)編輯 收藏

    ClientService.java

    package com.soft.client;

    import org.apache.axis.client.Service;
    import javax.xml.rpc.ServiceException;
    import java.net.MalformedURLException;
    import org.apache.axis.client.Call;
    import org.apache.axis.encoding.ser.BeanDeserializerFactory;
    import javax.xml.namespace.QName;
    import org.apache.axis.encoding.ser.BeanSerializerFactory;
    import java.rmi.RemoteException;

    public class ClientService {
        public ClientService() {
        }
        public UserDTO getUserDTO() {
            String endpoint = "http://localhost:8080/WebModule/services/Myservice";
            QName qset = new QName("urn:Myservice", "UserDTO");
            QName qmethod = new QName("urn:Myservice", "getUserDTO");
            Class clsUserDTO = UserDTO.class;

            UserDTO dto = new UserDTO();
            Service service = new Service();
            try {
                Call call = (Call) service.createCall();
                call.registerTypeMapping(clsUserDTO, qset,
                                         new BeanSerializerFactory(clsUserDTO, qset),
                                         new BeanDeserializerFactory(clsUserDTO,qset));
                call.setTargetEndpointAddress(new java.net.URL(endpoint));
                call.setOperationName(qmethod);
                call.setReturnClass(clsUserDTO);
                dto = (UserDTO) call.invoke(new Object[] {});
               
               
            } catch (ServiceException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return dto;
        }
        public static void main(String[] args) {
            ClientService cs = new ClientService();
            UserDTO user = cs.getUserDTO();
            System.out.println(user.getPassword());
            System.out.println(user.getUsername());
        }
    }


    UserDTO.java
    package com.soft.client;


    public class UserDTO {

            private String username;
            private String password;

            public String getPassword() {
                    return password;
            }
            public void setPassword(String password) {
                    this.password = password;
            }
            public String getUsername() {
                    return username;
            }
            public void setUsername(String username) {
                    this.username = username;
            }

    }

    posted @ 2007-04-16 16:58 摩西 閱讀(283) | 評論 (0)編輯 收藏
    報錯信息:

    org.apache.jasper.JasperException: <h3>Validation error messages from TagLibraryValidator for c</h3><p>null: com.caucho.xml.XmlParseException: stream:276: expected character in cdata at `?' (\ufffd)</p><h3>Validation error messages from TagLibraryValidator for sql</h3><p>null: com.caucho.xml.XmlParseException: stream:276: expected character in cdata at `?' (\ufffd)</p><h3>Validation error messages from TagLibraryValidator for x</h3><p>null: com.caucho.xml.XmlParseException: stream:276: expected character in cdata at `?' (\ufffd)</p><h3>Validation error messages from TagLibraryValidator for fmt</h3><p>null: com.caucho.xml.XmlParseException: stream:276: expected character in cdata at `?' (\ufffd)</p>
    posted @ 2007-04-16 16:07 摩西 閱讀(1507) | 評論 (1)編輯 收藏
    <script language="javascript">document.write(week[${status.index}])</script>
    posted @ 2007-04-16 14:42 摩西 閱讀(1176) | 評論 (2)編輯 收藏
    .jsp加入代碼:
    <c:set scope="session" value="${page.result}" var="page"></c:set>
    <c:set value="${page1.result}" var="page1" scope="session"></c:set>
    <c:set value="${page2.result}" var="page2" scope="session"></c:set>
    報錯:
    avax.servlet.jsp.el.ELException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
    可見這種<c:set>的用法是錯誤的!!!!!!

    posted @ 2007-04-16 13:49 摩西 閱讀(1328) | 評論 (0)編輯 收藏

          import java.util.Map.Entry;
           
         private static Map oldvote=new HashMap();
               ...............................
             ModelAndView mav = new ModelAndView();
            String voteid = ServletRequestUtils.getRequiredStringParameter(request,
                    "voteid");
            String ip = ServletRequestUtils.getStringParameter(request, "ip");

            //遍歷HasMap
            Boolean isoldvote=false;
            Iterator it=oldvote.entrySet().iterator();
            while(it.hasNext()){
                Entry  entry=(Entry) it.next();
                Object key=entry.getKey();
                Object value=entry.getValue();
                if(key.equals(voteid)&&value.equals(ip)){
                 isoldvote=true;
                 break;
                }
            }

            if (isoldvote) {
             ...............................

    posted @ 2007-04-14 09:41 摩西 閱讀(368) | 評論 (0)編輯 收藏
    <a href="javascript:history.go(-1);">[返回]</javascript>
    posted @ 2007-04-14 09:39 摩西 閱讀(1755) | 評論 (1)編輯 收藏

    1.
    <html>
    ?<head>
    ??<title>transPara.htm</title>
    ?</head>
    <body>
    ?<form method="POST" action="acceptPara.jsp">
    ? ??<p align="center">
    ??姓 名:<input type="text" name="name" size="20"><br>
    ? ??年 齡:&nbsp;&nbsp;&nbsp; <input type="text" name="age" size="15"><br>
    ? ??性 別:&nbsp;&nbsp;&nbsp;
    ???<input type="radio" value="male" checked name="sex">
    ????男&nbsp;&nbsp;&nbsp;&nbsp;?
    ? ???<input type="radio" name="sex" value="female">女</p>
    ? ??<p align="center">
    ???<input type="submit" value="submit" name="submit">
    ? ???<input type="reset" value="reset" name="reset"></p>
    ?</form>
    </body>
    </html>

    2.
    <html>

    <%@ page contentType="text/html;charset=gb2312"%>
    <jsp:useBean id="atest"? class="test.AcceptPara"/>

    <head><title>acceptPara.jsp</title></head>

    <body>
    <jsp:setProperty name="atest" property="*"/>?? //? ***將javabean中的屬性自動與html提交過來的變量匹配***********
    Value of property "name" :
    <jsp:getProperty name="atest" property="name"/><br>
    Value of property "age" :
    <jsp:getProperty name="atest" property="age"/><br>
    Value of property "sex" :
    <jsp:getProperty name="atest" property="sex"/><br>
    Value of property "submit" :
    <jsp:getProperty name="atest" property="submit"/><br>

    </body>
    </html>



    3.
    package test;//?? 在一些tomcat舊版本包定義一定要有,且在jsp引用中如下:<jsp:useBean id="atest"? class="test.AcceptPara"/>? 編譯后放在\WEB-INF\classes\test\中

    public class AcceptPara{

    ?String name;
    ?int age;
    ?String sex;
    ?String submit;
    ?
    ?public void setName(String value){
    ??name=value;
    ?}
    ?
    ?public String getName(){
    ??return name;
    ?}
    ?
    ?public void setAge(int value){
    ??age=value;
    ?}
    ?
    ?public int getAge(){
    ??return age;
    ?}
    ?
    ?public void setSex(String value){
    ??sex=value;
    ?}
    ?
    ?public String getSex(){
    ??return sex;
    ?}
    ?
    ?public void setSubmit(String value){
    ??submit=value;
    ?}
    ?
    ?public String getSubmit(){
    ??return submit;
    ?}
    ??
    ?public void acceptPara(){}
    ?
    }

    posted @ 2006-09-08 12:41 摩西 閱讀(766) | 評論 (2)編輯 收藏
    1.Forward_demo.htm:

    <html>
    <head><title>Forward_demo1.htm</title></head>
    <body>
    <form? action="demo1.jsp" method="POST">
    用戶:<input type="text" name="username" size="20"><br>
    密碼:<input type="password" name="password" size="20"><br>
    <input type="radio" name="select" value="manage" checked>管理<br>
    <input type="radio" name="select" value="statictic">資料<br>
    <input type="submit" name="login" value="submit">&nbsp;
    <input type="reset" name="reset" value="重寫">
    </form>
    </body>
    </html>
    2.demo1.jsp:
    <html>
    <head><title>demo1.jsp</title></head>
    <body>
    <%
    String username,password,choice;
    username=request.getParameter("username");
    password=request.getParameter("password");
    choice=request.getParameter("select");
    if (choice.equals("manage")){
    %>
    ??<jsp:forward page="demo1.1.jsp">
    ??<jsp:param name="username" value="<%=username%>"/>
    ??<jsp:param name="password" value="<%=password%>"/>
    ??</jsp:forward>
    <%?}else{
    ???//user select statistic
    %>
    ??<jsp:forward page="demo1.2.jsp">
    ??<jsp:param name="username" value="<%=username%>"/>
    ??<jsp:param name="password" value="<%=password%>"/>
    ??</jsp:forward>
    <%
    ??}
    %>
    </body>
    </html>

    3.demo1.1.jsp:
    <html>
    ?<head>
    ??<title>demo1.1.jsp</title>
    ?</head>
    <body>
    ??This is the Management Page!<br>
    <%
    ??String user,pwd;?
    ??user=request.getParameter("username");
    ??pwd=request.getParameter("password");
    %>
    ??username is: <%=user%><br>
    ??password is: <%=pwd%><br>
    </body>
    </html>
    4.demo1.2.jsp:
    <html>
    ?<head>
    ??<title>demo1.2.jsp</title>
    ?</head>
    <body>
    ??This is the Statistic Page!<br>
    <%
    ??String user,pwd;?
    ??user=request.getParameter("username");
    ??pwd=request.getParameter("password");

    %>
    ??username is: <%=user%><br>
    ??password is: <%=pwd%><br>
    </body>
    </html>
    posted @ 2006-09-07 14:21 摩西 閱讀(4861) | 評論 (2)編輯 收藏

    過程:
    1.停掉MSSQLSERVER,將MSSQL安裝目錄下的E:\Program Files\Microsoft SQL

    Server\MSSQL\Data\pubs.mdf和E:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf文

    件移走。
    2.重新啟動MSSQLSERVER,在SQL Server Enterprise Manager中可看到PUBS的圖標是灰色的加了個'(置疑

    )',刪除PUBS。至此是為了模擬Pubs數據庫只留下了pubs.mdf,(pubs_log.ldf不再用到)。
    3.將pubs.mdf移到MSSQL安裝目錄下E:\Program Files\Microsoft SQL Server\MSSQL\Data\
    4.在SQL查詢分析器中執行 exec sp_attach_db 'pubs' ,'E:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
    會有錯誤提示:
    設備激活錯誤。物理文件名 'e:\Program Files\Microsoft SQL Server\MSSQL\data\pubs_log.ldf' 可

    能有誤。
    已創建名為 'E:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.LDF' 的新日志文件。
    不過沒關系,因為新日志文件已創建了,呵呵。
    用此方法只要有.mdf文件,就能回復數據庫。

    posted @ 2006-09-06 11:58 摩西 閱讀(3803) | 評論 (1)編輯 收藏

    ??????? 試題是模仿GRE考試,在這實例中,編了一套"中文GRE測試"總共有十道題,讀者可自行增加.
    ??????? 注:實例中的試題,可選答案,正確答案封裝在文件exam.java 中.用index.jsp文件來實現對問題的調用.核對,顯示結果.所以要先編譯exam.java成exam.class ,之后index.jsp才能調用.

    少說費話--直入主題:
    1.在Tomcat目錄下的webapps目錄下新建book文件夾,
    1.5 在Tomcat目錄下的conf/Catalina/localhost目錄下新建一個book.xml (這一步很重要!!)
    ?寫入:
    <?xml version='1.0' encoding='utf-8'?>
    <Context docBase="E:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/book" path="/book" reloadable="true">
    </Context>
    2.在book文件夾下新建WEB-INF文件夾.
    2.5 在WEB-INF目錄下新建web.xml 寫入:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4"
    ?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/j2ee
    ?
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    </web-app>
    3.在WEB-INF文件夾下新建classes文件夾.
    4.把index.jsp? exam.java 放到book目錄下.
    5.用javac? exam.java? 編譯exam.java成exam.jsp? (可在命令行中運行此步)
    6.exam.jsp 放到WEB-INF/classes/exam目錄下.
    7.啟動tomcat.
    8.輸入地址: http://localhost:8080/book???? 回車 OK !!!!
    Image00003.jpg


    附index.jsp代碼:
    <html>

    <head>
    <META http-equiv=Content-Type content="text/html; charset=GB2312">
    <title>網上測試</title>
    </head>

    <body>
    <%@ page language="java" contentType="text/html;charset=GB2312" buffer="none"%>
    <jsp:useBean id="exam" scope="session" class="exam.exam"/>
    <FONT SIZE="+2"><B>
    <%=exam.getExamName()%>
    </B></FONT>
    <br><br>
    <%
    int current=exam.getCurrent();
    String reset=null;
    reset=request.getParameter("Reset");
    if(reset==null){
    ?reset="";
    }
    if(reset.equals("1"))
    {
    ?exam.reset();
    }
    int iqn=0;
    String questionNum=null;
    questionNum=request.getParameter("QuestionNum");

    if(questionNum==null)
    {
    ?iqn=0;
    }
    else
    {
    ?Integer tmpInt=new Integer(questionNum);
    ?iqn=tmpInt.intValue();
    }
    if(iqn!=0)
    {
    ?current++;
    ?exam.setCurrent(current);
    }
    ?String answer=null;
    ?answer=request.getParameter("Answer");
    ?
    if(answer==null)
    {
    ?answer="";
    }
    if(exam.getCurrent()>exam.getCount())
    {
    ?if(exam.getCorrect()>=6)
    ?{
    %>
    ??恭喜!你以<%=exam.getCorrect()*10 %>分的成績通過了測試!<BR>
    <%
    ?}
    ?else
    ?{
    %>
    ??對不起,你需要60分以上的成績才能通過測試!<BR>
    ??你可以按<A HREF="exam.jsp?Reset=1">這里</A>重新進行測試。<BR>
    <%
    ?}
    }
    else
    {
    ?if(iqn==0)
    ?{
    ??if(answer. equals(exam.getCorrectAnswer(exam.getCurrent()-1)))
    ??{
    ???exam.setCorrect(exam.getCorrect()+1);
    ??}
    ?}
    ?else
    ?{
    ??if(answer.equals(exam.getCorrectAnswer(exam.getCurrent()-2)))
    ??{
    ???exam.setCorrect(exam.getCorrect()+1);
    ??}
    ?}
    %>
    ?<FORM action="exam.jsp" method="post">
    ?<input type="hidden" name="QuestionNum" value="<%=current%>">
    <P>
    ?總共<%=exam.getCount()%>個問題,現在是第<%=exam.getCurrent()%>個問題
    </P>
    <br>

    <b>
    ?<%=current%>
    </b>

    <%
    out.println(exam.getExamQuestion(current-1));
    %>
    <br>
    <input type="radio" name="Answer" value="A">
    <%
    out.println(exam.getExamAnswer(current-1,0));
    %>
    <br>

    <input type="radio" name="Answer" value="B">
    <%
    out.println(exam.getExamAnswer(current-1,1));
    %>
    <br>

    <input type="radio" name="Answer" value="C">
    <%
    out.println(exam.getExamAnswer(current-1,2));
    %>
    <br>

    <input type="radio" name="Answer" value="D">
    <%
    out.println(exam.getExamAnswer(current-1,3));
    %>
    <br>

    <input type="submit" value="確定">
    </form>
    <%
    }
    %>

    </body>

    </html>


    exam.java代碼:
    package exam;
    public class exam
    {
    ?int count;
    ?int current;
    ?int correct;
    ?String examName;
    //?String answer;
    ?String[] examQuestion=
    ?{//存放所有的問題
    ??"1.科學常識:下列有關科學家的敘述,何者正確?",
    ??"2.牛頓三大運動定律的第一定律是:",
    ??"3.兩個報名參加海軍的年輕人被問道:\"你們會游泳嗎?\"他倆愣住了。過了一會兒,其中一個人回答說:\"怎么回事,難道船不夠用嗎?\"這篇文章的主題是什么",
    ??"4.接上題。考官為什么要問這兩個人游泳的事?",
    ??"5.男:看那個妹妹,好靚哦!女:看你個大頭鬼!問:這個女的是什么意思?",
    ??"6.男:今天天氣不錯。女:可不是咋得!問:這個女的什么意思?",
    ??"7.男:我把撿來的錢包交給警察了。男:我KAO!",
    ??"8.女:您好,您撥叫的用戶沒有開機,要留言請留言,不留言請掛機。問:這是發生在什么時候?",
    ??"9.ABCD四教授申請中科院院士,如果以下事實為真,誰最有資格入選",
    ??"10.以下是摘自電影《大話西游》中唐僧的一句臺詞,選項中可能正確的是人和妖精都是媽生的,不同的人是人他媽的,妖是妖他媽的,妖要有了仁慈之心,就不是妖了,而是人妖"
    ?};
    ?String[][] examAnswer=
    ?{//問題可選的答案
    ??{"(A)天文學家常常到天體營去研究天文的奧秘","(B)地質學家常常到地牢去研究地層結構","(C)大氣科學家常常坐熱氣球到天空研究臺風","(D)以上都不對"},
    ??{"(A)靜如處子 動于脫兔","(B)靜中有動 動中有靜","(C)運動絕對 靜止相對","(D)靜者恒靜 動者恒動"},
    ??{"(A)參軍","(B)打魚","(C)游泳","(D)造船"},
    ??{"(A)他想讓他們教他游泳","(B)他想知道這兩個人會不會被淹死","(C)他擔心船不夠用","(D)他想舉行游泳比賽"},
    ??{"(A) 這個男的頭有病","(B)這個男的頭比較大","(C)這個男的看見的是鬼","(D)這個女的有點吃醋"},
    ??{"(A)今天天氣不好","(B)今天天氣很好","(C)這女的沒聽清","(D)這女的不知道"},
    ??{"(A)他很驚訝","(B)他丟了錢包","(C)他想揍第一個人","(D)他累了想找個地方靠靠"},
    ??{"(A)打電話","(B) 開飛機","(C) 發EMAIL","(D)坐飛機"},
    ??{"(A)是中國改革開放以后第一個公費留德的四十歲以下的女性的在微電子領域的花了少于三年畢業的毅然回國的博士","(B)是在使用黑白膠卷照出彩照這一國際前沿領域做出突破貢獻的科學家","(C)畢業于我國著名的海南熱帶作物學院,學慣東西,差一點就復制出了恐龍。而且率先提出,中國人才沒有斷層,只是待遇和職稱斷層","(D)經常陪李嵐清打敲三家和拱豬,對高校合并做出突出貢獻"},
    ??{"(A)人妖是指:媽媽還健在就去做了和尚的妖精","(B)人和妖精沒有本質區別,因為他們都是同一位女士生的","(C)唐僧為了超度一只妖精,不惜和妖精一起罵人","(D)唐僧暗示自己的母親原來就是一只妖精變的"}
    ?};
    ?
    ?String[] correctAnswer=
    ?{//正確的答案
    ??"D","C","A","B","D","B","A","A","B","C"
    ?};

    ?String message;
    ?
    ?public exam()
    ?{//重設測試
    ??reset();
    ?}

    ?public void reset()
    ?{//重設測試
    ??count=10;
    ??current=1;
    ??correct=0;
    ??examName="中文GRE考試樣題";
    ?}

    ?public void setCount(int c)
    ?{
    ??count=c;
    ?}

    ?public int getCount()
    ?{
    ??return count;
    ?}

    ?public void setCurrent(int c)
    ?{
    ??current=c;
    ?}

    ?public int getCurrent()
    ?{
    ??return current;
    ?}

    ?public void setCorrect(int c)
    ?{
    ??correct=c;
    ?}

    ?public int getCorrect()
    ?{
    ??return correct;
    ?}

    ?public void setExamName(String name)
    ?{
    ??examName=name;
    ?}

    ?public String getExamName()
    ?{
    ??return examName;
    ?}

    ?public void setCorrectAnswer(String[] answer)
    ?{
    ??correctAnswer=answer;
    ?}

    ?public void setCorrectAnswer(int i,String answer)
    ?{
    ??correctAnswer[i]=answer;
    ?}

    ?public String getCorrectAnswer(int i)
    ?{
    ??return correctAnswer[i];
    ?}

    ?public String[] getCorrectAnswer()
    ?{
    ??return correctAnswer;
    ?}

    ?public void setExamQuestion(String[] question)
    ?{
    ??examQuestion=question;
    ?}

    ?public void setExamQuestion(int i,String question)
    ?{
    ??examQuestion[i]=question;
    ?}

    ?public String[] getExamQuestion()
    ?{
    ??return examQuestion;
    ?}

    ?public String getExamQuestion(int i)
    ?{
    ??return examQuestion[i];
    ?}

    ?public void setExamAnswer(String[][] answer)
    ?{
    ??examAnswer=answer;
    ?}

    ?public void setExamAnswer(int i,String[] answer)
    ?{
    ??examAnswer[i]=answer;
    ?}

    ?public void setExamAnswer(int i ,int j,String answer)
    ?{
    ??examAnswer[i][j]=answer;
    ?}
    ?
    ?public String[][] getExamAnswer()
    ?{
    ??return examAnswer;
    ?}

    ?public String[] getExamAnswer(int i)
    ?{
    ??return examAnswer[i];
    ?}

    ?public String getExamAnswer(int i,int j)
    ?{
    ??return examAnswer[i][j];
    ?}
    }

    posted @ 2006-09-06 10:57 摩西 閱讀(295) | 評論 (0)編輯 收藏

     經常看到jsp的初學者問tomcat下如何配置jsp、servlet和bean的問題,于是總結了一下如何tomcat下配置jsp、servlet和ben,希望對那些初學者有所幫助。

    一、開發環境配置

    第一步:下載j2sdk和tomcat:到sun官方站(http://java.sun.com/j2se/1.5.0/download.jsp)下載j2sdk,注意下載版本為Windows Offline Installation的SDK,同時最好下載J2SE 1.5.0 Documentation,然后到tomcat官方站點(http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi)下載tomcat(下載最新5.5.9版本的tomcat);

    第二步:安裝和配置你的j2sdk和tomcat:執行j2sdk和tomcat的安裝程序,然后按默認設置進行安裝即可。

    1.安裝j2sdk以后,需要配置一下環境變量,在我的電腦->屬性->高級->環境變量->系統變量中添加以下環境變量(假定你的j2sdk安裝在c:\j2sdk1.5.0):

    JAVA_HOME=c:\j2sdk1.5.0
    classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因為它代表當前路徑)
    path=%JAVA_HOME%\bin

    接著可以寫一個簡單的java程序來測試J2SDK是否已安裝成功:

    public class Test{
    public static void main(String args[]){
    System.out.println("This is a test program.");
    }
    }

    將上面的這段程序保存為文件名為Test.java的文件。

    然后打開命令提示符窗口,cd到你的Test.java所在目錄,然后鍵入下面的命令

    javac Test.java
    java Test

    此時如果看到打印出來This is a test program.的話說明安裝成功了,如果沒有打印出這句話,你需要仔細檢查一下你的配置情況。

    2.安裝Tomcat后,在我的電腦->屬性->高級->環境變量->系統變量中添加以下環境變量(假定你的tomcat安裝在c:\tomcat):

    CATALINA_HOME=c:\tomcat
    CATALINA_BASE=c:\tomcat

    然后修改環境變量中的classpath,把tomat安裝目錄下的common\lib下的(可以根據實際追加)servlet.jar追加到classpath中去,修改后的classpath如下:

    classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;

    接著可以啟動tomcat,在IE中訪問http://localhost:8080,如果看到tomcat的歡迎頁面的話說明安裝成功了。

    第三步:建立自己的jsp app目錄

    1.到Tomcat的安裝目錄的webapps目錄,可以看到ROOT,examples, tomcat-docs之類Tomcat自帶的的目錄;
    2.在webapps目錄下新建一個目錄,起名叫myapp;
    3.myapp下新建一個目錄WEB-INF,注意,目錄名稱是區分大小寫的;
    4.WEB-INF下新建一個文件web.xml,內容如下:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "
    http://java.sun.com/dtd/web-app_2_3.dtd ">
    <web-app>
    <display-name>My Web Application</display-name>
    <description>
    A application for test.
    </description>
    </web-app>

    5.在myapp下新建一個測試的jsp頁面,文件名為index.jsp,文件內容如下:
    <html><body><center>
    Now time is: <%=new java.util.Date()%>
    </center></body></html>

    6.重啟Tomcat

    7.打開瀏覽器,輸入http://localhost:8080/myapp/index.jsp 看到當前時間的話說明就成功了。

    第四步:建立自己的Servlet:

    1.用你最熟悉的編輯器(建議使用有語法檢查的java ide)新建一個servlet程序,文件名為Test.java,文件內容如下:

    package test;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class Test extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    PrintWriter out=response.getWriter();
    out.println("<html><body><h1>This is a servlet test.</h1></body></html>");
    out.flush();
    }
    }

    2 .編譯
    將Test.java放在c:\test下,使用如下命令編譯:

    C:\Test>javac Test.java

    然后在c:\Test下會產生一個編譯后的servlet文件:Test.class

    3 .將結構test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那個test目錄到classes目錄下,如果classes目錄不存在,就新建一個。 現在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目錄結構

    4 .修改webapps\myapp\WEB-INF\web.xml,添加servlet和servlet-mapping

    編輯后的web.xml如下所示,紅色為添加的內容:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "<web-app>
    <display-name>My Web Application</display-name>
    <description>
    A application for test.
    </description>
    <servlet>
    <servlet-name>Test</servlet-name>
    <display-name>Test</display-name>
    <description>A test Servlet</description>
    <servlet-class>test.Test</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/Test</url-pattern>
    </servlet-mapping>

    </web-app>

    這段話中的servlet這一段聲明了你要調用的Servlet,而servlet-mapping則是將聲明的servlet"映射"到地址/Test上

    5 .好了,重啟動Tomcat,啟動瀏覽器,輸入http://localhost:8080/myapp/Test 如果看到輸出This is a servlet test.就說明編寫的servlet成功了。

    注意:修改了web.xml以及新加了class,都要重啟Tomcat

    第四步:建立自己的Bean:

    1.用你最熟悉的編輯器(建議使用有語法檢查的java ide)新建一個java程序,文件名為TestBean.java,文件內容如下:

    package test;
    public class TestBean{
    private String name = null;
    public TestBean(String strName_p){
    this.name=strName_p;
    }
    public void setName(String strName_p){
    this.name=strName_p;
    }
    public String getName(){
    return this.name;
    }
    }

    2 .編譯

    將TestBean.java放在c:\test下,使用如下命令編譯:

    C:\Test>javac TestBean.java

    然后在c:\Test下會產生一個編譯后的bean文件:TestBean.class

    3 .將TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下,

    4 .新建一個TestBean.jsp文件,文件內容為:

    <%@ page import="test.TestBean" %>
    <html><body><center>
    <%
    TestBean testBean=new TestBean("This is a test java bean.");
    %>
    Java bean name is: <%=testBean.getName()%>
    </center></body></html>

    5 .好了,重啟Tomcat,啟動瀏覽器,輸入http://localhost:8080/myapp/TestBean.jsp 如果看到輸出Java bean name is: This is a test java bean.就說明編寫的Bean成功了。

    這樣就完成了整個Tomcat下的jsp、servlet和javabean的配置。接下來需要做的事情就是多看書、多讀別人的好代碼,自己多動手寫代碼以增強自己在這方面開發的能力了。

    jvm應填寫到
    c:\j2sdk\bin

    給你一個簡單的配置::::

    JSP環境配置心得

    首先要說的是,使用jdk+tomcat完全可以配置我們的jsp服務器,不再需要其實任何東東,有很多文章介紹了Apache,其實根本用不著,一般的學習調試tomcat完全可以勝任了。

    安裝jdk后,tomcat在安裝之前會自動找到jdk的安裝路徑,一路點擊"下一步",經過一段時間的文件復制,最后"close",完成comcat的安裝。

    您最好去下載一個版本較高的tomcat,比如4.1以上的,因為它不需要設置太多的系統變量,右擊"我的電腦",選擇"屬性"->"高級"->"環境變量"->"系統變量",新建一個TOMCAT_HOME,值設置成你的tomcat所在的路徑,比如:D:\Program Files\Apache Group\Tomcat 5.5,配置完成。

    從開始菜單中找到tomcat選項,一般打開順序是:開始->程序->Apache Tomcat 5.5,選擇"Start Tomcat",讓jsp服務器開始運行,此時會打開一個類似Dos的窗口,會顯示一些相關的信息。

    如果您使用代理上網,一定要先撤掉代理,不然您的jsp程序永遠也得不到執行。如果不是代理的,這一步就跳過了。

    打開瀏覽器,在地址欄中輸入:http://localhost:8080,如果看到有老虎(我也不知道是老虎還是貓)的畫面,恭喜您,您成功了一半。

    先來享受一下成功的喜悅吧,請輸入下面的代碼:

    <html>
    <head>
    <title>First Page</title>
    </head>
    <body>
    <H3>Today is: h
    <%= new java.util.Date() %>
    </H3>
    </body>
    </html>

    將該程序保存為:First.jsp,放到Tomcat的ROOT目錄下,然后在瀏覽器的地址欄中輸入:http://localhost:8080/First.jsp,(First.jsp跟我們保存的文件名的大小寫要一致)回車,如果不出意外,應該可以看到形如Today is: h Fri Apr 11 08:32:38 CST 2003 的結果。

    注意:ROOT是tomcat的默認虛擬目錄,如果要改成自己的虛擬目錄怎么辦呢?請繼續往下看吧。

    要改成自己的虛擬目錄,就要請出server.xml來了,該文件是一個配置文件,在Tomcat\conf目錄下,使用任何文本編輯軟件都能打開它,我們先找到下面一句:

    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
    port="8080" minProcessors="5" maxProcessors="75"
    enableLookups="true" redirectPort="8443"
    acceptCount="100" debug="0" connectionTimeout="20000"
    useURIValidationHack="false" disableUploadTimeout="true" />

    這里的port="8080"就是端口,我們完全可以用別的端口來代替,但不能是被系統占用的端口(0--1023),這里簡單提一下。

    下面我們再往下找,會發現以下的語句:

    </Context>
    </Host>

    我們就應該找到這兩個語句,如果不懂E文,您就認定這兩個語句好了。然后我們將該語句更改如下:

    </Context>
    <Context path="/myjsp" debug="0" docBase="e:/myjsp" reloadable="true">
    </Context>
    </Host>

    這里的path="/myjsp"就是我們就配置的虛擬目錄了,以后在地址欄中輸入http://localhost:8080/myjsp即可。而docBase="e:/myjsp" 則是機器本地路徑,他們通過這個語句形成一個映射關系,其它照抄。

    將上面的First.jsp文件放到e:/myjsp目錄下,輸入http://localhost:8080/myjsp/First.jsp,是不是有一種喜上眉梢的感覺?

    在論壇里我見得最多的就是很多人不知道javaBean文件放到哪里,老實說開始我也不知道,更令人不解的是,十個人有九種不同的說法,這更讓我們茫然。其實這問題也不是我們想像的那么復雜,我們以一個例子說明:

    先建立一個java程序,代碼如下:

    package hall;
    public class SimpleBean {
    private String message = "No message specified";
    public String getMessage() {
    return(message);
    }
    public void setMessage(String message) {
    this.message = message;
    }
    }

    保存為SimpleBean.java,編譯后會生成一個包,其實就相當于一個目錄,也就是SimpleBean.class會存放在hall目錄中,暫且保存起來,將來備用。

    再輸入以下代碼:

    <HTML>
    <HEAD>
    <TITLE>Reusing JavaBeans in JSP</TITLE>
    </HEAD>
    <BODY>
    <CENTER>
    <TABLE BORDER=5>
    <TR><TH CLASS="TITLE">
    Reusing JavaBeans in JSP</TABLE>
    </CENTER>
    <P>
    <jsp:useBean id="test" class="hall.SimpleBean" />
    <jsp:setProperty name="test" property="message" value="Hello WWW" />
    <H1>Message: <I>
    <jsp:getProperty name="test" property="message" />
    </I></H1>
    </BODY>

    保存在我們剛才建立的虛擬目錄e:/myjsp下面,并命名為:BeanTest.jsp。

    現在我們應該將hall(包)目錄放在哪兒呢?別急,我們先在e:/myjsp下建立一個文件夾WEB-INF,然后再在WEB-INF下建立一個classes文件夾,最后將hall目錄放到classes下,當然,hall下的字節碼文件SimpleBean.class也一并要移過來,而SimpleBean.java就和BeanTest.jsp放到同一目錄吧(可以不需要放的,自己試試)。

    重新啟動機器(如果您試了好多次都不行,這一步一定要做),在瀏覽器中輸入:http://localhost:8080/myjsp/BeanTest.jsp,您看到了什么?呵,別告訴我您什么都沒看到,那肯定是您設置的問題了。

    posted @ 2006-09-05 16:41 摩西 閱讀(178) | 評論 (0)編輯 收藏
    ?

    1、JAVA的安裝:

    正常安裝JDK,完成后添加系統變量JAVA_HOME,其值為JDK的根目錄,如C:\J2SDK1.4.2(TOMCAT安裝時使用此變量捕獲JDK)

    2、TOMCAT的安裝:

    A:運行jakarta-tomcat-5.0.12.exe文件,自動捕獲JDK

    B:解壓縮jakarta-tomcat-5.0.12.zip,解壓的過程既是安裝的過程,

    安裝完成后設置系統變量:CATALINA_HOME,它是TOMCAT的安裝目錄,如果沒有進行設置,則在TOMCAT第一次啟動時自動設置

    3、TOMCAT的測試:

    A啟動:如果安裝時是.EXE文件,則會在開始菜單中出現TOMCAT的菜單,如果解壓縮安裝則在安裝目錄的BIN目錄下有STARTUP.BAT

    B關閉:如果安裝時是.EXE文件,則會在開始菜單中出現TOMCAT的菜單,如果解壓縮安裝則在安裝目錄的BIN目錄下有SHUTDOWN.BAT

    C測試:TOMCAT服務器啟動后,瀏覽器中輸入HTTP://LOCALHOST:8080
    若要改變訪問端口號,則在CONF目錄下將SERVER.XML中CONNECTOR元素的PORT屬性值改變即可。

    4、TOMCAT目錄結構

    bin 存放啟動和關閉tomcat腳本

    conf 包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml

    SERVER? 包含3個子目錄classes,lib,webapps
    server/classes? 各種類文件,默認為空
    server/lib?? 存放tomcat服務器所需的各種JAR文件
    server/webapps? 存放tomcat自帶的兩個web應用案例:admin? manager

    common? tomcat服務器以及所有web應用都可以訪問的JAR文件

    shared? 所有web應用都可以訪問的JAR文件

    work 存放jsp編譯后產生的class文件

    logs 存放日志文件

    webapp 存放應用程序示例,以后你要部署的應用程序也要放到此目錄 (重要)

    5、WEB應用程序的目錄結構

    在WEB上發布的J2EE應用程序都有自己特定的目錄結構

    假設創建一名為HELLOAPP的WEB項目

    HELLOAPP:WEB應用根目錄,所有JSP\HTML等文件均存放于此
    HELLOAPP/WEB-INF? 存放WEb應用的發布描述文件web.xml
    HELLOAPP/WEB-INF/classes 存放各種class文件,servlet類文件也存放于此
    HELLOAPP/WEB-INF/lib? 存放WEb應用所需的各種JAR文件

    6、web.xml文件配置
    參見conf目錄下web.xml

    7、server.xml文件配置(重要的配置)

    server port 指定一個端口,這個端口負責監聽關閉tomcat的請求

    shutdown 指定向端口發送的命令字符串

    service name 指定service的名字

    Connector

    (表示客戶端和service之間的連接) port 指定服務器端要創建的端口號,并在這個斷口監聽來自客戶端的請求

    minProcessors 服務器啟動時創建的處理請求的線程數

    maxProcessors 最大可以創建的處理請求的線程數

    enableLookups 如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名,若為false則不進行DNS查詢,而是返回其ip地址

    redirectPort 指定服務器正在處理http請求時收到了一個SSL傳輸請求后重定向的端口號

    acceptCount 指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理

    connectionTimeout 指定超時的時間數(以毫秒為單位)

    Engine

    (表示指定service中的請求處理機,接收和處理來自Connector的請求) defaultHost 指定缺省的處理請求的主機名,它至少與其中的一個host元素的name屬性值是一樣的

    Context

    (表示一個web應用程序,通常為WAR文件,關于WAR的具體信息見servlet規范) docBase 應用程序的路徑或者是WAR文件存放的路徑

    path 表示此web應用程序的url的前綴,這樣請求的url為http://localhost:8080/path/****

    reloadable 這個屬性非常重要,如果為true,則tomcat會自動檢測應用程序的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動裝載新的應用程序,我們可以在不重起tomcat的情況下改變應用程序

    host

    (表示一個虛擬主機)

    name 指定主機名

    appBase 應用程序基本目錄,即存放應用程序的目錄

    unpackWARs 如果為true,則tomcat會自動將WAR文件解壓,否則不解壓,直接從WAR文件中運行應用程序

    Logger

    (表示日志,調試和錯誤信息)

    className 指定logger使用的類名,此類必須實現org.apache.catalina.Logger 接口

    prefix 指定log文件的前綴

    suffix 指定log文件的后綴

    timestamp 如果為true,則log文件名中要加入時間,如下例:localhost_log.2001-10-04.txt

    Realm

    (表示存放用戶名,密碼及role的數據庫)

    className 指定Realm使用的類名,此類必須實現org.apache.catalina.Realm接口

    Valve

    (功能與Logger差不多,其prefix和suffix屬性解釋和Logger 中的一樣)

    className 指定Valve使用的類名,如用org.apache.catalina.valves.AccessLogValve類可以記錄應用程序的訪問信息

    directory 指定log文件存放的位置

    pattern 有兩個值,common方式記錄遠程主機名或ip地址,用戶名,日期,第一行請求的字符串,HTTP響應代碼,發送的字節數。combined方式比common方式記錄的值更多

    ?

    在以上的設置項目中Context是最重要也是使用最頻繁的元素,他代表了運行在主機上的每個web應用。一個主機上可以用 多個web應用,每個web應用對應一個唯一的地址,而地址在Context元素的path屬性中設置

    path:訪問web程序的url入口
    docbase:制定web程序的路徑,如果web應用是開放目錄結構,則為根目錄,若為war文件則為war文件的路徑

    例如:
    <Context path="/helloapp" docbase="helloapp" reloadable="true"/>

    當設置jsp文件時,只需把文件放到web應用根目錄下即可訪問,而設置servlet還要在web.xml中設置



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=813657

    posted @ 2006-09-05 12:06 摩西 閱讀(491) | 評論 (0)編輯 收藏
         摘要: 一、Tomcat背景   自從JSP發布之后,推出了各式各樣的JSP引擎。Apache Group在完成GNUJSP1.0的開發以后,開始考慮在SUN的JSWDK基礎上開發一個可以直接提供Web服務的JSP服務器,當然同時也支持Servlet, 這樣Tomcat就誕生了。 Tomcat是ja...  閱讀全文
    posted @ 2006-09-05 12:04 摩西 閱讀(201) | 評論 (0)編輯 收藏

    1.one page:? action_demo.html

    <html>
    <head></head>
    <body>
    <form? name="input" action="html_form_action.html" method="get">
    Usename:
    <input type="text" name="user" value="admin"><input type="submit" value="Submit">
    </form>
    </body>
    </html>

    2.two page:? html_from_action.html

    <html>
    <head></head>
    <script language="javascript">
    function getparastr(strname)
    ? {
    ?? var hrefstr,pos,parastr,para,tempstr;
    ?? hrefstr = window.location.href;
    ?? pos = hrefstr.indexOf("?")
    ?? parastr = hrefstr.substring(pos+1);
    ?? para = parastr.split("&");
    ?? tempstr="";
    ?? for(i=0;i<para.length;i++)
    ?? {
    ??? tempstr = para[i];
    ??? pos = tempstr.indexOf("=");
    ??? if(tempstr.substring(0,pos) == strname)
    ??? {
    ???? return tempstr.substring(pos+1);
    ???? }
    ?? }
    ?? return null;
    ? }
    // 獲取program參數
    //var userstr = getparastr("user");
    //document.write(userstr);

    //用得到的值給form中的文本框賦值?
    function getname()
    {
    var userstr = getparastr("user");
    document.fr1.input.value=userstr;
    }

    </script>
    <body>
    <form name="fr1" >
    你的名字是:
    <input type="text" name="input" >
    <input type="button" name="bt1" value="查看用戶名" onclick="getname()">
    </form>
    </body>
    </html>

    posted @ 2006-09-05 10:18 摩西 閱讀(5030) | 評論 (1)編輯 收藏
    XML相關資源?


    一.?XML的大本營?

    XML是由W3C(World?Wide?Web?Consortium)國際組織負責開發和制定標準的。關于XML最權威,最新的消息都來自W3C。網址是:http://w3c.org/XML/ ?


    另外一個名為OASIS的前著名的SGML研究組織也在一起推動XML的發展,網址是:http://www.oasis-open.org/ ?


    二.?XML指南?

    http://www.w3.org/TR/REC-xml ?

    W3C關于XML規范的詳細,完整的說明。不用多說,絕對權威。?


    http://www.xml.com/axml/testaxml.htm ?

    這是Tim?Bary寫的XML規范說明書,非常的詳細和嚴密,是學習XML規范的好幫手。?


    三.?XML常見問題?


    Peter?Flynn的?XML?FAQ?

    http://www.ucc.ie/xml/ ?

    包含大量詳細的資料,經常更新,由W3C協會XML組維護。?


    Lisa?Rein’s?finetuning?XML?FAQs?

    http://www.finetuning.com/faq.html ?

    這個FAQ列表有側重點,主要包含XSLT?FAQ,XPath?FAQ和IE5中的XSL?FAQ。?


    Dave?Pawson’s?XSL?FAQ?

    http://www.dpawson.co.uk/xsl/idx.html ?

    提供最好的關于XSL方面的FAQ,創建于1999年。?


    jGuru’s?Extensible?Markup?Language?(XML)?FAQ?

    http://www.jguru.com/jguru/faq/faqpage.jsp?name=XML ?

    這個FAQ列表是一個典型的"老百曉",任何問題,從普通的到非常細節的XML問題都可以在這里找到。?


    Ronald?Bourret’s?XML?Namespaces?FAQ?

    http://www.informatik.tu-darmstadt.de/DVS1/staff/bourret/xml/ ?
    NamespacesFAQ.htm?

    創建于2000初,是關于namespaces概要的FAQ。?

    四.?XML主題網站?


    http://www.xml.com/ ?

    一個以XML為主題的內容豐富的網站?


    http://www.xml-zone.com/ ?

    另一個比較知名的XML網站,提供XML的新聞和資訊。?


    http://www.xmlinfo.com/ ?

    網站創建者James?Tauber’s是W3C組織XML發展組的成員之一,他的網站提供了大量的連接和例子。?


    http://www.simonstl.com/ ?

    網站創建者Simon?St.?Laurent也是XML發展組的成員。他是W3C中XML初級入門教程的作者,他的站點主要提供有關XML的發展信息。?


    http://msdn.microsoft.com/xml/c-frame.htm#/xml/default.asp ?

    微軟的MSDN關于XML的主題網站。微軟在推進XML應用方面不遺余力。?


    http://www.xmlsoftware.com/ ?

    是XML?info的姐妹網站,內容包括XML/DTD/XSL編輯軟件,XML?API軟件等。?


    http://xmlhack.com/ ?

    1999年9月建立的大型XML新聞網站,同時提供XML人才信息。?


    http://xml.apache.org/ ?

    Apache軟件基金會(ASF),提供了大量open?source的XML和XSL的工具軟件。?


    http://www.biztalk.org/ ?

    BizTalk是微軟發起的以XML商業應用為目標的組織。BizTalk不是一個標準組織。?


    五.?XML的編輯軟件?


    目前XML文檔的編輯軟件依然很少。雖然我們可以手工編寫,但是如果有一個好的軟件(類似用DW/FP編寫HTML),可以減少差錯和提高效率。下面是現有的一些編輯軟件。?


    http://www.macromedia.com/software/dreamweaver/ ?

    Macromedia最新的Dreamweaver?4.0已經支持XML文檔的編寫。推薦使用。?


    http://www.microsoft.com/xml/notepad/intro.asp ?

    微軟在這方面向來不會落后,它推出的XML?Notepad是一個非常小巧靈活的XML文檔編輯器。推薦使用。?


    http://www.adobe.com/prodindex/framemaker/prodinfosgml.html ?

    Adobe公司的Framemaker?plus是目前較好的XML編輯軟件。?


    http://www.arbortext.com/ ?

    Arbortext公司是重點開發XML游戲的公司。?


    http://www.inso.com/ ?

    Inso,好象是用來處理大型SGML或者XML文檔的軟件。?


    http://www.softquad.com/ ?

    Softquad?是HTML和SGML軟件的開發商,對XML自然不會放過。?

    六.?支持XML的瀏覽器?


    http://www.microsoft.com/windows/ie/ ?

    IE?5.X是目前流行瀏覽器唯一支持XML的,它可以在微軟的網站免費下載到。?


    http://developer.netscape.com/software/communicator/ngl/ ?
    index.html?cp=dev09fg01?

    Gecko是另一種支持XML的瀏覽器,但目前只是測試版。?


    七.?XML?parser?


    Parser是一個檢查XML文檔語法是否符合DTD定義,并進行解析的軟件。?


    在線的parser?


    http://validator.w3.org/ ?

    W3C組織提供的一個在線paeser。可以根據你在線提交的XML文檔URL,進行驗證和解吸。?


    http://www.stg.brown.edu/service/xmlvalid/ ?

    一個Brown大學科技小組提供的parser,非常方便和容易理解。。?


    可下載的Parser?

    有很多可以下載到本機上運行的parser,下面列出一些主要的:?


    http://www.jclark.com/xml/expat.html ?

    James?Clark是在SGML/XML領域的元老,他寫的parser被廣泛的運用。?


    http://www.alphaworks.ibm.com/tech/xml ?

    一個以Java語言編寫的Parser,來自IBM。?


    http://www.microsoft.com/xml/parser/cparser.asp ?

    微軟的XML?Parser,用C++寫成。?


    http://www.stud.ifi.uio.no/~larsga/download/python/xml/xmlproc.html ?

    用Python寫的parser。?


    http://www.jeremie.com/Dev/XML/ ?

    用javascript寫的parser,只用來檢查語法,不進行解吸析。?


    http://w3c.org/RDF/Implementations/SiRPAC/ ?

    來自W3C組織的SiRPAC,全稱是Simple?RDF?Parser?and?Compiler。?


    八.?Schema編輯軟件?


    Schema我們前面介紹過,DTD就是一種Schema,我們可以手工寫DTD,但現在已經有一些Schema編輯軟件來幫助我們更方便的建立DTD。?


    http://www.extensibility.com/ ?

    Extensibility這個軟件被稱為XML權威。可以以圖形化方式建立和編輯schema,包括DTD文件。?


    九.?國內XML資源?

    http://www.xml.net.cn/ ?

    XML中國論壇是一個非贏利的學術網站。由北京大學計算機科學與技術研究所創辦,北大方正集團公司提供贊助。?


    http://www.xml.org.cn:8188 ?

    中國XML聯盟將建立為國內第一個開放性網絡標準組織,提供XML技術認證、咨詢和交流。由上海易方公司贊助。?


    http://www.xml.com.cn/ ?

    chinaasp.com的子站,提供XML文章和技術交流等。?


    http://www.egroups.com/group/china_xml_list/info.html ?

    中國XML郵件組包括中文XML資源,?XML的最新資料,同行的交流空間。由非盈利性組織中國XML聯盟負責維護。?


    http://weblab.crema.unimi.it/xmlzh/XML_FAQ.htm ?

    一個XML?FAQ郵件列表的中文翻譯,可惜是1998年10月的?
    posted @ 2006-09-03 17:33 摩西 閱讀(248) | 評論 (0)編輯 收藏
    1.傳遞表單參數:
    String name = new String(request.getParameter("name"));

    2.數據庫連接:
    ~~MYSQL
    //設置數據庫的URL
    String url = "jdbc:mysql://localhost:3306/jspsky";
    try
    //加載驅動程序
    Class.forname("org.gjt.mm.mysql.Driver").newInstance();
    //建立連接
    java.sql.Connection connection = java.sql.DriverManager.getConnection(url);
    java.sql.Statement statement = connection.createStatement();
    //SQL語句
    String sqlStringi ="insert into commu(name,tel,mobile,oicq,email)values(‘"+name+"',‘"+tel+"',‘"+mobile+"',‘"+oicq+"',‘"+email+"')";
    //運行SQL語句,并建立結果集
    java.sql.ResultSet rsi = statement.executeQuery(sqlStringi);
    //在屏幕上輸出庫中的內容
    while(rss.next())
    {
    String a_name = rss.getString(1);
    out.println(a_name);
    {}
    //關閉連接
    connection.close();
    }

    //捕捉異常
    catch(java.sql.SQLException e)

    out.println(e.getMessage());
    {}
    catch(ClassNotFoundException e)

    out.println(e.getMessage());
    {}


    ~~DB2
    //定義數據庫的URL
    String url = "jdbc:db2:portal";
    try

    //加載驅動程序
    Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
    //建立連接,
    java.sql.Connection connection = java.sql.DriverManager.getConnection(url,"user","password");
    java.sql.Statement statement = connection.createStatement();
    //SQL語句
    String sqlString = "select * from client";
    //執行SQL語句
    java.sql.ResultSet rs = statement.executeQuery(sqlString);
    //在屏幕上顯示所連表中的內容
    while(rs.next())
    {
    String name = rs.getString(1);
    out.println(name);
    {}
    //關閉連接
    connection.close();
    }
    //捕捉異常
    catch(java.sql.SQLException e)

    out.println(e.getMessage());
    {}
    catch(ClassNotFoundException e)

    out.println(e.getMessage());
    {}


    3.文件操作

    ~~將一個字符串寫到一個指定的文件中,如果該文件不存在,則新建一個文件,并完成寫入;如果存在,則用此字符串覆蓋原文件的所有內容
    import java.io.*;
    String str = "print me 雪峰!";
    //定義好打印的目標文件名

    //取得當前主機存放WEB頁面的絕對路徑
    String hostdir = System.getProperty("user.dir");
    //取得當前主機所采用的路徑分隔符
    String fileBar = System.getProperty("file.separator");
    //書寫完整的目標文件存放路徑
    String nameOfFile=hostdir+fileBar+"test.html";

    try
    //實例化一個文件輸出流對象
    FileOutputStream afile = new FileOutputStream(nameOfFile);
    //將文件輸出流,創建一個打印輸出流對象
    PrintWriter pw = new PrintWriter(afile);
    pw.println(str);
    //clean up
    pw.close();
    {}
    catch(IOException e)
    out.println(e.getMessage());
    {}

    ~~列出指定目錄下的文件列表
    import java.io.*;
    String cdur = System.getProperty("user.dir");
    String fileBar = System.getProperty("file.separator");
    String mydir =cdur+fileBar+"doc"+fileBar+"jspsky";
    File my = new File(mydir);
    String d[] = my.list();
    int i;
    int l=d.length;
    for(i=0;i out.print(d);
    {}


    4.計數器
    Integer count = null;
    synchronized (application)
    count =(Integer) application.getAttribute("d");
    if (count ==null)
    count =new Integer("0");
    count = new Integer(count.intValue()+1);
    application.setAttribute("d",count);
    {}
    out.println(count);
    // 首先定義一個整形對象,并初始化為:NULL,
    // 取回APPLICATION對像的屬性D的值,并強制轉化為整形對象,賦給COUNT
    // 判斷COUNT是否為空,為空時,將O賦給COUNT對象,
    // 否則,通過COUNT。INTVALUE()方法,實現COUNT對象加1,并賦值給COUNT
    // 最后,將COUNT對象保存在APPLICATION對象的D變量中。
    posted @ 2006-09-01 10:16 摩西 閱讀(181) | 評論 (0)編輯 收藏

    來自: Matrix ?: http://www.matrix.org.cn/resource/article/43/43811.html
    你需要精通面向對象分析與設計(OOA/OOD)、涉及模式(GOF,J2EEDP)以及綜合模式。你應該十分了解UML,尤其是class,object,interaction以及state diagrams.

    你需要學習JAVA語言的基礎知識以及它的核心類庫(collections,serialization,streams,networking,multithreading,reflection,event,handling,NIO,localization,以及其他)。

    你應該了解JVM,class loaders,class reflect,以及垃圾回收的基本工作機制等。你應該有能力反編譯一個類文件并且明白一些基本的匯編指令。

    如果你將要寫客戶端程序,你需要學習WEB的小應用程序(applet),必需掌握GUI設計的思想和方法,以及桌面程序的SWING,AWT,SWT。你還應該對UI部件的JAVABEAN組件模式有所了解。JAVABEANS也被應用在JSP中以把業務邏輯從表現層中分離出來。

    你需要學習java數據庫技術,如JDBC API并且會使用至少一種persistence/ORM構架,例如Hibernate, JDO, CocoBase, TopLink,Inside Liberator(國產JDO 紅工廠軟件)或者iBatis。你還應該了解對象關系的阻抗失配的含義,以及它是如何影響業務對象的與關系型數據庫的交互,和它的運行結果,還需要掌握不同的數據庫產品運用,比如: oracle,mysql,ms sql server.

    你需要學習JAVA的沙盒安全模式(class loaders, byte code verification, managers, policy and permissions, code signing, digital signatures, cryptography, certification, Kerberos,以及其他)還有不同的安全/認證API,例如JAAS( Java Authentication and Authorization Service), JCE (Java Cryptography Extension), JSSE (Java Secure Socket Extension), 以及 JGSS (Java General Security Service).

    你需要學習Servlets, JSP, 以及JSTL(Standard Tag Libraries)和可以選擇的第三方Tag Libraries。

    你需要熟悉主流的網頁框架,例如JSF, Struts, Tapestry, Cocoon, WebWork, 以及他們下面的涉及模式,如MVC/MODEL2.

    你需要學習如何使用及管理WEB服務器,例如tomcat,resin,Jrun,并且知道如何在其基礎上擴展和維護WEB程序。

    你需要學習分布式對象以及遠程API,例如RMI和RMI/IIOP。

    你需要掌握各種流行中間件技術標準和與java結合實現,比如Tuxedo、CROBA,當然也包括java EE 本身.

    你需要學習最少一種的XML API,例如JAXP (Java API for XML Processing), JDOM (Java for XML Document Object Model), DOM4J, 或 JAXR (Java API for XML Registries).

    你應該學習如何利用JAVA API和工具來構建Web Service。例如JAX-RPC (Java API for XML/RPC), SAAJ (SOAP with Attachments API for Java), JAXB (Java Architecture for XML Binding), JAXM (Java API for XML Messaging), JAXR (Java API for XML Registries), 或者 JWSDP (Java Web Services Developer Pack)。

    你需要學習一門輕量級應用程序框架,例如Spring, PicoContainer, Avalon, 以及它們的IoC/DI 風格(setter, constructor, interface injection)。

    你需要熟悉不同的J2EE技術,例如JNDI (Java Naming and Directory Interface), JMS (Java Message Service), JTA/JTS (Java Transaction API/Java Transaction Service), JMX (Java Management eXtensions), 以及 JavaMail.

    你需要學習企業級Java Beans(EJB)以及它們的不同組件模式:Stateless/Stateful Session Beans, Entity Beans (包含Bean-Managed Persistence [BMP] 或者 Container-Managed Persistence [CMP] 和它的 EJB-QL), 或者Message-Driven Beans (MDB).

    你需要學習如何管理與配置一個J2EE應用程序服務器,如WebLogic ,JBoss等,并且利用它的附加服務,例如簇類,連接池以及分布式處理支援。你還需要了解如何在它上面封裝和配置應用程序并且能夠監控、調整它的性能。

    你需要熟悉面向方面的程序設計以及面向屬性的程序設計(這兩個都被很容易混淆的縮寫為AOP),以及他們的主流JAVA規格和執行。例如AspectJ 和AspectWerkz。

    你需要熟悉對不同有用的API和framework等來為你服務。例如Log4J (logging/tracing), Quartz (scheduling), JGroups (network group communication), JCache (distributed caching), Lucene (full-text search), Jakarta Commons等等。


    如果你將要對接或者正和舊的系統或者本地平臺,你需要學習JNI (Java Native Interface) and JCA (Java Connector Architecture).

    你需要熟悉JINI技術以及與它相關的分布式系統,比如掌握CROBA。

    你需要Java Community Process(JCP)以及他的不同Java Specification Requests (JSRs), 例如 Portlets (168), JOLAP (69), Data Mining API (73), 等等。

    你應該熟練掌握一種JAVA IDE例如sunOne ,netBeans ,IntelliJ IDEA或者Eclipse。(有些人更喜歡VI或EMACS來編寫文件。隨便你用什么了:))

    JAVA(精確的說是有些配置)是冗長的,它需要很多的人工代碼(例如EJB),所以你需要熟悉代碼生成工具,例如XDoclet。

    你需要熟悉一種單元測試體系(JNunit),并且學習不同的生成、部署工具(Ant, Maven)。

    你需要熟悉一些在JAVA開發中經常用到的軟件工程過程。例如RUP (Rational Unified Process) and Agile methodologies.

    你需要能夠深入了解加熟練操作和配置不同的操作系統,比如GNU/linux ,sun solaris,mac OS等,做為跨平臺軟件的開發者。

    你還需要緊跟java發展的步伐,比如現在可以深入的學習java ME ,以及各種java 新規范,技術的運用,如 新起的web富客戶端技術。

    你必需要對open source有所了解,因為至少java 的很多技術直接是靠開源來驅動發展的 ,如 java 3D技術。

    posted @ 2006-09-01 10:14 摩西 閱讀(196) | 評論 (0)編輯 收藏

    <!DOCTYPE html PUBliC "-//W3C//DTD XHTML 1.0 Transitional//EN"

    "<html xmlns="<head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>css菜單演示</title>


    <style type="text/css">
    <!--

    *{margin:0;padding:0;border:0;}
    body {
    ??? font-family: arial, 宋體, serif;
    ??????? font-size:12px;
    }


    #nav {
    ???? line-height: 24px;? list-style-type: none; background:#666;
    }

    #nav a {
    ??? display: block; width: 80px; text-align:center;
    }

    #nav a:link? {
    ??? color:#666; text-decoration:none;
    }
    #nav a:visited? {
    ??? color:#666;text-decoration:none;
    }
    #nav a:hover? {
    ??? color:#FFF;text-decoration:none;font-weight:bold;
    }

    #nav li {
    ??? float: left; width: 80px; background:#CCC;
    }
    #nav li a:hover{
    ??? background:#999;
    }
    #nav li ul {
    ??? line-height: 27px;? list-style-type: none;text-align:left;
    ??? left: -999em; width: 180px; position: absolute;
    }
    #nav li ul li{
    ??? float: left; width: 180px;
    ??? background: #F6F6F6;
    }


    #nav li ul a{
    ??? display: block; width: 156px;text-align:left;padding-left:24px;
    }

    #nav li ul a:link? {
    ??? color:#666; text-decoration:none;
    }
    #nav li ul a:visited? {
    ??? color:#666;text-decoration:none;
    }
    #nav li ul a:hover? {
    ??? color:#F3F3F3;text-decoration:none;font-weight:normal;
    ??? background:#C00;
    }

    #nav li:hover ul {
    ??? left: auto;
    }
    #nav li.sfhover ul {
    ??? left: auto;
    }
    #content {
    ??? clear: left;
    }


    -->
    </style>

    <script type=text/javascript><!--//--><![CDATA[//><!--
    function menuFix() {
    ??? var sfEls = document.getElementById("nav").getElementsByTagName("li");
    ??? for (var i=0; i<sfEls.length; i++) {
    ??????? sfEls[i].onmouseover=function() {
    ??????? this.className+=(this.className.length>0? " ": "") + "sfhover";
    ??????? }
    ??????? sfEls[i].onMouseDown=function() {
    ??????? this.className+=(this.className.length>0? " ": "") + "sfhover";
    ??????? }
    ??????? sfEls[i].onMouseUp=function() {
    ??????? this.className+=(this.className.length>0? " ": "") + "sfhover";
    ??????? }
    ??????? sfEls[i].onmouseout=function() {
    ??????? this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"),

    "");
    ??????? }
    ??? }
    }
    window.onload=menuFix;

    //--><!]]></script>

    </head>
    <body>


    <ul id="nav">
    <li><a href="#">產品介紹</a>
    ??? <ul>
    ??? <li><a href="#">產品一</a></li>
    ??? <li><a href="#">產品一</a></li>
    ??? <li><a href="#">產品一</a></li>
    ??? <li><a href="#">產品一</a></li>
    ??? <li><a href="#">產品一</a></li>
    ??? <li><a href="#">產品一</a></li>
    ??? </ul>
    </li>
    <li><a href="#">服務介紹</a>
    ??? <ul>
    ??? <li><a href="#">服務二</a></li>
    ??? <li><a href="#">服務二</a></li>
    ??? <li><a href="#">服務二</a></li>
    ??? <li><a href="#">服務二服務二</a></li>
    ??? <li><a href="#">服務二服務二服務二</a></li>
    ??? <li><a href="#">服務二</a></li>
    ??? </ul>
    </li>
    <li><a href="#">成功案例</a>
    ??? <ul>
    ??? <li><a href="#">案例三</a></li>
    ??? <li><a href="#">案例</a></li>
    ??? <li><a href="#">案例三案例三</a></li>
    ??? <li><a href="#">案例三案例三案例三</a></li>
    ??? </ul>
    </li>
    <li><a href="#">關于我們</a>
    ??? <ul>
    ??? <li><a href="#">我們四</a></li>
    ??? <li><a href="#">我們四</a></li>
    ??? <li><a href="#">我們四</a></li>
    ??? <li><a href="#">我們四111</a></li>
    ??? </ul>
    </li>

    <li><a href="#">在線演示</a>
    ??? <ul>
    ??? <li><a href="#">演示</a></li>
    ??? <li><a href="#">演示</a></li>
    ??? <li><a href="#">演示</a></li>
    ??? <li><a href="#">演示演示演示</a></li>
    ??? <li><a href="#">演示演示演示</a></li>
    ??? <li><a href="#">演示演示</a></li>
    ??? <li><a href="#">演示演示演示</a></li>
    ??? <li><a href="#">演示演示演示演示演示</a></li>
    ??? </ul>
    </li>
    <li><a href="#">聯系我們</a>
    ??? <ul>
    ??? <li><a href="#">聯系聯系聯系聯系聯系</a></li>
    ??? <li><a href="#">聯系聯系聯系</a></li>
    ??? <li><a href="#">聯系</a></li>
    ??? <li><a href="#">聯系聯系</a></li>
    ??? <li><a href="#">聯系聯系</a></li>
    ??? <li><a href="#">聯系聯系聯系</a></li>
    ??? <li><a href="#">聯系聯系聯系</a></li>
    ??? </ul>
    </li>

    </ul>

    </body>
    </html>

    ?簡介

    Jakarta-StrutsApache軟件組織提供的一項開放源代碼項目,它為Java Web應用提供了模型-視圖-控制器(MVC)框架,尤其適用于開發大型可擴展的Web應用. StrutsWeb應用提供了一個通用的框架,使得開發人員可以把精力集中在如何解決實際業務問題上. 此外,Struts框架提供了許多可供擴展和定制的地方使得應用程序可以方便的擴展框架,來更好的適應用戶的實際需求.

    本文是一篇介紹利用MyEclipse進行Struts開發的基礎教程,通過詳細的描述和大量的圖片來展現Struts開發的具體過程. 這里所采用的是我們經常會遇到的用戶登陸的實例,如果用戶登陸成功進入程序的主界面(main.jsp),否則返回登陸頁面并提示錯誤信息.

    n??????? 創建Web項目

    在菜單中依次點擊FileNewProject,然后在彈出的窗口中選擇J2EEWeb Project,啟動Web項目創建向導。

    點擊下一步,在項目名稱中,我們輸入StrutsDemo,然后修改Context root URL/hello,其他我們使用默認的設置,最后點擊Finish按鈕完成創建工作.

    在項目創建后,我們需要讓它支持Struts功能. 在菜單中選擇MyEclipseAdd Struts Capabilities. 在彈出的對話框中, Struts specification修改為1.2,Base package for new classes修改為我們喜歡的包名,com.study.struts,修改完成后點擊Finish按鈕.

    Package Explore,我們可以看到增加了Struts能力后,MyEclipseWeb項目中增加了很多jar文件和tld文件,請參考下圖:

    n??????? 創建JSP文件

    在我們的登陸程序中一共需要兩個JSP文件. 一個是index.jsp,作為用戶登陸的界面和登陸失敗后的返回界面. 一個是main.jsp,作為登陸成功后的主界面.

    Package Explore中雙擊struts-config.xml將其打開,在源代碼窗口中點擊左側工具欄中的

    ,在彈出的JSP文件創建向導中修改文件名為index.jsp,選擇5]Standard JSP using Struts 1.2 with a form模板,然后點擊Finish按鈕. MyEclipse會為我們創建一個名為index.jsp的帶一個FormJSP文件.

    按照同樣的方法創建main.jsp. 由于我們只是簡單的在主界面中顯示成功登陸的信息,因此在創建的時候,我們選擇的是第一個缺省的模板.

    JSP文件創建后,我們可以根據自己的需要來修改其中的內容. 對于index.jsp,我們修改Formaction屬性和提交參數的名字, 并增加了標簽,可參考下面的代碼:

    ??? <html:form action="/login.do" method="post" focus="login">

    ????? <center><html:errors/>center>

    ????? <table border="0">

    ??????? <tr>

    ????????? <td>Name:td>

    ????????? <td><html:text property="name" />td>

    ??????? tr>

    ??????? <tr>

    ????????? <td>Password:td>

    ????????? <td><html:password property="password" />td>

    ??????? tr>

    ??????? <tr>

    ????????? <td colspan="2" align="center"><html:submit />td>

    ??????? tr>

    ????? table>

    html:form>

    ?????? 對于main.jsp,我們修改中的輸出信息,提示用戶登陸成功,代碼如下:

    ? ? <body>

    ?? ???? ?You have logged in!<br>

    ? ? body>

    ?????? 保存兩個JSP文件和struts-config.xml文件.

    n??????? 創建ActionForm

    在我們的登陸程序中需要用戶提交用戶名和密碼,因此我們需要創建一個ActionForm Bean來保存提交的HTML表單數據.

    將源代碼窗口中的標簽切換到struts-config.xml,右上角的Outline窗口內容如下:

    選中其中的form-beans,右鍵單擊,在彈出的菜單中選擇New Form. Form Bean創建向導對話框中,輸入Use case的名字login,然后在下方的Form Properties中增加namepassword兩個屬性.

    ?

    n??????? 創建Action

    ?????? 在完成上面的創建后,我們接下來創建Action. 在源代碼窗口中切換到struts-config.xml文件,點擊左側工具欄中的.?在彈出的創建向導中輸入Use case名字為Login.

    ?????? 在對話框的下部Optional Details,點擊Name行末的Browse按鈕,選中我們剛才創建的loginForm.

    點擊Input Source行末的Browse按鈕,在彈出的對話框中選中index.jsp.

    Optional Details標簽切換到Forwards,點擊Add按鈕增加一個局部的Forward.

    這里的success是我們給Forward的名字,你也可以使用其它你喜歡的名字. 增加后如下:

    完成新建Action的設置后如下圖:

    點擊Finish按鈕后,MyEclipse會為我們創建一個名叫LoginAction.java的文件,我們可以根據自己的需要來實現具體的驗證邏輯. 這里,我們僅僅通過登陸的名字是否為hello來判斷. 如果不是提示登陸失敗. 代碼參考如下:??

    ????????????? ActionMessages errors=new ActionMessages();

    ?????????????

    ????????????? LoginForm loginForm = (LoginForm) form;???????

    ????????????? String username=loginForm.getName();

    ?????????????

    ????????????? if(username.equals("hello")) {

    ???????????????????? return mapping.findForward("success");

    ????????????? } else {

    ???????????????????? errors.add("username",new ActionMessage("error.msg"));

    ???????????????????? saveErrors(request,errors);

    ???????????????????? return (new ActionForward(mapping.getInput()));

    ????????????? }

    從上面的代碼中我們可以看到,當用戶登陸失敗后會使用一個鍵值為error.msgActionMessage. 因此,我們在Package Explore中找到ApplicationResources.properties文件并雙擊打開,輸入以下內容并保存.

    error.msg=Login Failed

    在完成了上述所有的工作后,我們可以看到圖示化的struts-config.xml如下:

    n??????? 部署和測試應用程序

    這里StrutsDemo的部署同其他的Web應用程序一樣,我們就不在贅述了,具體的方法可以參閱MyEclipse系列文章的第二篇Web項目的開發.

    部署成功后,IE的地址欄中輸入http://localhost:8080/hello/index.jsp并回車.

    我們首先驗證登陸失敗的場景. 當我們輸入的用戶名不是hello,應返回到登陸頁面并提示登陸失敗. Name中輸入abcd,點擊Submit按鈕.

    我們可以看到又回到了登陸頁面,并且出現了Login Failed的提示信息. 修改用戶名為hello,然后點擊Submit按鈕.

    .

    posted @ 2006-08-29 13:27 摩西 閱讀(587) | 評論 (0)編輯 收藏

    ?????? 以一個很簡單的 Web 應用來說明使用 MyEclipse 的 Web 服務器配置,應用部署和調試過程。??????
    ? 一、準備開發工具???????
    ???????? 這里使用 Eclipse 3.1.2 和 MyEclipse4.1.1 ,當然 Java 通常都是用來開發網絡應用的,那么 Web 服務器也就少不了了,這里使用tomcat5.0版本,當然如果你沒有 J2SDK 那么所有的程序都沒法編譯運行了,所以,你也去準備一個吧,這里使用 J2SDK 1.5.0_06-b05 ,上,就無所謂,我們就可以使用所有的功能。??????????????
    下載地址:???????
    http://www.inspiresky.com/bbs/dispbbs.asp?boardID=13&ID=6356&page=1 ?????? http://www.inspiresky.com/bbs/dispbbs.asp?boardID=13&ID=3889&page=1 ?????? http://java.sun.com ?????? http://www.eclipse.org ?????? http://www.apache.org
    http://www.myeclipseide.com/ContentExpress-display-ceid-10.html??????
    里面有 MyEclipse 的注冊碼,這里提供的僅供個人學習研究使用,公司用戶請自行購買序列號。???????
    二、軟件的安裝和注冊??????????????
    ????? 首先要安裝 JDK ,我這里使用默認安裝,目錄所有的都不改變, C:\Program Files\Java ,下面有兩個文件夾,一個是 jdk ,一徑之類的,請去網上查找相關資料吧,那個很多文章講了。
    ??????? Tomcat 的安裝,我們使用 Exe 版本的安裝文件,除了選擇目錄外,其他的都默認好了,這里安裝到 D:\Tomcat5.5 ,注意中間為有時候有空格會很麻煩。
    ??????? Eclipse 的安裝比較方便,直接解包就行了,然后把解開的文件 Eclipse 文件夾放置到適當的安裝目錄,如這里是 D:/eclipse 。 pse.exe 文件,啟動 Eclipse ,設置 JDK 和工作路徑后就可以看到 Eclipse 的歡迎頁面了。這里我們不使用 Eclipse ,所以,把它關閉 ?????? ?????? MyEclipse 是一個 Exe 安裝文件,有安裝向導,直接雙擊安裝,選擇完 Eclipse 安裝目錄 D:/eclipse 和自身的安裝目錄,這里使用 pse ,然后一路 next 就行了。 ?????? ?????? 我們在程序組中可以找到 MyEclipse 程序組,點擊打開,如果你沒有默認的工作路徑,選擇一個工作路徑后,會看到集成 e 的典型界面。 ?????? 最后需要輸入 MyEclipse 的注冊碼,打開菜單 window->preferences ,在對話框的菜單樹中打開 MyEclipse->Subscription 項, n … 按鈕,然后輸入注冊用戶名和密碼即可。 ?????? OK ,到這里所有需要的軟件都安裝好了,下面我們來創建一個簡單的工程來說明 MyEclipse 的應用。
    ?????? 三、創建 Web 工程
    ????? 由于這里只講解 MyEclipse 的基本操作和設置,所以,就不做很復雜的項目了,完全可以觸類旁通的。
    ??????? 打開 MyEclipse 開發界面, File->New->Projects … ,打開新建項目對話框,選中 MyEclipse->J2EE Projects->Web Project ,點 Project Details 的 Projects Name 中輸入 WebTest ,其他采用默認值,注意這里的 Context root URL 為 /WebTest ,否則,你就要在 IE 才能使用了。注意這里的最下面有是否加入標簽庫支持,我們選擇 JSTL1.1 。然后,點擊 Finish 按鈕完成項目創建。
    ??????? 我們察看我們新建的工程,需要的類都已經自動加載了進來,還有一個 J2EE 的類環境變量,這就是使用 MyEclipse 的方便之?
    ?????? 四、新建 Hello 類 ?????? 選中工程項目 WebTest 下的 src 文件夾(注意是在 Package Explorer 下,如果這個找不到,去找 Eclipse 使用指南看吧, Window kage Explorer ),右鍵菜單 New->Package ,新建一個包 com.inspiresky.bean 。選中新建的包,右鍵菜單 New ->Class , Name 中輸 static void main 選項,其他全部默認,點擊 Finish 按鈕完成類的創建。

    編輯類的代碼,如下所示:
    ?package com.inspiresky.bean;
    /* * Junsan * http://www.inspiresky.com/bbs */
    public class Hello
    { private String message = "Hello World";
    /** * @return Returns the message. */
    public String getMessage()
    { ????????return message; }
    /** * @param message The message to set. */
    public void setMessage(String message)
    { ????????this.message = message; } }???????
    ??????? 注意這里 Bean 屬性的操作方法,可以先定義好屬性,然后,在編輯窗口右鍵菜單 Source->Generate Getters and Setters 框中選擇要生成 get 和 set 方法的屬性確定就可以了
    ?????? 五、創建 JSP 頁面
    ??????? 在 WebTest 工程中,選中 WebRoot 文件夾,右鍵菜單 New->JSP , File Name 修改為 index.jsp ,其他默認,點擊 Finish 按
    ??????? 編輯 JSP 文件的內容如下:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <jsp:useBean id="hello" class="com.inspiresky.bean.Hello" scope="page"/>
    <jsp:setProperty name="hello" property="message" value="Hello World!"/>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    ? <head>
    ??? <base href="<%=basePath%>">
    ???
    ??? <title>My JSP 'index.jsp' starting page</title>
    ???
    ?<meta http-equiv="pragma" content="no-cache">
    ?<meta http-equiv="cache-control" content="no-cache">
    ?<meta http-equiv="expires" content="0">???
    ?<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    ?<meta http-equiv="description" content="This is my page">
    ?<!--
    ?<link rel="stylesheet" type="text/css" href="styles.css">
    ?-->

    ? </head>
    ?
    ? <body>
    ? <jsp:getProperty name="hello" property="message" /><br>
    ??? This is my JSP page. <br>
    ? </body>
    </html>


    注意紅色部分為我們添加的代碼。好了我們的代碼已經編寫完畢了。
    ??????? 六、配置 Tomcat 服務器
    ??????? Eclipse 菜單, Window->Preference… ,打開 Preference 對話框,找到菜單樹中 MyEclipse->Application Servers->Tomcatat 5 項,在對話框中,選中 Enable 單選按鈕,然后點擊 Tomcat Home Directory 輸入框后的 Browse 按鈕,選擇 Tomcat 的安裝根目 omcat5.5 ,其它的框會自動填充。點擊 Apply 按鈕。 ?????? 選中 Tomcat 5 中的 JDK 一項,這里要特別注意,默認的是 JRE 的運行環境,這里要設定成 JDK 的,否則, MyEclipse 無法正常
    也無法正常運行 Tomcat 服務器。
    ?????????????? 我們點擊 Add 按鈕, JRE Name 中寫入 JDK1.5.0_06 ,然后在 Browse 選擇框中選擇 JDK 的根目錄,這里是 C:\Program Files\Java\jdk1.5.0_0 6 ,其他的默認,點擊 OK 按鈕。在 Tomcat JDK Name 中選擇我們剛才創建的那個,就是 JDK1.5.0_06 。點擊 Apply 按鈕,每次都點 e 出問題,你不點這個跑到另一個配置頁面就會丟失上面的配置。
    ??????? 我們在 Tomcat 5 的 Launch 中確保選中了 Debug 模式。
    ??????? 而 Paths 中就是一些類路徑設置,第一個是提前加載的類路徑,有些包一啟動服務器初始化 Web Application 時就要用到第二個是運行時才用到的;第三個是沒有打包的類,這里我們就不管了。
    ??????? 現在可以點擊 preference 對話框的 OK 按鈕了,完成 Tomcat 的配置。 ?????? 七、部屬 Web 應用程序
    ??????? 這里就簡單點了,我們選中 WebTest 工程的根目錄,右鍵菜單 MyEclipse->Add and Remove Projects Deployments… ,確保 Projects 為 WebTest ,點擊 Add 按鈕,在彈出對話框的 Server 中選擇 Tomcat 5 ,下面的兩個單選項, Exploaded Archive 和分別是目錄方式部屬和包方式部屬,這個都是由 MyEclipse 來做的,我們使用目錄部署方式,不用打成 war 包,其他的不管它了鈕回到上一個頁面。
    ??????? 服務器指定了,下面來部署應用程序。選中對話框服務器列表中的 Tomcat 5 項,此時,灰顯的按鈕變為可用,其中 Remove 是移除部署和重新部署,我們點擊 Redeploy 按鈕,以后我們修改了工程也可以點此按鈕重新部署。這里我們可以點擊一下了。
    ??????? OK ,程序已經部署完成了,下面要運行調試了。
    ??????? 八、運行調試程序?
    ?????? 在 Eclipse 的圖形菜單欄找到(這個按鈕左邊那個是重新部署按鈕,右邊是自掉的瀏覽器),點擊下拉按鈕,后點擊 Start 菜單,啟動 Tomcat 。 ?????? ?????? 等 Consol 窗口中提示 Tomcat 啟動成功,我們就可以運行我們的程序了。打開一個 IE 瀏覽器窗口,輸入 http://localhost:8080/WebTes t/ ,我們可以看到如下信息:
    ??????? Hello World!???
    ???? This is my JSP page. 說明運行成功。

    posted @ 2006-08-29 12:04 摩西 閱讀(8131) | 評論 (6)編輯 收藏

    Eclipse及其插件介紹和下載
    作者:本站整理 發布時間:2005年7月20日 瀏覽次數:1437

    0.Eclipse下載
    EMF,GEF - Graphical Editor Framework,UML2,VE - Visual Editor都在這里下載
    http://www.eclipse.org/downloads/index.php
    ?
    0.5.lomboz J2EE插件,開發JSP,EJB
    http://forge.objectweb.org/projects/lomboz
    1.MyEclipse J2EE開發插件,支持SERVLET/JSP/EJB/數據庫操縱等
    http://www.myeclipseide.com
    ?
    2.Properties Editor? 編輯java的屬性文件,并可以自動存盤為Unicode格式
    http://propedit.sourceforge.jp/index_en.html
    ?
    3.Colorer Take? 為上百種類型的文件按語法著色
    http://colorer.sourceforge.net/
    ?
    4.XMLBuddy 編輯xml文件
    http://www.xmlbuddy.com
    ?
    5.Code Folding? 加入多種代碼折疊功能(比eclipse自帶的更多)
    http://www.coffee-bytes.com/servlet/PlatformSupport
    ?
    6.Easy Explorer? 從eclipse中訪問選定文件、目錄所在的文件夾
    http://easystruts.sourceforge.net/
    ?
    7.Fat Jar 打包插件,可以方便的完成各種打包任務,可以包含外部的包等
    http://fjep.sourceforge.net/
    ?
    8.RegEx Test 測試正則表達式
    http://brosinski.com/stephan/archives/000028.php
    ?
    9.JasperAssistant 報表插件(強,要錢的)
    http://www.jasperassistant.com/
    ?
    10.Jigloo GUI Builder JAVA的GUI編輯插件
    http://cloudgarden.com/jigloo/
    ?
    11.Profiler 性能跟蹤、測量工具,能跟蹤、測量BS程序
    http://sourceforge.net/projects/eclipsecolorer/
    ?
    12.AdvanQas 提供對if/else等條件語句的提示和快捷幫助(自動更改結構等)
    http://eclipsecolorer.sourceforge.net/advanqas/index.html
    ?
    13.Log4E Log4j插件,提供各種和Log4j相關的任務,如為方法、類添加一個logger等
    http://log4e.jayefem.de/index.php/Main_Page
    ?
    14.VSSPlugin VSS插件
    http://sourceforge.net/projects/vssplugin
    ?
    15.Implementors 提供跳轉到一個方法的實現類,而不是接中的功能(實用!)
    http://eclipse-tools.sourceforge.net/implementors/
    ?
    16.Call Hierarchy 顯示一個方法的調用層次(被哪些方法調,調了哪些方法)
    http://eclipse-tools.sourceforge.net/call-hierarchy/index.html
    ?
    17.EclipseTidy 檢查和格式化HTML/XML文件
    http://eclipsetidy.sourceforge.net/
    ?
    18.Checkclipse 檢查代碼的風格、寫法是否符合規范
    http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm
    ?
    19.Hibernate Synchronizer Hibernate插件,自動映射等
    http://www.binamics.com/hibernatesync/
    ?
    20.VeloEclipse? Velocity插件
    http://propsorter.sourceforge.net/
    ?
    21.EditorList 方便的列出所有打開的Editor
    http://editorlist.sourceforge.net/
    ?
    22.MemoryManager 內存占用率的監視
    http://cloudgarden.com/memorymanager/
    ?
    23.swt-designer java的GUI插件
    http://www.swt-designer.com/
    ?
    24.TomcatPlugin 支持Tomcat插件
    http://www.sysdeo.com/eclipse/tomcatPlugin.html
    ?
    25.XML Viewer
    http://tabaquismo.freehosting.net/ignacio/eclipse/xmlview/index.html
    ?
    26.quantum 數據庫插件
    http://quantum.sourceforge.net/
    ?
    27.Dbedit 數據庫插件
    http://sourceforge.net/projects/dbedit
    ?
    28.clay.core 可視化的數據庫插件
    http://www.azzurri.jp/en/software/index.jsp
    http://www.azzurri.jp/eclipse/plugins
    ?
    29.hiberclipse hibernate插件
    http://hiberclipse.sourceforge.net
    http://www.binamics.com/hibernatesync
    ?
    30.struts-console Struts插件
    http://www.jamesholmes.com/struts/console/
    ?
    31.easystruts Struts插件
    http://easystruts.sourceforge.net
    ?
    32.veloedit Velocity插件
    http://veloedit.sourceforge.net/
    ?
    33.jalopy 代碼整理插件
    http://jalopy.sourceforge.net/
    ?
    34.JDepend 包關系分析
    http://andrei.gmxhome.de/jdepend4eclipse/links.html
    ?
    35.Spring IDE Spring插件
    http://springide-eclip.sourceforge.net/updatesite/
    ?
    36.doclipse 可以產生xdoclet 的代碼提示
    http://beust.com/doclipse/

    posted @ 2006-08-25 16:28 摩西 閱讀(3137) | 評論 (2)編輯 收藏

    初學者如何開發出一個高質量的J2EE系統

    板橋里人 http://www.jdon.com 2005/06/20

      J2EE學習者越來越多,J2EE本身技術不斷在發展,涌現出各種概念,本文章試圖從一種容易理解的角度對這些概念向初學者進行解釋,以便掌握學習J2EE學習方向。

      首先我們需要知道Java和J2EE是兩個不同概念,Java不只是指一種語言,已經代表與微軟不同的另外一個巨大陣營,所以Java有時是指一種軟件系統的流派,當然目前主要是.NET和Java兩大主流體系。

      J2EE可以說指Java在數據庫信息系統上實現,數據庫信息系統從早期的dBase、到Delphi/VB等C/S結構,發展到B/S(Browser瀏覽器/Server服務器)結構,而J2EE主要是指B/S結構的實現。

      J2EE又是一種框架和標準,框架類似API、庫的概念,但是要超出它們。如果需要詳細了解框架,可先從 設計模式 開始學習。

      J2EE是一個虛的大的概念,J2EE標準主要有三種子技術標準:WEB技術、EJB技術和JMS,談到J2EE應該說最終要落實到這三個子概念上。

      這三種技術的每個技術在應用時都涉及兩個部分:容器部分和應用部分,Web容器也是指Jsp/Servlet容器,你如果要開發一個Web應用,無論是編譯或運行,都必須要有Jsp/Servlet庫或API支持(除了JDK/J2SE以外)。

      Web技術中除了Jsp/Servlet技術外,還需要JavaBeans或Java Class實現一些功能或者包裝攜帶數據,所以Web技術最初裸體簡稱為Jsp/Servlet+JavaBeans系統。

      談到JavaBeans技術,就涉及到組件構件技術(component),這是Java的核心基礎部分,很多軟件設計概念(設計模式)都是通過JavaBeans實現的。

      JavaBeans不屬于J2EE概念范疇中,如果一個JavaBeans對象被Web技術(也就是Jsp/Servlet)調用,那么JavaBeans就運行在J2EE的Web容器中;如果它被EJB調用,它就運行在EJB容器中。

      EJB(企業JavaBeans)是普通JavaBeans的一種提升和規范,因為企業信息系統開發中需要一個可伸縮的性能和事務、安全機制,這樣能保證企業系統平滑發展,而不是發展到一種規模重新更換一套軟件系統。

      至此,JavaBeans組件發展到EJB后,并不是說以前的那種JavaBeans形式就消失了,這就自然形成了兩種JavaBeans技術:EJB和POJO,POJO完全不同于EJB概念,指的是普通JavaBeans,而且這個JavaBeans不依附某種框架,或者干脆可以說:這個JavaBeans是你為這個應用程序單獨開發創建的。

      J2EE應用系統開發工具有很多:如JBuilder、Eclipse等,這些IDE首先是Java開發工具,也就是說,它們首要基本功能是可以開發出JavaBeans或Java class,但是如果要開發出J2EE系統,就要落實到要么是Web技術或EJB技術,那么就有可能要一些專門模塊功能(如eclipse需要lomboz插件),最重要的是,因為J2EE系統區分為容器和應用兩個部分,所以,在任何開發工具中開發J2EE都需要指定J2EE容器。

      J2EE容器分為WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用Tomcat實現的。所以你開發的Web應用程序可以在上面兩種容器運行,而你開發的Web+EJB應用則只可以在JBoss服務器上運行,商業產品Websphere/Weblogic等和JBoss屬于同一種性質。

      J2EE容器也稱為J2EE服務器,大部分時它們概念是一致的。

      如果你的J2EE應用系統的數據庫連接是通過JNDI獲得,也就是說是從容器中獲得,那么你的J2EE應用系統基本與數據庫無關,如果你在你的J2EE應用系統耦合了數據庫JDBC驅動的配置,那么你的J2EE應用系統就有數據庫概念色彩,作為一個成熟需要推廣的J2EE應用系統,不推薦和具體數據庫耦合,當然這其中如何保證J2EE應用系統運行性能又是體現你的設計水平了。

      衡量J2EE應用系統設計開發水平高低的標準就是:解耦性;你的應用系統各個功能是否能夠徹底脫離?是否不相互依賴,也只有這樣,才能體現可維護性、可拓展性的軟件設計目標。

      為了達到這個目的,誕生各種框架概念,J2EE框架標準將一個系統劃分為WEB和EJB主要部分,當然我們有時不是以這個具體技術區分,而是從設計上抽象為表現層、服務層和持久層,這三個層次從一個高度將J2EE分離開來,實現解耦目的。

      因此,我們實際編程中,也要將自己的功能向這三個層次上靠,做到大方向清楚,涇渭分明,但是沒有技術上約束限制要做到這點是很不容易的,因此我們還是必須借助J2EE具體技術來實現,這時,你可以使用EJB規范實現服務層和持久層,Web技術實現表現層;

      EJB為什么能將服務層從Jsp/Servlet手中分離出來,因為它對JavaBeans編碼有強制的約束,現在有一種對JavaBeans弱約束,使用Ioc模式實現的(當然EJB 3.0也采取這種方式),在Ioc模式誕生前,一般都是通過工廠模式來對JavaBeans約束,形成一個服務層,這也是是Jive這樣開源論壇設計原理之一。

      由此,將服務層從表現層中分離出來目前有兩種可選架構選擇:管理普通JavaBeans(POJO)框架(如Spring、 JdonFramework )以及管理EJB的EJB框架,因為EJB不只是框架,還是標準,而標準可以擴展發展,所以,這兩種區別將來是可能模糊,被納入同一個標準了。 但是,個人認為:標準制定是為某個目的服務的,總要犧牲一些換取另外一些,所以,這兩種架構會長時間并存。

      這兩種架構分歧也曾經誕生一個新名詞:完全POJO的系統也稱為輕量級系統(lightweight),其實這個名詞本身就沒有一個嚴格定義,更多是一個吸引人的招牌,輕量是指容易學習容易使用嗎?按照這個定義,其實輕量Spring等系統并不容易學習;而且EJB 3.0(依然叫EJB)以后的系統是否可稱為輕量級了呢?

      前面談了服務層框架,使用服務層框架可以將JavaBeans從Jsp/Servlet中分離出來,而使用表現層框架則可以將Jsp中剩余的JavaBeans完全分離,這部分JavaBeans主要負責顯示相關,一般是通過標簽庫(taglib)實現,不同框架有不同自己的標簽庫,Struts是應用比較廣泛的一種表現層框架。

      這樣,表現層和服務層的分離是通過兩種框架達到目的,剩余的就是持久層框架了,通過持久層的框架將數據庫存儲從服務層中分離出來是其目的,持久層框架有兩種方向:直接自己編寫JDBC等SQL語句(如iBatis);使用O/R Mapping技術實現的Hibernate和JDO技術;當然還有EJB中的實體Bean技術。

      持久層框架目前呈現百花齊放,各有優缺點的現狀,所以正如表現層框架一樣,目前沒有一個框架被指定為標準框架,當然,表現層框架現在又出來了一個JSF,它代表的頁面組件概念是一個新的發展方向,但是復雜的實現讓人有些忘而卻步。

      在所有這些J2EE技術中,雖然SUN公司發揮了很大的作用,不過總體來說:網絡上有這樣一個評價:SUN的理論天下無敵;SUN的產品用起來撞墻;對于初學者,特別是那些試圖通過或已經通過SUN認證的初學者,趕快擺脫SUN的陰影,立即開溜,使用開源領域的產品來實現自己的應用系統。

      最后,你的J2EE應用系統如果采取上面提到的表現層、服務層和持久層的框架實現,基本你也可以在無需深刻掌握設計模式的情況下開發出一個高質量的應用系統了。

      還要注意的是: 開發出一個高質量的J2EE系統還需要正確的業務需求理解,那么域建模提供了一種比較切實可行的正確理解業務需求的方法,相關詳細知識可從UML角度結合理解。

      當然,如果你想設計自己的行業框架,那么第一步從設計模式開始吧,因為設計模式提供你一個實現JavaBeans或類之間解耦參考實現方法,當你學會了系統基本單元JavaBean或類之間解耦時,那么系統模塊之間的解耦你就可能掌握,進而你就可以實現行業框架的提煉了,這又是另外一個發展方向了。

      以上理念可以總結為一句話:
    J2EE開發三件寶: Domain Model(域建模)、patterns(模式)和framework(框架)。

      推薦一套高質量的J2EE開源系統: JPestore
      
      如果初學者沒有理解,歡迎
    繼續討論 ,大膽提出你心中的疑問。

    參考文章:Java企業系統架構選擇考量

    Jdon Framework的服務調用命令模式實現

    posted @ 2006-08-25 15:23 摩西 閱讀(169) | 評論 (0)編輯 收藏

    不解風情的豬

    2005-01-13 17:06

    很多同志在學習新東西時候都是先講究招式--如何快速入門!對任何語言來說,學習我感覺分三個步驟。第一:快速掌握語言的配置 環境等。對java尤其如此。第二:開始把自己以前用其他語言寫的東西慢慢用新語言來實現。比如我以前是用ASP,后來因為某些原因用VB了,因為ASP是BS的,VB呢卻是CS,如果快速進入VB殿堂?這需要來找規律。用了VB后發現VB也有很多東西實現起來比較復雜與繁瑣,還有一些底層的不容易實現,我第一感覺就是轉向其他的用其他來實現。比如RAD的話我選擇用Delphi,系統底層的如鉤子Hook 行置轉換我會選擇用C++,這樣學習的過程進行不斷總結并且自己給自己找事做,我相信很快利用第二個步驟把基礎打扎實的。我在學習Delphi的時候是自己慢慢與VF和VB進行比較來學習的。現在學習NET和JAVA我同樣是比較。把Delphi和Net比較,語言特性上,操作上等,并且把自己的Delphi一些認識在Net上進行比劃一下。拿Net的類庫和Java的比較。先進在哪里不足在哪里,這樣下個步驟我就有的放矢。比如一個項目分布式的應用。必須有客戶端,還有一些項目管理等。我會如何來做呢?我有了各種語言之間的差異比較后,然后思考一下就會拿出一個不錯的方案。客戶端的話我會采用Delphi來做,因為Delphi的開發周期的確比較短,再者我自己也積累了不少的資源,這樣做起來也會游刃有余,選擇C#也一樣,不過就是對C#精致的類庫還不能面面俱到的掌握。服務器端如果沒有平臺限制的話我當然會采用ASP。Net或者JAVA,因為做Web服務用這兩個語言畢竟很不錯。這樣一個項目雛形就出來了。學習第三個步驟:學習規劃。經歷了以上幾個步驟,個人認為就應該可以獨當一面,但是人的進步則是逆水行舟不進退,當然成為高手后要什么我還不知道,因為我還沒成為高手。
    不管學習什么,都沒有捷徑,“唯手熟爾”是我的看法。只有把語言了然于胸了才可能下筆入神。我大致談論一下JAVA的學習方法,針對其他應該一樣。
    要想學好Java,首先要知道Java的大致分類。我們知道,自從Sun推出Java以來,就力圖使 之無所不包,所以Java發展到現在,按應用來分主要分為三大塊:J2SE,J2ME和J2EE,這也就 是Sun ONE(Open Net Environment)體系。J2SE就是Java2的標準版,主要用于桌面應用軟件 的編程;J2ME主要應用于嵌入是系統開發,如手機和PDA的編程;J2EE是Java2的企業版,主 要用于分布式的網絡程序的開發,如電子商務網站和ERP系統。J2SE開發桌面應用軟件比起 VC,VB,DEPHI這些傳統開發語言來說,優勢好象并不明顯。J2ME對于初學者來說,好象又有 點深奧,而且一般開發者很難有開發環境。所以現在應用最廣泛又最好學的就是J2EE了。 J2EE又包括許多組件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要學習起來可不是 一兩天的事。 那么又該如何學習J2EE呢?當然Java語法得先看一看的,I/O包,Util包,Lang包你都熟悉
    了嗎?然后再從JSP學起。如果你學過HTML,那么事情要好辦的多,如果沒有,那你快去補 一補HTML基礎吧。其實JSP中的Java語法也不多,它更象一個腳本語言,有點象ASP。然后你就該學一學Servlet了。Servlet就是服務器端小程序,他負責生成發送給客戶端的HTML文件。JSP在執行時,也是先轉換成Servlet再運行的。雖說JSP理論上可以完全取代Servlet,這也是SUN推出JSP的本意,可是Servlet用來控制流程跳轉還是挺方便的,也令程序更清晰。接下來你應該學習一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代碼的混亂 方式了,這種方式跟ASP又有什么區別呢?還好,SUN提供了Javabean可以把你的JSP中的 Java代碼封裝起來,便于調用也便于重用。接著就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean還是有區別的。它是一個體系結構,你可以搭 建更安全、更穩定的企業應用。它的大量代碼已由中間件(也就是我們常聽到的 Weblogic,Websphere這些J2EE服務器)完成了,所以我們要做的程序代碼量很少,大部分工 作都在設計和配置中間件上。至于JDBC,就不用我多說了,你如果用java編過存取數據庫的 程序,就應該很熟悉。還有,如果你要用Java編發送電子郵件的程序,你就得看看Javamail 了。
    好了,對Java和J2EE有了一些基本概念之后,你就應該編一些程序了,千萬不要紙上談兵 哦。最好找一些有實例且帶光盤的書來看,這樣看到好的程序就可以直接Ctrl+C再Ctrl+V, 也不用勞您老大架再親自把它 再輸一遍吧,再說直接復制還不用怕出錯,何樂而不為呢! 還有就是要經常上一些好的Java編程文章,有好的文章要Cut下來,有問題盡管問,只要問 題不是太傻,一般高手都會回答你的。下面介紹幾個好的Java方面的編程網站:
    CSDN論壇
    http://www.csdn.net/ 中國最有名的技術論壇,《程序員》雜志就是他們出版
    的,你可以在上面提出問題,馬上就有人回答你,如果你覺得好,你可以給那人加分;
    Java研究組
    http://www.javaresearch.org/ 上面有很多原創文章,高手還是挺多的;
    Java開發者
    http://www.chinajavaworld.com/ 那里Java資料比較全;
    java.com.cn
    http://www.java.com.cn/ 看這域名就知道有多牛,注冊用戶快接近一萬了,
    同時在線人數也在一千左右,人氣很旺的;
    IBM的開發者網
    http://www-900.ibm.com/developerWorks/cn/java/index.shtmlIBM 永遠
    的藍色巨人;

    那么我書也看了,程序也做了,別人問我的問題我都能解決了,是不是就成為高手了呢?當 然沒那么簡單,這只是萬里長征走完了第一步。不信?那你出去接一個項目,你知道怎么下 手嗎,你知道怎么設計嗎,你知道怎么組織人員進行開發嗎?你現在腦子里除了一些散亂的 代碼之外,可能再沒有別的東西了吧!你現在最缺的是實際的工作經驗,而不是書本上那些 憑空想出來的程序。所以你快去找一份Java的編程工作來做吧(如果是在校學生可以去做兼 職啊),在實踐中提高自己,那才是最快的。不過你得祈禱在公司里碰到一個高手,而且他 還愿意不厭其煩地教你,這樣好象有點難哦! 還有一個辦法就是讀開放源碼的程序了。我們知道開放源碼大都出自高手,他們設計合理, 考慮周到,再加上有廣大的程序員參與,代碼的價值自然是字字珠嘰,鏗鏘有力(對不起, 偶最近《金裝四大才子》看多了)。學Java必讀的兩個開源程序就是Jive和Pet Store.。 Jive是國外一個非常著名的BBS程序,完全開放源碼。論壇的設計采用了很多先進的技術, 如Cache、用戶認證、Filter、XML等,而且論壇完全屏蔽了對數據庫的訪問,可以很輕易的 在不同數據庫中移植。論壇還有方便的安裝和管理程序,這是我們平時編程時容易忽略的一 部份(中國程序員一般只注重編程的技術含量,卻完全不考慮用戶的感受,這就是我們與國 外軟件的差距所在)。Jive的資料在很多網站上都有,大家可以找來研究一下。相信你讀完 代碼后,會有脫胎換骨的感覺。遺憾的是Jive從2.5以后就不再無條件的開放源代碼,同時有licence限制。不過幸好還有中國一流的Java程序員關注它,外國人不開源了,中國人就 不能開源嗎?這里向大家推薦一個漢化的Jive版本—J道。Jive(J道版)是由中國Java界大名 鼎鼎的banq在Jive 2.1版本基礎上改編而成, 全中文,增加了一些實用功能,如貼圖,用戶 頭像和用戶資料查詢等,而且有一個開發團隊在不斷升級。你可以訪問banq的網站
    http://www.jdon.com/ 去下載,或到同濟技術論壇的服務器 ftp://nro.shtdu.edu.cn 去 下,安裝上有什么問題,可以到論壇上去提問。Pet Store.(寵物店)是SUN公司為了演示 其J2EE編程規范而推出的開放源碼的程序,應該很具有權威性,想學J2EE和EJB的朋友不要 錯過了。
    你一定會高興地說,哈哈,原來成為Java高手就這么簡單啊!記得Tomjava也曾碰到過一個項目經理,號稱Java很簡單,只要三個月就可以學會。其實說這種話的人就如當年小日本號 稱“三個月拿下中國”一樣大言不慚。不是Tomjava潑你冷水,你現在只是學到了Java的骨 架,卻還沒有學到Java的精髓。接下來你得研究設計模式了。設計模式是高級程序員真正掌 握面向對象核心思想的必修課。設計模式并不是一種具體"技術",它講述的是思想,它不僅 僅展示了接口或抽象類在實際案例中的靈活應用和智慧,讓你能夠真正掌握接口或抽象類的 應用,從而在原來的Java語言基礎上躍進一步,更重要的是,設計模式反復向你強調一個宗 旨:要讓你的程序盡可能的可重用。關于設計模式的資料,還是向大家推薦banq的網站
    http://www.jdon.com/ ,他把GOF的23種模式以通俗易懂的方式詮釋出來,純Java描述,真 是經典中的經典。有時間再研究一下MVC結構(把Model-View-Control分離開的設計思想)
    吧,現在很流行的Structs就是它的一種實現方式,不過Structs用起來實在是很繁,我們只 要學習其精髓即可,我們完全可以設計自己的MVC結構。然后你再研究一下軟件Refactoring (重構)和極限XP編程,相信你又會上一個臺階。 做完這些,你不如整理一下你的Java代碼,把那些經典的程序和常見的應用整理出來,再精 心打造一番,提高其重用性和可擴展性。你再找幾個志同道合的朋友成立一個工作室吧,你 可以去承接一些項目做了,一開始可能有些困難,可是你有技術積累,又考慮周全,接下項 目來可以迅速作完,相信大家以后都會來找你的,所以Money就嘩啦啦的。。。。。。
    當然你也可以參加一些開源項目,一方面可以提高自己,另一方面也是為中國軟件事業做貢 獻嘛!開發者在互聯網上用CVS合作開發,用QQ,MSN,E-mail討論聯系,天南海北的程序員分 散在各地卻同時開發同一個軟件,是不是很有意思呢?
    下面介紹兩個好的開源項目網站:
    湖北省軟件公共開發平
    http://gro.clinux.org/
    共創聯 http://cosoft.org.cn/
    哇,好高興哦,我終于成為高手了!非也,非也。古人云:“識時務者為俊杰”。你知道計算機界現在的發展形勢嗎?你知道微軟的.NET藍圖和SUN ONE計劃之間的明爭暗斗嗎?你知道計算機技術將向何處發展嗎?其實從各大計算機廠商最近的動作,都可以看出來“Web服務將 是下一代互聯網應用的制高點”,而微軟的.NET藍圖和SUN ONE計劃的斗爭焦點,也就是Web 服務。Web服務就是一個嶄新的分布式計算模型,它是一系列標準的綜合 (XML,SOAP,UDDI,WSDL和WSFL等)。它使得不同語言編寫的軟件能夠輕易的集成起來,使網 絡資源和Web站點變成一種服務而不是混亂的垃圾場。不遠的將來,我們就可以在家里點擊 一下鼠標,就可以完成出門旅游的全部準備工作,包括定飛機票,定旅游線路,定好房間 等。請注意,這所有的一切都是Web站點間自動完成的,再也不用象現在一樣,表面上是電 子商務,實際上很多環節都是人工操作。也許你會覺得這是天方夜談,不過就近的說,你也 很有可能承接一個項目,要集成兩個企業的ERP系統。很有可能上游企業的系統是用Dephi編 的,而下游企業的系統是用Java編的。你說你是Java高手,大家都看者你怎么做呢。所以 啊,你還得學習新技術,如Web服務,而且你Dephi也要懂一點吧(Dephi6現在已經提供Web 服務的控件了)。 你編的Java系統,可能要和.NET集成,所以你.NET要懂一點吧?到最
    后,你可能發現你已經成為Java高手了,但很多時間卻在搞別的技術。太極張三豐里說,最 厲害的招式就是沒有招式,可能就是這個道理吧!
    因為剛剛興起,所以網上Web服務的資料不是很多,我還是給大家推薦幾個網站吧:
    中國UDDI技術聯
    http://www.uddi-china.org/
    CSDN的柴曉路專 http://www.csdn.net/develop/author/ColumnAuthor/fennivel/ (注:
    柴曉路也是互聯網上一個有名的人物,他發表過很多關于Web服務的文章,還出了一書,應
    該稱的上是中國Web服務技術的先行者)
    IBM的開發者網絡的XML&Web Service專欄:
    http://www-900.ibm.com/developerWorks/cn/xml/index.shtml?csdnIBM 可是Web服務的力推者
    嗚…你費勁千心萬苦,總算成為Java高手了,怎叫人不由喜極而泣呢!是啊,真不容易,真 不簡單,真叫人感動啊!

    posted @ 2006-08-25 13:01 摩西 閱讀(364) | 評論 (0)編輯 收藏

    1.新建一個"swt/jface"項目
    Image00000.jpg
    2.新建designer application Window文件
    Image00001.jpg
    3.在可視界面加入MenuBar
    Image00002.jpg
    4.再加入一個SubMenu名為File
    Image00003.jpg
    5.分別加入兩個Menuitem 取名分別為OPen 和Quit
    Image00004.jpg
    6.導入一個文本Text,并且Lines為Multi
    Image00005.jpg
    7.分別雙擊OPen?與Quit ,這樣就注冊了事件處理方法"WidgetSelected"的SelectionListener監聽器.出現如下代碼.
    Image00006.jpg
    Image00007.jpg
    8.分別加入代碼:
    ??openMenuItem.addSelectionListener(new SelectionAdapter() {
    ???public void widgetSelected(final SelectionEvent e) {
    ????FileDialog fd = new FileDialog(shell, SWT.OPEN);
    ????String s = fd.open();
    ????if (s != null && !s.equals("")) {
    ?????FileReader fr;
    ?????try {
    ??????fr = new FileReader(s);
    ??????BufferedReader br = new BufferedReader(fr);
    ??????String s1 = br.readLine();
    ??????while (s1 != null) {
    ???????text.append(s1 + "\n");
    ???????s1 = br.readLine();

    ??????}
    ??????br.close();
    ??????fr.close();

    ?????} catch (IOException e1) {
    ??????e1.printStackTrace();
    ?????}

    ????}

    ???}
    ??});



    ??quitMenuItem.addSelectionListener(new SelectionAdapter() {
    ???public void widgetSelected(final SelectionEvent e) {
    ????shell.close();
    ???}
    ??});
    9.運行結果如下:
    Image00008.jpg
    Image00009.jpg

    posted @ 2006-08-25 12:21 摩西 閱讀(306) | 評論 (0)編輯 收藏

    1.先安裝SWT Designer插件.
    2.新建SWT/JFace項目

    Image000001.jpg

    Image000002.jpg
    3.在可視窗口中Design中,進行增加如下組件.
    Image000003.jpg
    4.各選中文本組件在Events屬性中選中事件處理類型verity->text 并雙擊后面區域,這樣將到它進行監聽注冊.
    Image00000.jpg
    Image00001.jpg
    5.選中事件處理類型Selection->widgetselected并雙擊后面區域,這樣將到它進行監聽注冊.
    Image00002.jpg
    6.雙擊提交后進入代碼編輯界面,輸入代碼:
    ??button.addSelectionListener(new SelectionAdapter() {
    ???public void widgetSelected(final SelectionEvent e) {
    ????
    ????String sname = name.getText();
    ????String spwd = pwd.getText();

    ????try {
    ?????Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    ?????Connection con = DriverManager.getConnection(
    ???????"jdbc:odbc:test", "", "");
    ?????Statement stmt = con.createStatement();
    ?????ResultSet rs = stmt
    ???????.executeQuery("select * from userid where name='"+sname+"'and psw='"+spwd+"'");

    ?????if (rs.next()) {
    ??????MessageDialog.openInformation(shell, "",
    ????????"謝謝你的登錄!你是合法用戶!");
    ?????} else {
    ??????MessageDialog.openInformation(shell, "",
    ????????"請你正確登錄!用戶名或密碼不正確!");
    ?????}

    ?????rs.close();
    ?????stmt.close();
    ?????con.close();
    ????} catch (Exception e1) {
    ?????e1.printStackTrace();
    ????}

    ???}

    ??});
    Image00003.jpg


    Image00004.jpg
    7.運行如下:
    Image00005.jpg
    Image00006.jpg
    Image00007.jpg
    8.如下為數據庫設計,當然要在這個項目之運行之前設計好!
    Image00008數據庫userid.jpg
    Image00009數據源test.jpg
    對新手一定是絕好的教程哦

    posted @ 2006-08-25 09:08 摩西 閱讀(726) | 評論 (0)編輯 收藏

    目錄列示器

    本實例演示如何得到一個目錄下的所有文件列表 .

    1.?????? 這里利用了 DirFilter 實現了 FilenameFilter 接口 , 因此必須繼承 accept 的方法 .

    2.?????? 用到了匹配字符序列與正則表達式指定模式的類 Matcher,Pattern 所以要 java.util.regex 引入 .

    實例程序 :

    package javaio;

    import java.io.*;

    import java.util.*;

    import java.util.regex.*;

    ?

    public class DirList {

    ? public static void main(String[] args) {

    ? ??File path = new File("c:/");

    ??? String[] list;

    ??? if(args.length == 0){

    ????? list = path.list();

    ??? }

    ??? else{

    ????? // 這里將輸入的參數作為過濾因子

    ????? list = path.list(new DirFilter(args[0]));

    ??? }

    ??? for(int i = 0; i < list.length; i++){

    ????? System.out.println(list[i]);

    ??? }

    ? }

    }

    ?

    class DirFilter implements FilenameFilter {

    ? private Pattern pattern;

    ? public DirFilter(String regex) {

    ??? pattern = Pattern.compile(regex);

    ? }

    ? public boolean accept(File dir, String name) {

    ??? // 判斷名為 name 的文件是不是符合過濾條件

    ??? return pattern.matcher(new File(name).getName()).matches();/*matches() 嘗試將整個區域 / 與模式匹配。 new File(name).getName() 得到 String 類的 name*/

    ? }

    }

    運行結果 :

    Image00003.jpg

    posted @ 2006-08-24 19:29 摩西 閱讀(228) | 評論 (0)編輯 收藏

    本實例演示 util 包中類 Calendar 的使用

    Clendar 類是一種日期處理類 , 可以想像它是一個掛在墻壁上的典型日歷 , 有許多日期和頁數翻閱 .

    1.?????? Clendar 類的變量域的概念 . 每個元素都是域 , 并且這些域在 Clendar 類中表現為靜態變量 . 這些變量域 , 可能通過 get/set 類方法獲得或者設置域值 .

    [Calendardemo.java 代碼 ]:

    import java.util.*;

    ?

    public class Calendardemo {

    ?

    ?????? public static void main(String[] args) {

    ?

    ????????????? // 創建一個日歷對象

    ????????????? Calendar calendar = Calendar.getInstance();

    ????????????? // 用當前時間初始化日歷對象

    ????????????? calendar.setTime(new Date());

    ????????????? String year = String.valueOf(calendar.get(Calendar.YEAR));

    ????????????? String month = String.valueOf(calendar.get(Calendar.MONTH) + 1);

    ????????????? String date = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));

    ????????????? String day = String.valueOf(calendar.get(Calendar.DAY_OF_WEEK) - 1);

    ?

    ????????????? int hour = calendar.get(Calendar.HOUR);// 12 小時制

    ????????????? int hour_1 = calendar.get(Calendar.HOUR_OF_DAY);// 24 小時制

    ????????????? int minute = calendar.get(Calendar.MINUTE);

    ????????????? int second = calendar.get(Calendar.SECOND);

    ????????????? // 輸出結果

    ????????????? System.out.println("year=? " + year);

    ????????????? System.out.println("month=? " + month);

    ????????????? System.out.println("date=? " + date);

    ????????????? System.out.println("day=? " + day);

    ????????????? System.out.println("hour=? " + hour);

    ????????????? System.out.println("hour1=? " + hour_1);

    ????????????? System.out.println("minute=? " + minute);

    ????????????? System.out.println("second=? " + second);

    ????????????? System.out.println(" 現在時間是: ");

    ????????????? System.out.println(" " + year + " " + month + " " + date + " 星期 " + day);

    ?

    ????????????? calendar.set(1983, 7, 21);// 將日歷翻到某個時間. 7 表示八月

    ????????????? long time1983 = calendar.getTimeInMillis();// 返回當前時間,作為從開始時間的 UTC 毫秒值

    ????????????? calendar.setTime(new Date());// 將日歷翻到現在這個時間.

    ????????????? long time2006 = calendar.getTimeInMillis();

    ????????????? long interdays = (time2006 - time1983) / (1000 * 60 * 60 * 24);

    ????????????? System.out.println(" 現在和 1983.8.21 相隔 " + interdays + " ");

    ?????? }

    ?

    }

    ?

    注意 : 應該以靜態方式訪問靜態字段 Calendar.year

    Image00004.jpg
    運行結果
    :

    Image00005.jpg

    posted @ 2006-08-24 19:28 摩西 閱讀(699) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 亚洲国产二区三区久久| 国产伦精品一区二区三区免费迷| 免费无码一区二区三区蜜桃 | 国产99视频免费精品是看6| 好男人视频社区精品免费| 毛片免费观看视频| 国产又黄又爽又猛免费app| 69堂人成无码免费视频果冻传媒| h片在线免费观看| 国产在线观看免费观看不卡 | a级毛片免费高清毛片视频| 日本高清不卡aⅴ免费网站| 在线免费播放一级毛片 | 含羞草国产亚洲精品岁国产精品 | 久久亚洲AV成人无码| 亚洲无圣光一区二区| 亚洲伦理中文字幕| 亚洲av最新在线观看网址| 日韩国产欧美亚洲v片| 麻豆一区二区三区蜜桃免费| 一级黄色免费毛片| 国内精品免费久久影院| 久久午夜夜伦鲁鲁片无码免费| 91老湿机福利免费体验| av无码免费一区二区三区| 成人毛片免费观看视频大全| 免费看国产一级片| 伊人久久精品亚洲午夜| 亚洲精品免费视频| 亚洲免费福利在线视频| 免费亚洲视频在线观看| 91成人免费福利网站在线| 四虎1515hh永久久免费| 日本高清免费网站| 久久久久亚洲AV成人网| 亚洲尹人九九大色香蕉网站| 中国亚洲呦女专区| av午夜福利一片免费看久久| 97精品免费视频| 日韩一级免费视频| 亚洲爆乳无码专区|