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

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

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

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

          password

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

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

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

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

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

          注:上面講的127.0.0.1可以換成外網(wǎng)IP,或者局域網(wǎng)IP皆可(即,在家里創(chuàng)建一個(gè)SVN服務(wù)端,即可在公司去訪問家里的SVN)
          posted @ 2008-01-05 23:40 摩西 閱讀(38598) | 評論 (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();
            }
           }

          }



          試過以上的所有編碼都無法解決數(shù)據(jù)在MYSQL中的亂碼問題,看來是jdbc連mysql時(shí)的編碼不對,于是
          將   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 摩西 閱讀(866) | 評論 (0)編輯 收藏
          在使用hibernate項(xiàng)目中,持久化類的ID用Long與long有很大區(qū)別!!
          用long 作為id,當(dāng)一個(gè)新的臨時(shí)類要持久化時(shí)會報(bào)一個(gè)這種錯(cuò):
          Exception executing batch: org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
          因?yàn)檫@個(gè)臨時(shí)類,已經(jīng)有一個(gè)id=0 (long的默認(rèn)值);這時(shí)hibernate 為錯(cuò)認(rèn)為這是一條持久化類,從而進(jìn)行更新操作,故報(bào)錯(cuò)!!
          這時(shí)把持久類的id 類型改成Long 就OK了,再create 時(shí),臨時(shí)類的id為null ,hibernate 才會正確的判斷這是臨時(shí)類而進(jìn)行save操作!!
          posted @ 2007-09-28 11:42 摩西 閱讀(2451) | 評論 (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 子數(shù)組,構(gòu)造一個(gè)新的 String。 
                      
           byte[] getBytes(String charsetName)
                    使用指定的字符集將此 String 編碼為 byte 序列,并將結(jié)果存儲到一個(gè)新的 byte 數(shù)組中



          #800080      

          #7B7D62

          #56B6E9

          #4B8D32

          posted @ 2007-08-29 13:45 摩西 閱讀(424) | 評論 (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 摩西 閱讀(355) | 評論 (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 摩西 閱讀(1893) | 評論 (0)編輯 收藏
          這個(gè)錯(cuò)誤我一共遇到過兩次,一直沒有找到很好的解決方案,這個(gè)錯(cuò)誤產(chǎn)生原因相信大家都知道,因?yàn)樵趆ibernate中同一個(gè)session里面有了兩個(gè)相同標(biāo)識但是是不同實(shí)體.
          一開始按網(wǎng)上說的用session.merge(Object)報(bào)了一個(gè)錯(cuò),可能是沒有用好,改用 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);
              }
          ...
          項(xiàng)目用的是spring + hibernate所以得用
          getHibernateTemplate().getSessionFactory().getCurrentSession();得當(dāng)前Session


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

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


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

          js驗(yàn)證表單大全
          1. 長度限制
          <script>
          function test()
          {
          if(document.a.b.value.length>50)
          {
          alert("不能超過50個(gè)字符!");
          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. 只能是數(shù)字
          <script language=javascript>
          function onlyNum()
          {
          if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
          //考慮小鍵盤上的數(shù)字鍵
          event.returnvalue=false;
          }
          </script>

          <input onkeydown="onlyNum();">

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

          6. 驗(yàn)證油箱格式
          <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. 屏蔽關(guān)鍵字(這里屏蔽***和****)
          <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  表單項(xiàng)不能為空

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

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

          2.2  比較兩個(gè)表單項(xiàng)的值是否相同

          <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  表單項(xiàng)只能為數(shù)字和"_",用于電話/銀行帳號驗(yàn)證上,可擴(kuò)展到域名注冊等

          <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  表單項(xiàng)輸入數(shù)值/長度限定

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

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

          alert("輸入數(shù)值不能小于零大于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  中文/英文/數(shù)字/郵件地址合法性判斷

          <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)  //數(shù)值檢測

          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  限定表單項(xiàng)不能輸入的字符

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

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

          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. 檢查一段字符串是否全由數(shù)字組成      
          ---------------------------------------      
          <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. 郵箱格式驗(yàn)證   
          ---------------------------------------     
          //函數(shù)名:chkemail    
          //功能介紹:檢查是否為Email Address    
          //參數(shù)說明:要檢查的字符串    
          //返回值: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. 數(shù)字格式驗(yàn)證   
          ---------------------------------------     
          //函數(shù)名:fucCheckNUM    
          //功能介紹:檢查是否為數(shù)字    
          //參數(shù)說明:要檢查的數(shù)字    
          //返回值:1為是數(shù)字,0為不是數(shù)字    
          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)    
          {    
          //說明有字符不是數(shù)字    
          return 0;    
          }    
          }    
          //說明是數(shù)字    
          return 1;    
          }    
             
          6. 電話號碼格式驗(yàn)證   
          ---------------------------------------     
          //函數(shù)名:fucCheckTEL    
          //功能介紹:檢查是否為電話號碼    
          //參數(shù)說明:要檢查的字符串    
          //返回值: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. 判斷輸入是否為中文的函數(shù)  
          ---------------------------------------     
          function ischinese(s){  
          var ret=true;  
          for(var i=0;i<s.length;i++)  
          ret=ret && (s.charCodeAt(i)>=10000);  
          return ret;  
          }   
            
          8. 綜合的判斷用戶輸入的合法性的函數(shù) 
          ---------------------------------------     
          <script language="javascript"> 
          //限制輸入字符的位數(shù)開始 
          //m是用戶輸入,n是要限制的位數(shù) 
          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. 判斷用戶名是否為數(shù)字字母下滑線
          ---------------------------------------     
          function notchinese(str){
          var reg=/[^A-Za-z0-9_]/g
              if (reg.test(str)){
              return (false);
              }else{
          return(true);    }
          }

          11. form文本域的通用校驗(yàn)函數(shù)
          ---------------------------------------     
          作用:檢測所有必須非空的input文本,比如姓名,賬號,郵件地址等等。
          該校驗(yàn)現(xiàn)在只針對文本域,如果要針對form里面的其他域?qū)ο螅梢愿淖兣袛鄺l件。

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

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

          function dovalidate()
          {
          fm=document.forms[0] //只檢測一個(gè)form,如果是多個(gè)可以改變判斷條件
              for(i=0;i<fm.length;i++)
              { 
              //檢測判斷條件,根據(jù)類型不同可以修改
              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")//數(shù)字校驗(yàn)
                   {
                           if(isNaN(fm[i].value))
                          { str_warn2=fm[i].title+"格式不對";
                          alert(str_warn2);
                          fm[i].focus();
                           return false;
                           }
                  }
              }
              return true;
          }


          2 >表單提交驗(yàn)證類


          2.1 表單項(xiàng)不能為空

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

          2.2 比較兩個(gè)表單項(xiàng)的值是否相同

          <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 表單項(xiàng)只能為數(shù)字和"_",用于電話/銀行帳號驗(yàn)證上,可擴(kuò)展到域名注冊等

          <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 表單項(xiàng)輸入數(shù)值/長度限定

          <script language="javascript">
          <!--
          function CheckForm()
          {
          if (document.form.count.value > 100 || document.form.count.value < 1)
          {
          alert("輸入數(shù)值不能小于零大于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 中文/英文/數(shù)字/郵件地址合法性判斷

          <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) //數(shù)值檢測
          {
          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 限定表單項(xiàng)不能輸入的字符

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

          function contain(str,charset)// 字符串包含測試函數(shù)
          {
          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 摩西 閱讀(374) | 評論 (0)編輯 收藏
          Java/J2EE中文問題終極解決之道
           
          Java中文問題一直困擾著很多初學(xué)者,如果了解了Java系統(tǒng)的中文問題原理,我們就可以對中文問題能夠采取根本的解決之道。

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

            還有一種方式是對J2EE容器進(jìn)行編碼設(shè)置,如果J2EE應(yīng)用系統(tǒng)脫離該容器,則會發(fā)生亂碼,而且指定容器配置不符合J2EE應(yīng)用和容器分離的原則。

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

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

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

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

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

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

            指定統(tǒng)一字符集時(shí),到底是指定ISO8859_1 、GBK還是UTF-8呢? 

            (1)如統(tǒng)一指定為ISO8859_1,因?yàn)槟壳按蠖鄶?shù)軟件都是西方人編制的,他們默認(rèn)的字符集就是ISO8859_1,包括操作系統(tǒng)Linux和數(shù)據(jù)庫MySQL等。這樣,如果指定Jive統(tǒng)一編碼為ISO8859_1,那么就有下面3個(gè)環(huán)節(jié)必須把握:

            開發(fā)和編譯代碼時(shí)指定字符集為ISO8859_1。

            運(yùn)行操作系統(tǒng)的默認(rèn)編碼必須是ISO8859_1,如Linux。

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

            (2)如果統(tǒng)一指定為GBK中文字符集,上述3個(gè)環(huán)節(jié)同樣需要做到,不同的是只能運(yùn)行在默認(rèn)編碼為GBK的操作系統(tǒng),如中文Windows。

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

            那么有沒有一種除了應(yīng)用系統(tǒng)以外不需要進(jìn)行任何附加設(shè)置的中文編碼根本解決方案呢?

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

            一個(gè)J2EE應(yīng)用系統(tǒng)需要做下列幾步工作:

          1. 開發(fā)和編譯代碼時(shí)指定字符集為UTF-8。JBuilder和Eclipse都可以在項(xiàng)目屬性中設(shè)置。 
          2. 使用過濾器,如果所有請求都經(jīng)過一個(gè)Servlet控制分配器,那么使用Servlet的filter執(zhí)行語句,將所有來自瀏覽器的請求(request)轉(zhuǎn)換為UTF-8,因?yàn)闉g覽器發(fā)過來的請求包根據(jù)瀏覽器所在的操作系統(tǒng)編碼,可能是各種形式編碼。關(guān)鍵一句:
            request.setCharacterEncoding("UTF-8")。
            網(wǎng)上有此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. 設(shè)定數(shù)據(jù)庫連接方式是UTF-8。例如連接MYSQL時(shí)配置URL如下:
            jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8
            注意,上述寫法是JBoss的mysql-ds.xml寫法,多虧網(wǎng)友提示,在tomcat中&amp;要寫成&即可。一般其他數(shù)據(jù)庫都可以通過管理設(shè)置設(shè)定UTF-8 
          6. 其他和外界交互時(shí)能夠設(shè)定編碼時(shí)就設(shè)定UTF-8,例如讀取文件,操作XML等。 
               筆者以前在Jsp/Servlet時(shí)就采取這個(gè)原則,后來使用Struts、Tapestry、EJB、Hibernate、Jdon等框架時(shí),從未被亂碼困擾過,可以說適合各種架構(gòu)。希望本方案供更多初學(xué)者分享,減少Java/J2EE的第一個(gè)攔路虎,也避免因?yàn)椴扇∫恍┡R時(shí)解決方案,導(dǎo)致中文問題一直出現(xiàn)在新的技術(shù)架構(gòu)中。 
          posted @ 2007-04-27 15:24 摩西 閱讀(395) | 評論 (0)編輯 收藏
              
          <entry key="webaddsuccess" value="redirect:/web.do?method=friendSitelist"/>
          posted @ 2007-04-27 09:30 摩西 閱讀(904) | 評論 (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 摩西 閱讀(1867) | 評論 (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 摩西 閱讀(285) | 評論 (0)編輯 收藏
          報(bào)錯(cuò)信息:

          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 摩西 閱讀(1509) | 評論 (1)編輯 收藏
          <script language="javascript">document.write(week[${status.index}])</script>
          posted @ 2007-04-16 14:42 摩西 閱讀(1178) | 評論 (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>
          報(bào)錯(cuò):
          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>的用法是錯(cuò)誤的!!!!!!

          posted @ 2007-04-16 13:49 摩西 閱讀(1331) | 評論 (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 摩西 閱讀(371) | 評論 (0)編輯 收藏
          <a href="javascript:history.go(-1);">[返回]</javascript>
          posted @ 2007-04-14 09:39 摩西 閱讀(1757) | 評論 (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 摩西 閱讀(767) | 評論 (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 摩西 閱讀(4863) | 評論 (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的圖標(biāo)是灰色的加了個(gè)'(置疑

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

          能有誤。
          已創(chuàng)建名為 'E:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.LDF' 的新日志文件。
          不過沒關(guān)系,因?yàn)樾氯罩疚募褎?chuàng)建了,呵呵。
          用此方法只要有.mdf文件,就能回復(fù)數(shù)據(jù)庫。

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

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

          少說費(fèi)話--直入主題:
          1.在Tomcat目錄下的webapps目錄下新建book文件夾,
          1.5 在Tomcat目錄下的conf/Catalina/localhost目錄下新建一個(gè)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? (可在命令行中運(yùn)行此步)
          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>網(wǎng)上測試</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>重新進(jìn)行測試。<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()%>個(gè)問題,現(xiàn)在是第<%=exam.getCurrent()%>個(gè)問題
          </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.科學(xué)常識:下列有關(guān)科學(xué)家的敘述,何者正確?",
          ??"2.牛頓三大運(yùn)動定律的第一定律是:",
          ??"3.兩個(gè)報(bào)名參加海軍的年輕人被問道:\"你們會游泳嗎?\"他倆愣住了。過了一會兒,其中一個(gè)人回答說:\"怎么回事,難道船不夠用嗎?\"這篇文章的主題是什么",
          ??"4.接上題。考官為什么要問這兩個(gè)人游泳的事?",
          ??"5.男:看那個(gè)妹妹,好靚哦!女:看你個(gè)大頭鬼!問:這個(gè)女的是什么意思?",
          ??"6.男:今天天氣不錯(cuò)。女:可不是咋得!問:這個(gè)女的什么意思?",
          ??"7.男:我把撿來的錢包交給警察了。男:我KAO!",
          ??"8.女:您好,您撥叫的用戶沒有開機(jī),要留言請留言,不留言請掛機(jī)。問:這是發(fā)生在什么時(shí)候?",
          ??"9.ABCD四教授申請中科院院士,如果以下事實(shí)為真,誰最有資格入選",
          ??"10.以下是摘自電影《大話西游》中唐僧的一句臺詞,選項(xiàng)中可能正確的是人和妖精都是媽生的,不同的人是人他媽的,妖是妖他媽的,妖要有了仁慈之心,就不是妖了,而是人妖"
          ?};
          ?String[][] examAnswer=
          ?{//問題可選的答案
          ??{"(A)天文學(xué)家常常到天體營去研究天文的奧秘","(B)地質(zhì)學(xué)家常常到地牢去研究地層結(jié)構(gòu)","(C)大氣科學(xué)家常常坐熱氣球到天空研究臺風(fēng)","(D)以上都不對"},
          ??{"(A)靜如處子 動于脫兔","(B)靜中有動 動中有靜","(C)運(yùn)動絕對 靜止相對","(D)靜者恒靜 動者恒動"},
          ??{"(A)參軍","(B)打魚","(C)游泳","(D)造船"},
          ??{"(A)他想讓他們教他游泳","(B)他想知道這兩個(gè)人會不會被淹死","(C)他擔(dān)心船不夠用","(D)他想舉行游泳比賽"},
          ??{"(A) 這個(gè)男的頭有病","(B)這個(gè)男的頭比較大","(C)這個(gè)男的看見的是鬼","(D)這個(gè)女的有點(diǎn)吃醋"},
          ??{"(A)今天天氣不好","(B)今天天氣很好","(C)這女的沒聽清","(D)這女的不知道"},
          ??{"(A)他很驚訝","(B)他丟了錢包","(C)他想揍第一個(gè)人","(D)他累了想找個(gè)地方靠靠"},
          ??{"(A)打電話","(B) 開飛機(jī)","(C) 發(fā)EMAIL","(D)坐飛機(jī)"},
          ??{"(A)是中國改革開放以后第一個(gè)公費(fèi)留德的四十歲以下的女性的在微電子領(lǐng)域的花了少于三年畢業(yè)的毅然回國的博士","(B)是在使用黑白膠卷照出彩照這一國際前沿領(lǐng)域做出突破貢獻(xiàn)的科學(xué)家","(C)畢業(yè)于我國著名的海南熱帶作物學(xué)院,學(xué)慣東西,差一點(diǎn)就復(fù)制出了恐龍。而且率先提出,中國人才沒有斷層,只是待遇和職稱斷層","(D)經(jīng)常陪李嵐清打敲三家和拱豬,對高校合并做出突出貢獻(xiàn)"},
          ??{"(A)人妖是指:媽媽還健在就去做了和尚的妖精","(B)人和妖精沒有本質(zhì)區(qū)別,因?yàn)樗麄兌际峭晃慌可?,"(C)唐僧為了超度一只妖精,不惜和妖精一起罵人","(D)唐僧暗示自己的母親原來就是一只妖精變的"}
          ?};
          ?
          ?String[] correctAnswer=
          ?{//正確的答案
          ??"D","C","A","B","D","B","A","A","B","C"
          ?};

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

          ?public void reset()
          ?{//重設(shè)測試
          ??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)編輯 收藏

           經(jīng)常看到j(luò)sp的初學(xué)者問tomcat下如何配置jsp、servlet和bean的問題,于是總結(jié)了一下如何tomcat下配置jsp、servlet和ben,希望對那些初學(xué)者有所幫助。

          一、開發(fā)環(huán)境配置

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

          第二步:安裝和配置你的j2sdk和tomcat:執(zhí)行j2sdk和tomcat的安裝程序,然后按默認(rèn)設(shè)置進(jìn)行安裝即可。

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

          JAVA_HOME=c:\j2sdk1.5.0
          classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因?yàn)樗懋?dāng)前路徑)
          path=%JAVA_HOME%\bin

          接著可以寫一個(gè)簡單的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

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

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

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

          然后修改環(huán)境變量中的classpath,把tomat安裝目錄下的common\lib下的(可以根據(jù)實(shí)際追加)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目錄下新建一個(gè)目錄,起名叫myapp;
          3.myapp下新建一個(gè)目錄WEB-INF,注意,目錄名稱是區(qū)分大小寫的;
          4.WEB-INF下新建一個(gè)文件web.xml,內(nèi)容如下:

          <?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下新建一個(gè)測試的jsp頁面,文件名為index.jsp,文件內(nèi)容如下:
          <html><body><center>
          Now time is: <%=new java.util.Date()%>
          </center></body></html>

          6.重啟Tomcat

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

          第四步:建立自己的Servlet:

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

          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下會產(chǎn)生一個(gè)編譯后的servlet文件:Test.class

          3 .將結(jié)構(gòu)test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那個(gè)test目錄到classes目錄下,如果classes目錄不存在,就新建一個(gè)。 現(xiàn)在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目錄結(jié)構(gòu)

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

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

          <?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這一段聲明了你要調(diào)用的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)新建一個(gè)java程序,文件名為TestBean.java,文件內(nèi)容如下:

          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下會產(chǎn)生一個(gè)編譯后的bean文件:TestBean.class

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

          4 .新建一個(gè)TestBean.jsp文件,文件內(nèi)容為:

          <%@ 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成功了。

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

          jvm應(yīng)填寫到
          c:\j2sdk\bin

          給你一個(gè)簡單的配置::::

          JSP環(huán)境配置心得

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

          安裝jdk后,tomcat在安裝之前會自動找到j(luò)dk的安裝路徑,一路點(diǎn)擊"下一步",經(jīng)過一段時(shí)間的文件復(fù)制,最后"close",完成comcat的安裝。

          您最好去下載一個(gè)版本較高的tomcat,比如4.1以上的,因?yàn)樗恍枰O(shè)置太多的系統(tǒng)變量,右擊"我的電腦",選擇"屬性"->"高級"->"環(huán)境變量"->"系統(tǒng)變量",新建一個(gè)TOMCAT_HOME,值設(shè)置成你的tomcat所在的路徑,比如:D:\Program Files\Apache Group\Tomcat 5.5,配置完成。

          從開始菜單中找到tomcat選項(xiàng),一般打開順序是:開始->程序->Apache Tomcat 5.5,選擇"Start Tomcat",讓jsp服務(wù)器開始運(yùn)行,此時(shí)會打開一個(gè)類似Dos的窗口,會顯示一些相關(guān)的信息。

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

          打開瀏覽器,在地址欄中輸入: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跟我們保存的文件名的大小寫要一致)回車,如果不出意外,應(yīng)該可以看到形如Today is: h Fri Apr 11 08:32:38 CST 2003 的結(jié)果。

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

          要改成自己的虛擬目錄,就要請出server.xml來了,該文件是一個(gè)配置文件,在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"就是端口,我們完全可以用別的端口來代替,但不能是被系統(tǒng)占用的端口(0--1023),這里簡單提一下。

          下面我們再往下找,會發(fā)現(xiàn)以下的語句:

          </Context>
          </Host>

          我們就應(yīng)該找到這兩個(gè)語句,如果不懂E文,您就認(rèn)定這兩個(gè)語句好了。然后我們將該語句更改如下:

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

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

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

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

          先建立一個(gè)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,編譯后會生成一個(gè)包,其實(shí)就相當(dāng)于一個(gè)目錄,也就是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。

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

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

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

          1、JAVA的安裝:

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

          2、TOMCAT的安裝:

          A:運(yùn)行jakarta-tomcat-5.0.12.exe文件,自動捕獲JDK

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

          安裝完成后設(shè)置系統(tǒng)變量:CATALINA_HOME,它是TOMCAT的安裝目錄,如果沒有進(jìn)行設(shè)置,則在TOMCAT第一次啟動時(shí)自動設(shè)置

          3、TOMCAT的測試:

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

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

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

          4、TOMCAT目錄結(jié)構(gòu)

          bin 存放啟動和關(guān)閉tomcat腳本

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

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

          common? tomcat服務(wù)器以及所有web應(yīng)用都可以訪問的JAR文件

          shared? 所有web應(yīng)用都可以訪問的JAR文件

          work 存放jsp編譯后產(chǎn)生的class文件

          logs 存放日志文件

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

          5、WEB應(yīng)用程序的目錄結(jié)構(gòu)

          在WEB上發(fā)布的J2EE應(yīng)用程序都有自己特定的目錄結(jié)構(gòu)

          假設(shè)創(chuàng)建一名為HELLOAPP的WEB項(xiàng)目

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

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

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

          server port 指定一個(gè)端口,這個(gè)端口負(fù)責(zé)監(jiān)聽關(guān)閉tomcat的請求

          shutdown 指定向端口發(fā)送的命令字符串

          service name 指定service的名字

          Connector

          (表示客戶端和service之間的連接) port 指定服務(wù)器端要創(chuàng)建的端口號,并在這個(gè)斷口監(jiān)聽來自客戶端的請求

          minProcessors 服務(wù)器啟動時(shí)創(chuàng)建的處理請求的線程數(shù)

          maxProcessors 最大可以創(chuàng)建的處理請求的線程數(shù)

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

          redirectPort 指定服務(wù)器正在處理http請求時(shí)收到了一個(gè)SSL傳輸請求后重定向的端口號

          acceptCount 指定當(dāng)所有可以使用的處理請求的線程數(shù)都被使用時(shí),可以放到處理隊(duì)列中的請求數(shù),超過這個(gè)數(shù)的請求將不予處理

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

          Engine

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

          Context

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

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

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

          host

          (表示一個(gè)虛擬主機(jī))

          name 指定主機(jī)名

          appBase 應(yīng)用程序基本目錄,即存放應(yīng)用程序的目錄

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

          Logger

          (表示日志,調(diào)試和錯(cuò)誤信息)

          className 指定logger使用的類名,此類必須實(shí)現(xiàn)org.apache.catalina.Logger 接口

          prefix 指定log文件的前綴

          suffix 指定log文件的后綴

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

          Realm

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

          className 指定Realm使用的類名,此類必須實(shí)現(xiàn)org.apache.catalina.Realm接口

          Valve

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

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

          directory 指定log文件存放的位置

          pattern 有兩個(gè)值,common方式記錄遠(yuǎn)程主機(jī)名或ip地址,用戶名,日期,第一行請求的字符串,HTTP響應(yīng)代碼,發(fā)送的字節(jié)數(shù)。combined方式比common方式記錄的值更多

          ?

          在以上的設(shè)置項(xiàng)目中Context是最重要也是使用最頻繁的元素,他代表了運(yùn)行在主機(jī)上的每個(gè)web應(yīng)用。一個(gè)主機(jī)上可以用 多個(gè)web應(yīng)用,每個(gè)web應(yīng)用對應(yīng)一個(gè)唯一的地址,而地址在Context元素的path屬性中設(shè)置

          path:訪問web程序的url入口
          docbase:制定web程序的路徑,如果web應(yīng)用是開放目錄結(jié)構(gòu),則為根目錄,若為war文件則為war文件的路徑

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

          當(dāng)設(shè)置jsp文件時(shí),只需把文件放到web應(yīng)用根目錄下即可訪問,而設(shè)置servlet還要在web.xml中設(shè)置



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

          posted @ 2006-09-05 12:06 摩西 閱讀(493) | 評論 (0)編輯 收藏
               摘要: 一、Tomcat背景   自從JSP發(fā)布之后,推出了各式各樣的JSP引擎。Apache Group在完成GNUJSP1.0的開發(fā)以后,開始考慮在SUN的JSWDK基礎(chǔ)上開發(fā)一個(gè)可以直接提供Web服務(wù)的JSP服務(wù)器,當(dāng)然同時(shí)也支持Servlet, 這樣Tomcat就誕生了。 Tomcat是ja...  閱讀全文
          posted @ 2006-09-05 12:04 摩西 閱讀(202) | 評論 (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參數(shù)
          //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 摩西 閱讀(5032) | 評論 (1)編輯 收藏
          XML相關(guān)資源?


          一.?XML的大本營?

          XML是由W3C(World?Wide?Web?Consortium)國際組織負(fù)責(zé)開發(fā)和制定標(biāo)準(zhǔn)的。關(guān)于XML最權(quán)威,最新的消息都來自W3C。網(wǎng)址是:http://w3c.org/XML/ ?


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


          二.?XML指南?

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

          W3C關(guān)于XML規(guī)范的詳細(xì),完整的說明。不用多說,絕對權(quán)威。?


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

          這是Tim?Bary寫的XML規(guī)范說明書,非常的詳細(xì)和嚴(yán)密,是學(xué)習(xí)XML規(guī)范的好幫手。?


          三.?XML常見問題?


          Peter?Flynn的?XML?FAQ?

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

          包含大量詳細(xì)的資料,經(jīng)常更新,由W3C協(xié)會XML組維護(hù)。?


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

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

          這個(gè)FAQ列表有側(cè)重點(diǎn),主要包含XSLT?FAQ,XPath?FAQ和IE5中的XSL?FAQ。?


          Dave?Pawson’s?XSL?FAQ?

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

          提供最好的關(guān)于XSL方面的FAQ,創(chuàng)建于1999年。?


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

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

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


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

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

          創(chuàng)建于2000初,是關(guān)于namespaces概要的FAQ。?

          四.?XML主題網(wǎng)站?


          http://www.xml.com/ ?

          一個(gè)以XML為主題的內(nèi)容豐富的網(wǎng)站?


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

          另一個(gè)比較知名的XML網(wǎng)站,提供XML的新聞和資訊。?


          http://www.xmlinfo.com/ ?

          網(wǎng)站創(chuàng)建者James?Tauber’s是W3C組織XML發(fā)展組的成員之一,他的網(wǎng)站提供了大量的連接和例子。?


          http://www.simonstl.com/ ?

          網(wǎng)站創(chuàng)建者Simon?St.?Laurent也是XML發(fā)展組的成員。他是W3C中XML初級入門教程的作者,他的站點(diǎn)主要提供有關(guān)XML的發(fā)展信息。?


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

          微軟的MSDN關(guān)于XML的主題網(wǎng)站。微軟在推進(jìn)XML應(yīng)用方面不遺余力。?


          http://www.xmlsoftware.com/ ?

          是XML?info的姐妹網(wǎng)站,內(nèi)容包括XML/DTD/XSL編輯軟件,XML?API軟件等。?


          http://xmlhack.com/ ?

          1999年9月建立的大型XML新聞網(wǎng)站,同時(shí)提供XML人才信息。?


          http://xml.apache.org/ ?

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


          http://www.biztalk.org/ ?

          BizTalk是微軟發(fā)起的以XML商業(yè)應(yīng)用為目標(biāo)的組織。BizTalk不是一個(gè)標(biāo)準(zhǔn)組織。?


          五.?XML的編輯軟件?


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


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

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


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

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


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

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


          http://www.arbortext.com/ ?

          Arbortext公司是重點(diǎn)開發(fā)XML游戲的公司。?


          http://www.inso.com/ ?

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


          http://www.softquad.com/ ?

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

          六.?支持XML的瀏覽器?


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

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


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

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


          七.?XML?parser?


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


          在線的parser?


          http://validator.w3.org/ ?

          W3C組織提供的一個(gè)在線paeser。可以根據(jù)你在線提交的XML文檔URL,進(jìn)行驗(yàn)證和解吸。?


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

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


          可下載的Parser?

          有很多可以下載到本機(jī)上運(yùn)行的parser,下面列出一些主要的:?


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

          James?Clark是在SGML/XML領(lǐng)域的元老,他寫的parser被廣泛的運(yùn)用。?


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

          一個(gè)以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,只用來檢查語法,不進(jìn)行解吸析。?


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

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


          八.?Schema編輯軟件?


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


          http://www.extensibility.com/ ?

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


          九.?國內(nèi)XML資源?

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

          XML中國論壇是一個(gè)非贏利的學(xué)術(shù)網(wǎng)站。由北京大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)研究所創(chuàng)辦,北大方正集團(tuán)公司提供贊助。?


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

          中國XML聯(lián)盟將建立為國內(nèi)第一個(gè)開放性網(wǎng)絡(luò)標(biāo)準(zhǔn)組織,提供XML技術(shù)認(rèn)證、咨詢和交流。由上海易方公司贊助。?


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

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


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

          中國XML郵件組包括中文XML資源,?XML的最新資料,同行的交流空間。由非盈利性組織中國XML聯(lián)盟負(fù)責(zé)維護(hù)。?


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

          一個(gè)XML?FAQ郵件列表的中文翻譯,可惜是1998年10月的?
          posted @ 2006-09-03 17:33 摩西 閱讀(249) | 評論 (0)編輯 收藏
          主站蜘蛛池模板: 汉源县| 齐齐哈尔市| 巫溪县| 商都县| 桦川县| 陆川县| 长葛市| 芜湖市| 贞丰县| 右玉县| 清远市| 澄江县| 马边| 肥乡县| 望江县| 微山县| 烟台市| 大丰市| 蛟河市| 集安市| 崇礼县| 五峰| 资中县| 六枝特区| 陈巴尔虎旗| 遂溪县| 望江县| 平谷区| 镇平县| 太谷县| 蓬溪县| 武邑县| 井研县| 奈曼旗| 汉川市| 吐鲁番市| 光山县| 绵阳市| 拉萨市| 香格里拉县| 乌拉特后旗|