yxhxj2006

          常用鏈接

          統計

          最新評論

          #

          JAVA正則表達式語法大全

          [正則表達式]文本框輸入內容控制
          整數或者小數:^[0-9]+\.{0,1}[0-9]{0,2}$
          只能輸入數字:"^[0-9]*$"。
          只能輸入n位的數字:"^\d{n}$"。
          只能輸入至少n位的數字:"^\d{n,}$"。
          只能輸入m~n位的數字:。"^\d{m,n}$"
          只能輸入零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。
          只能輸入有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"。
          只能輸入有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"。
          只能輸入非零的正整數:"^\+?[1-9][0-9]*$"。
          只能輸入非零的負整數:"^\-[1-9][]0-9"*$。
          只能輸入長度為3的字符:"^.{3}$"。
          只能輸入由26個英文字母組成的字符串:"^[A-Za-z]+$"。
          只能輸入由26個大寫英文字母組成的字符串:"^[A-Z]+$"。
          只能輸入由26個小寫英文字母組成的字符串:"^[a-z]+$"。
          只能輸入由數字和26個英文字母組成的字符串:"^[A-Za-z0-9]+$"。
          只能輸入由數字、26個英文字母或者下劃線組成的字符串:"^\w+$"。
          驗證用戶密碼:"^[a-zA-Z]\w{5,17}$"正確格式為:以字母開頭,長度在6~18之間,只能包含字符、數字和下劃線。
          驗證是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
          只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$"
          驗證Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
          驗證InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
          驗證電話號碼:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正確格式為:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
          驗證身份證號(15位或18位數字):"^\d{15}|\d{18}$"。
          驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。
          驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為;"01"~"09"和"1"~"31"。
          匹配中文字符的正則表達式: [\u4e00-\u9fa5]
          匹配雙字節字符(包括漢字在內):[^\x00-\xff]
          應用:計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)
          String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;}
          匹配空行的正則表達式:\n[\s| ]*\r
          匹配html標簽的正則表達式:<(.*)>(.*)<\/(.*)>|<(.*)\/>
          匹配首尾空格的正則表達式:(^\s*)|(\s*$)
          應用:javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實現,如下:
          String.prototype.trim = function()
          {
          return this.replace(/(^\s*)|(\s*$)/g, "");
          }
          利用正則表達式分解和轉換IP地址:
          下面是利用正則表達式匹配IP地址,并將IP地址轉換成對應數值的Javascript程序:
          function IP2V(ip)
          {
          re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正則表達式
          if(re.test(ip))
          {
          return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
          }
          else
          {
          throw new Error("Not a valid IP address!")
          }
          }
          不過上面的程序如果不用正則表達式,而直接用split函數來分解可能更簡單,程序如下:
          var ip="10.100.20.168"
          ip=ip.split(".")
          alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
          匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
          匹配網址URL的正則表達式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
          利用正則表達式限制網頁表單里的文本框輸入內容:
          用正則表達式限制只能輸入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
          用正則表達式限制只能輸入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
          用正則表達式限制只能輸入數字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
          用正則表達式限制只能輸入數字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
          <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5\w]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5\w]/g,''))" value="允許下劃線,數字字母和漢字">
          <script language="javascript">
          if (document.layers)//觸發鍵盤事件
          document.captureEvents(Event.KEYPRESS)
          function xz(thsv,nob){
          if(nob=="2"){
          window.clipboardData.setData("text","")
          alert("避免非法字符輸入,請勿復制字符");
          return false;
          }
          if (event.keyCode!=8 && event.keyCode!=16 && event.keyCode!=37 && event.keyCode!=38 && event.keyCode!=39 && event.keyCode!=40){
          thsvv=thsv.value;//輸入的值
          thsvs=thsvv.substring(thsvv.length-1);//輸入的最后一個字符
          //thsvss=thsvv.substring(0,thsvv.length-1);//去掉最后一個錯誤字符
          if (!thsvs.replace(/[^\u4E00-\u9FA5\w]/g,'') || event.keyCode==189){//正則除去符號和下劃線 key
          thsv.value='請勿輸入非法符號 ['+thsvs+']';
          alert('請勿輸入非法符號 ['+thsvs+']');
          thsv.value="";
          return false;
          }
          }
          }
          </script>
          <input onkeyup="xz(this,1)" onPaste="xz(this,2)" value="">允許數字字母和漢字
          <script language="javascript">
          <!--
          function MaxLength(field,maxlimit){
          var j = field.value.replace(/[^\x00-\xff]/g,"**").length;
          //alert(j);
          var tempString=field.value;
          var tt="";
          if(j > maxlimit){
          for(var i=0;i<maxlimit;i++){
          if(tt.replace(/[^\x00-\xff]/g,"**").length < maxlimit)
          tt = tempString.substr(0,i+1);
          else
          break;
          }
          if(tt.replace(/[^\x00-\xff]/g,"**").length > maxlimit)
          tt=tt.substr(0,tt.length-1);
          field.value = tt;
          }else{
          ;
          }
          }
          </script>
          單行文本框控制<br />
          <INPUT type="text" id="Text1" name="Text1" onpropertychange="MaxLength(this, 5)"><br />
          多行文本框控制:<br />
          <TEXTAREA rows="14"
          cols="39" id="Textarea1" name="Textarea1" onpropertychange="MaxLength(this, 15)"></TEXTAREA><br />
          控制表單內容只能輸入數字,中文....
          <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>
          只能是漢字
          <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')">
          只能是英文字符
          <script language=javascript>
          function onlyEng()
          {
          if(!(event.keyCode>=65&&event.keyCode<=90))
              event.returnValue=false;
          }
          </script>
          <input onkeydown="onlyEng();">
          <input name="coname" type="text" size="50" maxlength="35" class="input2" onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">
          只能是數字
          <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();">
          只能是英文字符和數字
          <input onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">
          驗證為email格式
          <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)>
          屏蔽關鍵字(sex , fuck) - 已修改
          <script language="JavaScript1.2">
          function test() {
          if((a.b.value.indexOf ("sex") == 0)||(a.b.value.indexOf ("fuck") == 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>
          限制文本框里只能輸入數字
          <input onkeyup="if(event.keyCode !=37 && event.keyCode != 39) value=value.replace(/\D/g,'');"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/\D/g,''))"> 
          <PIXTEL_MMI_EBOOK_2005>2                                                           </PIXTEL_MMI_EBOOK_2005>
          JAVA正則表達式語法(轉)
          正則表達式語法
          正則表達式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”)。模式描述在搜索文本時要匹配的一個或多個字符串。
          正則表達式示例
          表達式 匹配 
          /^\s*$/
          匹配空行。
          /\d{2}-\d{5}/
          驗證由兩位數字、一個連字符再加 5 位數字組成的 ID 號。
          /<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/
          匹配 HTML 標記。
          下表包含了元字符的完整列表以及它們在正則表達式上下文中的行為:
          字符 說明 
          \
          將下一字符標記為特殊字符、文本、反向引用或八進制轉義符。例如,“n”匹配字符“n”。“\n”匹配換行符。序列“\\”匹配“\”,“\(”匹配“(”。
          ^
          匹配輸入字符串開始的位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 還會與“\n”或“\r”之后的位置匹配。
          $
          匹配輸入字符串結尾的位置。如果設置了 RegExp 對象的 Multiline 屬性,$ 還會與“\n”或“\r”之前的位置匹配。
          *
          零次或多次匹配前面的字符或子表達式。例如,zo* 匹配“z”和“zoo”。* 等效于 {0,}。
          +
          一次或多次匹配前面的字符或子表達式。例如,“zo+”與“zo”和“zoo”匹配,但與“z”不匹配。+ 等效于 {1,}。
          ?
          零次或一次匹配前面的字符或子表達式。例如,“do(es)?”匹配“do”或“does”中的“do”。? 等效于 {0,1}。
          {n}
          n 是非負整數。正好匹配 n 次。例如,“o{2}”與“Bob”中的“o”不匹配,但與“food”中的兩個“o”匹配。
          {n,}
          n 是非負整數。至少匹配 n 次。例如,“o{2,}”不匹配“Bob”中的“o”,而匹配“foooood”中的所有 o。“o{1,}”等效于“o+”。“o{0,}”等效于“o*”。
          {n,m}
          M 和 n 是非負整數,其中 n <= m。匹配至少 n 次,至多 m 次。例如,“o{1,3}”匹配“fooooood”中的頭三個 o。'o{0,1}' 等效于 'o?'。注意:您不能將空格插入逗號和數字之間。
          ?
          當此字符緊隨任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后時,匹配模式是“非貪心的”。“非貪心的”模式匹配搜索到的、盡可能短的字符串,而默認的“貪心的”模式匹配搜索到的、盡可能長的字符串。例如,在字符串“oooo”中,“o+?”只匹配單個“o”,而“o+”匹配所有“o”。
          .
          匹配除“\n”之外的任何單個字符。若要匹配包括“\n”在內的任意字符,請使用諸如“[\s\S]”之類的模式。
          (pattern)
          匹配 pattern 并捕獲該匹配的子表達式。可以使用 $0…$9 屬性從結果“匹配”集合中檢索捕獲的匹配。若要匹配括號字符 ( ),請使用“\(”或者“\)”。
          (?:pattern)
          匹配 pattern 但不捕獲該匹配的子表達式,即它是一個非捕獲匹配,不存儲供以后使用的匹配。這對于用“or”字符 (|) 組合模式部件的情況很有用。例如,'industr(?:y|ies) 是比 'industry|industries' 更經濟的表達式。
          (?=pattern)
          執行正向預測先行搜索的子表達式,該表達式匹配處于匹配 pattern 的字符串的起始點的字符串。它是一個非捕獲匹配,即不能捕獲供以后使用的匹配。例如,'Windows (?=95|98|NT|2000)' 匹配“Windows 2000”中的“Windows”,但不匹配“Windows 3.1”中的“Windows”。預測先行不占用字符,即發生匹配后,下一匹配的搜索緊隨上一匹配之后,而不是在組成預測先行的字符后。
          (?!pattern)
          執行反向預測先行搜索的子表達式,該表達式匹配不處于匹配 pattern 的字符串的起始點的搜索字符串。它是一個非捕獲匹配,即不能捕獲供以后使用的匹配。例如,'Windows (?!95|98|NT|2000)' 匹配“Windows 3.1”中的 “Windows”,但不匹配“Windows 2000”中的“Windows”。預測先行不占用字符,即發生匹配后,下一匹配的搜索緊隨上一匹配之后,而不是在組成預測先行的字符后。
          x|y
          匹配 x 或 y。例如,'z|food' 匹配“z”或“food”。'(z|f)ood' 匹配“zood”或“food”。
          [xyz]
          字符集。匹配包含的任一字符。例如,“[abc]”匹配“plain”中的“a”。
          [^xyz]
          反向字符集。匹配未包含的任何字符。例如,“[^abc]”匹配“plain”中的“p”。
          [a-z]
          字符范圍。匹配指定范圍內的任何字符。例如,“[a-z]”匹配“a”到“z”范圍內的任何小寫字母。
          [^a-z]
          反向范圍字符。匹配不在指定的范圍內的任何字符。例如,“[^a-z]”匹配任何不在“a”到“z”范圍內的任何字符。
          \b
          匹配一個字邊界,即字與空格間的位置。例如,“er\b”匹配“never”中的“er”,但不匹配“verb”中的“er”。
          \B
          非字邊界匹配。“er\B”匹配“verb”中的“er”,但不匹配“never”中的“er”。
          \cx
          匹配 x 指示的控制字符。例如,\cM 匹配 Control-M 或回車符。x 的值必須在 A-Z 或 a-z 之間。如果不是這樣,則假定 c 就是“c”字符本身。
          \d
          數字字符匹配。等效于 [0-9]。
          \D
          非數字字符匹配。等效于 [^0-9]。
          \f
          換頁符匹配。等效于 \x0c 和 \cL。
          \n
          換行符匹配。等效于 \x0a 和 \cJ。
          \r
          匹配一個回車符。等效于 \x0d 和 \cM。
          \s
          匹配任何空白字符,包括空格、制表符、換頁符等。與 [ \f\n\r\t\v] 等效。
          \S
          匹配任何非空白字符。與 [^ \f\n\r\t\v] 等效。
          \t
          制表符匹配。與 \x09 和 \cI 等效。
          \v
          垂直制表符匹配。與 \x0b 和 \cK 等效。
          \w
          匹配任何字類字符,包括下劃線。與“[A-Za-z0-9_]”等效。
          \W
          與任何非單詞字符匹配。與“[^A-Za-z0-9_]”等效。
          \xn
          匹配 n,此處的 n 是一個十六進制轉義碼。十六進制轉義碼必須正好是兩位數長。例如,“\x41”匹配“A”。“\x041”與“\x04”&“1”等效。允許在正則表達式中使用 ASCII 代碼。
          \num
          匹配 num,此處的 num 是一個正整數。到捕獲匹配的反向引用。例如,“(.)\1”匹配兩個連續的相同字符。
          \n
          標識一個八進制轉義碼或反向引用。如果 \n 前面至少有 n 個捕獲子表達式,那么 n 是反向引用。否則,如果 n 是八進制數 (0-7),那么 n 是八進制轉義碼。
          \nm
          標識一個八進制轉義碼或反向引用。如果 \nm 前面至少有 nm 個捕獲子表達式,那么 nm 是反向引用。如果 \nm 前面至少有 n 個捕獲,則 n 是反向引用,后面跟有字符 m。如果兩種前面的情況都不存在,則 \nm 匹配八進制值 nm,其中 n 和 m 是八進制數字 (0-7)。
          \nml
          當 n 是八進制數 (0-3),m 和 l 是八進制數 (0-7) 時,匹配八進制轉義碼 nml。
          \un
          匹配 n,其中 n 是以四位十六進制數表示的 Unicode 字符。例如,\u00A9 匹配版權符號 (?)。

          posted @ 2014-01-15 00:16 奮斗成就男人 閱讀(261) | 評論 (0)編輯 收藏

          MyEclipse設置編碼方式

          MyEclipse設置編碼方式
          1、windows->Preferences……打開"首選項"對話框,左側導航樹,導航到general->Workspace,
          右側Text file encoding,選擇Other,改變為UTF-8,以后新建立工程其屬性對話框中的Text file encoding即為UTF-8.
           
          2、 windows->Preferences……打開"首選項"對話框,左側導航樹,導航到general->Content Types,右側Context Types樹,點開Text中每一顆子項,并在中輸入"UTF-8",點update! 其他java應用開發相關的文件如:properties、XML等已經由Eclipse缺省指定,分別為ISO8859-1,UTF-8,如開發中確需 改變編碼格式則可以在此指定。
           
          3、window——>preference——>MyEclipse——>Files and Editors,將每個子項的"Encoding"改為"ISO 10645/Unicode(UTF-8)",點Apply! 
           
          4、 選中工程---->右鍵--->properties---->Resource---->Text Fiel Encoding---->設置成UTF-8
          4、經過上述三步,新建java文件即為UTF-8編碼,Eclipse編譯、運行、調試都沒問題。

          posted @ 2014-01-14 23:59 奮斗成就男人 閱讀(242) | 評論 (0)編輯 收藏

          myeclipse中java文件頭注釋格式設置

          myeclipse中java文件頭注釋格式設置  

          windows->preferences->java->Code Templates->comments->Type->edit 
          Eclipse注釋規范模版總結
          新建類文件
          /**
           * @ClassName:     ${file_name}
           * @Description:   ${todo}(用一句話描述該文件做什么) 
           * 
           * @author         ${user}
           * @version        V1.0  
           * @Date           ${date} ${time} 
           */
          方法
          /** 
           * @Title:        ${enclosing_method} 
           * @Description:  ${todo}(這里用一句話描述這個方法的作用) 
           * @param:        ${tags}    
           * @return:       ${return_type}    
           * @throws 
           * @author        ${user}
           * @Date          ${date} ${time} 
           */
          輸入設置模板: 
          /**      
          * ${file_name} Create on ${date}     
          *      
          * Copyright (c) ${date} by taotaosoft      
          *      
          @author <a href="xiuzhong.li@gmail.com">Jerryli</a>     
          @version 1.0 
          *     
          */ 
          注意選擇自動添加注釋,養成一個規范的習慣是最好的。 
          選菜單 
          windows-->preference  --> Java-->Code Style-->Code Templates  --> code-->new Java files 
          選中點編輯 
          ${filecomment} 
          ${package_declaration} 
          /** 
          @author 作者姓名  E-mail: email地址 
          @version 創建時間:${date} ${time} 
          * 類說明 
          */ 
          ${typecomment} 
          ${type_declaration} 
            
           Eclipse注釋規范模版總結
          1、  具體操作
          (1)在eclipse中,打開Window->Preference->Java->Code Style->Code Template
          (2)然后展開Comments節點就是所有需設置注釋的元素,參照2注釋規范對應設置即可
          2、  注釋規范
          (1)文件(Files)注釋標簽
          /**
           * FileName:     ${file_name}
           * @Description: ${todo}(用一句話描述該文件做什么)
          * All rights Reserved, Designed By ZTE-ITS
           * Copyright:    Copyright(C) 2010-2011
           * Company       ZTE-ITS WuXi LTD.
           * @author:    名字
           * @version    V1.0 
           * Createdate:         ${date} ${time}
           *
           * Modification  History:
           * Date         Author        Version        Discription
           * -----------------------------------------------------------------------------------
           * ${date}       wu.zh          1.0             1.0
           * Why & What is modified: <修改原因描述>
           */
           
          (2)類型(Types)注釋標簽(類的注釋):
           /**
           * @ClassName:     ${type_name}
           * @Description:${todo}(這里用一句話描述這個類的作用)
           * @author:    Android_Robot
           * @date:        ${date} ${time}
           *
           * ${tags}
           */
           
          (3)字段(Fields)注釋標簽:
           /**  
           * @Fields ${field} : ${todo}(用一句話描述這個變量表示什么)   
           */  
            
          (4)構造函數標簽:
           /**
           * @Title:        ${enclosing_type}
           * @Description:    ${todo}(這里用一句話描述這個方法的作用)
           * @param:    ${tags}
           * @throws
           */
           
          (5)方法(Methods)標簽:
          /**
           * @Title: ${enclosing_method}
           * @Description: ${todo}(這里用一句話描述這個方法的作用)
           * @param: ${tags}   
           * @return: ${return_type}   
           * @throws
           */
           
          (6)覆蓋方法(Overriding Methods)標簽:
           /**
           * <p>Title: ${enclosing_method}</p>
           * <p>Description: </p>
           * ${tags}
           * ${see_to_overridden}
           */
           
          (7)代表方法(Delegate Methods)標簽:
          /**
           * ${tags}
           * ${see_to_target}
           */
           
          (8)getter方法標簽:
          /**
           * @Title:        ${enclosing_method} <BR>
           * @Description: please write your description <BR>
           * @return:     ${field_type} <BR>
           */
           
          (9)setter方法標簽:
          /** 
           * @Title:  ${enclosing_method} <BR> 
           * @Description: please write your description <BR> 
           * @return: ${field_type} <BR> 
           */ 

          posted @ 2014-01-14 23:23 奮斗成就男人 閱讀(5399) | 評論 (0)編輯 收藏

          WebLogic設置session超時時間

          說明:本文轉載自http://hi.baidu.com/%BF%AA%D0%C4%BE%CD%BA%C3_999/blog/item/cbc81c4a9666d32608f7efd7.html


          2008年06月05日 星期四 21:23

          WebLogic如何設置session超時時間
          1 web.xml

          設置WEB應用程序描述符web.xml里的<session-timeout>元素。這個值以分鐘為
          單位,并覆蓋weblogic.xml中的TimeoutSecs屬性
          <session-config>
              <session-timeout>54</session-timeout>
          </session-config>
          此例表示Session將在54分鐘后過期
          當<session-timeout>設置為-2,表示將使用在weblogic.xml中設置的
          TimeoutSecs這個屬性值。
          當<session-timeout>設置為-1,表示Session將永不過期,而忽略在
          weblogic.xml中設置的TimeoutSecs屬性值。
          該屬性值可以通過console控制臺來設置

          2 weblogic.xml

          設置WebLogic特有部署描述符weblogic.xml的<session-descriptor>元素的
          TimeoutSecs屬性。這個值以秒為單位
          <session-descriptor>
             <session-param>
                <param-name>TimeoutSecs</param-name>
                <param-value>3600</param-value>
             </session-param>
          </session-descriptor>
          默認值是3600秒

          3,jsp中控制
          session.setmaxinactiveinterval(7200);
          session是默認對象,可以直接引用,單位秒s

          4,servlet中控制
          httpsession session = request.getsession();
          session.setmaxinactiveinterval(7200);
          單位秒s

          在weblgoic的console中:xxDomain->Servers->xxServer->Protocols->HTTP 中有一個關于Post Timeout的配置,但這個參數一般使用默認值即可

          一般是通過Services-->JDBC-->Connection Pools-->MyConnection(你所建立的連接池名)-->Configration-->Connections 里的Inactive Connection Timeout這個參數來設置的,默認的為0,表示連接時間無限長。你可以設一個時間值,連接超過這個時間值,它會把連接強制放回連接池

          <Server AcceptBacklog="62" CompleteHTTPMessageTimeout="480"
          CompleteMessageTimeout="480" IdleConnectionTimeout="600"
          ListenAddress="" ListenPort="7001" Name="myserver"
          NativeIOEnabled="true" ReliableDeliveryPolicy="RMDefaultPolicy"
          ServerVersion="8.1.4.0">
          是否IdleConnectionTimeout參數

          看連接池中高級選項內的Inactive Connection Timeout和Connection Reserve Timeout時多少, 把這兩項設大些試試

          如果在兩個文件中同時設置了超時時間,則會以web.xml中為準。
          所以在weblogic環境中,最好將web.xml中關于超時的設置刪掉,保持唯一性。
          這也是一個客戶發現了問題后,多次實驗后發現的。

           

           

           

          如果使用WEBLOGIC作為應用服務器,設置SESSION超時時間會選擇在WEBLOGIC的控制臺設定。實際上,WEBLOGIC是將超時設定保存在WEB-INF下的weblogic.xml中,格式如下:
          <session-descriptor>
              <session-param>
                <param-name>TimeoutSecs</param-name>
                <param-value>7200</param-value>
              </session-param>
          </session-descriptor>
          param-value中的數值就是超時時間,單位為秒。在設置完這個參數后,會發現超時時間并一定起效。這是為什么呢?
          原來在WEB-INF下還有一個配置文件web.xml,里面同樣會有一段設置session,格式如下:

          <session-config>

              <session-timeout>30</session-timeout>

          </session-config>
          session-timeout中的值也是超時時間,單位為分鐘。
          如果在兩個文件中同時設置了超時時間,則會以web.xml中為準。
          所以在weblogic環境中,最好將web.xml中關于超時的設置刪掉,保持唯一性。

          這也是一個客戶發現了問題后,多次實驗后發現的。

           

           

          今天上午聯創科技的一個朋友問題一個他們的問題.出現大量的:

          ueue: ‘billproxyqueue’ has been busy for “727″ seconds working on the request “Http Request: /bill/y
          nQueryPublic.go”, which is more than the configured time (StuckThreadMaxTime) of “600″ seconds.>

          一看明顯是連接超時, 導致的錯誤.

          1. 程序問題,是不是程序中沒有關閉連接
          2. 如果程序沒問題,則是weblogic的StuckThreadMaxTime設置過小而引起的,一般weblogic server 的StuckThreadMaxTime默認參數是600s,即10分鐘,如果并發量過大,而導致等待處理過多,導致系統不停的增加線程,造成線程阻塞,你可以把該參數設置大點這個是稍微調大StuckThreadMaxTime的參數即可.
          3. 看線程數設置,可適當增加線程數,這個在WLS控制臺中可以調整

          posted @ 2013-12-06 12:27 奮斗成就男人 閱讀(307) | 評論 (0)編輯 收藏

          cookie與session的關系

          為什么會有cookie呢,大家都知道,http是無狀態的協議,客戶每次讀取web頁面時,服務器都打開新的會話,而且服務器也不會自動維護客戶的上下文信息,那么要怎么才能實現網上商店中的購物車呢,session就是一種保存上下文信息的機制,它是針對每一個用戶的,變量的值保存在服務器端,通過 SessionID來區分不同的客戶,session是以cookie或URL重寫為基礎的,默認使用cookie來實現,系統會創造一個名為 JSESSIONID的輸出cookie,我們叫做session cookie,以區別persistent cookies,也就是我們通常所說的cookie,注意session cookie是存儲于瀏覽器內存中的,并不是寫到硬盤上的,這也就是我們剛才看到的JSESSIONID,我們通常情是看不到JSESSIONID的,但是當我們把瀏覽器的cookie禁止后,web服務器會采用URL重寫的方式傳遞Sessionid,我們就可以在地址欄看到 sessionid=KWJHUG6JJM65HS2K6之類的字符串。 
                  明白了原理,我們就可以很容易的分辨出persistent cookies和session cookie的區別了,網上那些關于兩者安全性的討論也就一目了然了,session cookie針對某一次會話而言,會話結束session cookie也就隨著消失了,而persistent cookie只是存在于客戶端硬盤上的一段文本(通常是加密的),而且可能會遭到cookie欺騙以及針對cookie的跨站腳本攻擊,自然不如 session cookie安全了。 
                  通常session cookie是不能跨窗口使用的,當你新開了一個瀏覽器窗口進入相同頁面時,系統會賦予你一個新的sessionid,這樣我們信息共享的目的就達不到了,此時我們可以先把sessionid保存在persistent cookie中,然后在新窗口中讀出來,就可以得到上一個窗口SessionID了,這樣通過session cookie和persistent cookie的結合我們就實現了跨窗口的session tracking(會話跟蹤)。 
                  在一些web開發的書中,往往只是簡單的把Session和cookie作為兩種并列的http傳送信息的方式,session cookies位于服務器端,persistent cookie位于客戶端,可是session又是以cookie為基礎的,明白的兩者之間的聯系和 
          區別,我們就不難選擇合適的技術來開發web service了 
          cookie 
          Session是由應用服務器維持的一個服務器端的存儲空間,用戶在連接服務器時,會由服務器生成一個唯一的SessionID,用該SessionID 為標識符來存取服務器端的Session存儲空間。而SessionID這一數據則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一 SessionID提交到服務器端,來存取Session數據。這一過程,是不用開發人員干預的。所以一旦客戶端禁用Cookie,那么Session也會失效。 

          服務器也可以通過URL重寫的方式來傳遞SessionID的值,因此不是完全依賴Cookie。如果客戶端Cookie禁用,則服務器可以自動通過重寫URL的方式來保存Session的值,并且這個過程對程序員透明。 

          可以試一下,即使不寫Cookie,在使用request.getCookies();取出的Cookie數組的長度也是1,而這個Cookie的名字就是JSESSIONID,還有一個很長的二進制的字符串,是SessionID的值。 
          Cookie是客戶端的存儲空間,由瀏覽器來維持。
           
          總結:
          1:cookie是通過頭部header返回到瀏覽器中并保存在磁盤中,下次再次訪問該服務器中。瀏覽器會自動把該cookie傳輸到服務器中。
          2:Session與Cookie是一對的,Session使用的基礎就是cookie。
          3:cookie分為兩種,如果設置cookie時沒有設置有效時間,就表示該cookie是臨時性的,只保存在瀏覽器的內存中,即seesion-cookie,只要關閉瀏覽器,該cookie即將消失。
                                    如果cookie設置了有效時間,就表示該cookie是持久化的,即persistent cookie。此外還可以為持久化cookie設置域名和路徑。
          4:當禁止cookie后,就返回通過url地址返回cookie Id。
          5:如來是否自定義cookie值,服務器都會自動產生一個cookie值,名稱為:
          JSESSIONID,而值就是服務器中的sessionid值。

          創建cookie的步驟: 以java為例:
           1: 創建cookie對象:Cookie cookie = new Cookie("cookiename","cookievalue"); 
           2:設置有效期:cookie.setMaxAge(3600); 
           3:設置路徑:cookie.setPath("/"); //設置路徑,這個路徑即該工程下都可以訪問該cookie 如果不設置路徑,那么只有設置該cookie路徑及其子路徑可以訪問 
           4:設置域名:cookie.setDomain(".zl.org") ;  //域名要以“.”開頭 
           5:在返回對象中添加cookie對象:response.addCookie(cookie) ; 
           6:返回對象response其他的操作。

          以下為Java操作Cookie實例:
          java對cookie的操作比較簡單,主要介紹下建立cookie和讀取cookie,以及如何設定cookie的生命周期和cookie的路徑問題。

          建立一個無生命周期的cookie,即隨著瀏覽器的關閉即消失的cookie,代碼如下

          HttpServletRequest request  
          HttpServletResponse response
          Cookie cookie = new Cookie("cookiename","cookievalue");
          response.addCookie(cookie);
           
          下面建立一個有生命周期的cookie,可以設置他的生命周期

          cookie = new Cookie("cookiename","cookievalue");
           
          cookie.setMaxAge(3600);
           
          //設置路徑,這個路徑即該工程下都可以訪問該cookie 如果不設置路徑,那么只有設置該cookie路徑及其子路徑可以訪問
           
          cookie.setPath("/");
          response.addCookie(cookie);
           

          下面介紹如何讀取cookie,讀取cookie代碼如下

          Cookie[] cookies = request.getCookies();//這樣便可以獲取一個cookie數組
          for(Cookie cookie : cookies){
              cookie.getName();// get the cookie name
              cookie.getValue(); // get the cookie value
          }
           

          上面就是基本的讀寫cookie的操作。我們在實際中最好進行一下封裝,比如增加一個cookie,我們關注的是cookie的name,value,生命周期,所以進行封裝一個函數,當然還要傳入一個response對象,addCookie()代碼如下

          /**
           * 設置cookie
           * 
          @param response
           * 
          @param name  cookie名字
           * 
          @param value cookie值
           * 
          @param maxAge cookie生命周期  以秒為單位
           
          */
          public static void addCookie(HttpServletResponse response,String name,String value,int maxAge){
              Cookie cookie = new Cookie(name,value);
              cookie.setPath("/");
              if(maxAge>0)  cookie.setMaxAge(maxAge);
              response.addCookie(cookie);
          }
           

          讀取cookie的時候,為了方便我們的操作,我們希望封裝一個函數,只要我們提供cookie的name,我們便可以獲取cookie的value,帶著這個想法,很容易想到將cookie封裝到Map里面,于是進行下面的封裝.
          /**
           * 根據名字獲取cookie
           * 
          @param request
           * 
          @param name cookie名字
           * 
          @return
           
          */
          public static Cookie getCookieByName(HttpServletRequest request,String name){
              Map<String,Cookie> cookieMap = ReadCookieMap(request);
              if(cookieMap.containsKey(name)){
                  Cookie cookie = (Cookie)cookieMap.get(name);
                  return cookie;
              }else{
                  return null;
              }   
          }
            
          /**
           * 將cookie封裝到Map里面
           * 
          @param request
           * 
          @return
           
          */
          private static Map<String,Cookie> ReadCookieMap(HttpServletRequest request){  
              Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
              Cookie[] cookies = request.getCookies();
              if(null!=cookies){
                  for(Cookie cookie : cookies){
                      cookieMap.put(cookie.getName(), cookie);
                  }
              }
              return cookieMap;
          }

          posted @ 2013-11-26 00:01 奮斗成就男人 閱讀(177) | 評論 (0)編輯 收藏

          Java中Cookie的使用

          1、Cookie的來歷與作用

          Cookie是WEB服務器通過瀏覽器保存在WWW用戶端硬盤上的一個文本文件,這個文本文件中包含了文本信息。
          文本信息的內容以“名/值”對(key/value)的形式進行存儲。
          可以讓WEB開發者通過程序讀寫這個文本文件。
          XP中保存Cookie的目錄是“C://Documents and Settings\用戶名\Cookies”
          Cookie的作用
          解決瀏覽器用戶與Web服務器之間無狀態通信。
          2Cookie編程

          //創建對象
          Date date = new Date() ;
          Cookie c = new Cookie("lastVisited",date.toString()) ;
          //設定有效時間  以s為單位
          c.setMaxAge(60) ;
          //設置Cookie路徑和域名
          c.setPath("/") ;
          c.setDomain(".zl.org") ;  //域名要以“.”開頭
          //發送Cookie文件
          response.addCookie(c) ;
          //讀取Cookie
          Cookie cookies[] = request.getCookies() ;
          Cookie c1 = null ;
          if(cookies != null){
              for(int i=0;i<cookies.length;i++){
                 c1 = cookies[i] ;
                 out.println("cookie name : " + c1.getName() + "   ") ;
                 out.println("cookie value :" + c1.getValue() + "<br>");
              }
          }
          //修改Cookie
          Cookie cookies[] = request.getCookies() ;
          Cookie c = null ;
          for(int i=0;i<cookies.length;i++){
             c = cookies[i] ;
             if(c.getName().equals("lastVisited")){
                c.setValue("2010-04-3-28") ;
                c.setMaxAge(60*60*12) ;
                response.addCookie(c) ;     //修改后,要更新到瀏覽器中    
             }
          }

          //刪除Cookie,(將Cookie的有效時間設為0)
          Cookie cookies[] = request.getCookies() ;
          Cookie c = null ;
          for(int i=0;i<cookies.length;i++){
             c = cookies[i] ;
             if(c.getName().equals("lastVisited")){
                c.setMaxAge(0);
                response.addCookie(c) ;
             }
          }
           
          4、使用Cookie的注意事項

          ·Cookie的大小和數量是有限制的。
          ·Cookie在個人硬盤上所保存的文本信息是以明文格式進行保存的,沒有任何的加密措施。
          ·瀏覽器用戶可以設定不使用Cookie。
          5、實例:Servlet中的Cookie編程

           cookieInput.html頁面
           
          SetCookie.java
           
          GetCookie.java
           
           
          cookieInput.html頁面中的參數提交到SetCookie.java中,由SetCookie.java保存在瀏覽器的Cookie中,在SerCookie.java中鏈接到GetCookie.java從而讀取剛剛保存的Cookie。

          SetCookie.java :
          public void doPost(HttpServletRequest request, HttpServletResponse response)
                      throws ServletException, IOException {
           
                  response.setContentType("text/html;charset=utf-8");
                  PrintWriter out = response.getWriter();
                  String username = request.getParameter("username") ;
                  //保存Cookie
                  if(username !=""){
                      Cookie c1 = new Cookie("username",username) ;
                      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;
                      Cookie c2 = new Cookie("lastVisited",sdf.format(new java.util.Date())) ;
                      c1.setMaxAge(60*60*60*12*30) ;
                      c2.setMaxAge(60*60*60*12*30) ;
                      response.addCookie(c1) ;
                      response.addCookie(c2) ;
                      out.println("Cookie保存成功!");
                      out.println("<br><br>") ;
                      out.println("<a href=GetCookie02>讀取Cookie</a>") ;
                  }else{
                      response.sendRedirect("../cookieInput.html") ;
                  }
                 
                 
                  out.flush();
                  out.close();
              }
           
          GetCookie.java:
          public void doPost(HttpServletRequest request, HttpServletResponse response)
                      throws ServletException, IOException {
           
                  response.setContentType("text/html;charset=utf-8");
                  PrintWriter out = response.getWriter();
                  out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
                  out.println("<HTML>");
                  out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
                  out.println("  <BODY>");
                 
                  //讀取Cookie
                  Cookie cookies[] = request.getCookies() ;
                  Cookie c = null ;
                  if(cookies != null){
                      for(int i=0;i<cookies.length;i++){
                          c = cookies[i] ;
                          if(c.getName().equals("username")){
                              out.println("用戶名: "+c.getValue());
                              out.println("<br>");
                          }
                          if(c.getName().equals("lastVisited")){
                              out.println("上次登錄的時間: "+c.getValue());
                          }
                      }
                  }else{
                      out.println("No cookie !");
                  }
                 
                  out.println("  </BODY>");
                  out.println("</HTML>");
                  out.flush();
                  out.close();
              }

          posted @ 2013-11-25 22:15 奮斗成就男人 閱讀(174) | 評論 (0)編輯 收藏

          Java讀取目錄下Txt文本

            /**
               * 功能:Java讀取目錄下txt文件的內容
               * 步驟:先獲得目錄句柄,如果是文件直接讀取文件,如果是目錄,繼續迭代處理
               * 
          @param directoryPath
               
          */
              public static void readTxtDirectory(String directoryPath){
                  File dir = new File(directoryPath);
                  if(dir.isFile()) {           //讀取文件
                      readTxtFile(directoryPath);   
                  } else if(dir.isDirectory()) {    //讀取目錄
                      File[] files = dir.listFiles();
                      for(int i=0;i<files.length;i++){
                          System.out.println((files[i].isDirectory()?"目錄 :":"文件 :")+files[i].getName());
                          if(files[i].isFile()) {
                              readTxtFile(files[i].getAbsolutePath());
                          } else {
                              readTxtDirectory(files[i].getAbsolutePath());
                          }
                      }
                  } else { 
                       System.out.println("路徑不存在!");
                  }
              }
              
               /**
               * 功能:Java讀取Txt文件的內容
               * 步驟:1:先獲得文件句柄
               * 2:獲得文件句柄當做是輸入一個字節碼流,需要對這個輸入流進行讀取
               * 3:讀取到輸入流后,需要讀取生成字節流
               * 4:一行一行的輸出。readline()。
               * 備注:需要考慮的是異常情況
               * 
          @param filePath
               
          */
              public static void readTxtFile(String filePath){
                  try {
                          String encoding="GBK";
                          File file = new File(filePath);
                          if(file.isFile() && file.exists()){ //判斷文件是否存在
                              InputStreamReader read = new InputStreamReader(
                              new FileInputStream(file),encoding);//考慮到編碼格式
                              BufferedReader bufferedReader = new BufferedReader(read);
                              String lineTxt = null;
                              while((lineTxt = bufferedReader.readLine()) != null){
                                  lineTxt = lineTxt.trim();
                                  if(lineTxt.length() > 0) {
                                      String regEx = "[' ']+"; // 一個或多個空格  
                                      Pattern p = Pattern.compile(regEx);  
                                      Matcher m = p.matcher(lineTxt);
                                      String[] txtArray = m.replaceAll(";").trim().split(";");
                                      if(txtArray.length == 6 && txtArray[0].length() == 15) {
                                          System.out.println(lineTxt);
                                      }    
                                  }
                              }
                              read.close();
                          } else {
                              System.out.println("文件不存在!");
                          }
                  } catch (Exception e) {
                      System.out.println("讀取文件內容出錯");
                      e.printStackTrace();
                  }
              }

          posted @ 2013-11-21 19:24 奮斗成就男人 閱讀(266) | 評論 (0)編輯 收藏

          HttpClient 4 和 HttpClient 3 設置超時

          HttpClient 4:

          連接超時:
          httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,60000);
          // 或者
          HttpConnectionParams.setConnectionTimeout(params, 6000);

          讀取超時:
          httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,60000);
          // 或者
          HttpConnectionParams.setSoTimeout(params, 60000);


          HttpClient 3:

          連接超時:
          httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);

          讀取超時:
          httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000);

          設置get方法請求超時為 5 秒
          GetMethod getMethod= new  GetMethod(url);    
          getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,5000 ); 

          設置連接超時和請求超時,這兩個超時的意義不同,需要分別設置

          posted @ 2013-11-13 20:54 奮斗成就男人 閱讀(240) | 評論 (0)編輯 收藏

          同步靜態方法

          問:當定義了方法A和方法B,當實例化類后,多線程如何保證調用方法A時方法B即使被調用也不會被執行?Java有保證這種機制的關鍵字嗎?

          答:用 synchronized 搜索修飾方法   例如: 
          public class O
          {
          public synchronized void A(){}
          public synchronized void B(){}
          }
          同一個類中的所有synchronized修飾的方法是不能同時調用的,也就是說同時只能調用其中一個方法,比如線程1調用A方法,在A方法執行完之前,線程2調用B方法,這個時候線程2就會阻塞,直到線程1調用完A方法后,線程2才開始執行B方法!

          還有一個解決方法就是加一個同步對象鎖

          public class O
          {
          Object lock;
          public void A()
          {
          synchronized(lock)
          {
          //這里寫方法內容
          }
          }
          public void B()
          {
          synchronized(lock)
          {
          //這里寫方法內容
          }
          }
          }


          注意:同一個類中所有的同步的靜態方法,它們在類范圍類是同步的,也就是同一時間只能有一個線程可以訪問所有同步靜態方法中的一個。

           

          不同類中的靜態同步方法互不影響。前面所說,靜態同步方法是類級別的,也就是以類為單位進行控制的。如果兩個線程訪問不同類中的同步方法,這兩個線程是不需要等待的,即使是靜態方法。





          posted @ 2013-11-06 19:29 奮斗成就男人 閱讀(325) | 評論 (0)編輯 收藏

          如何在Oracle中復制表結構和表數據

          如何在Oracle中復制表結構和表數據 

          1. 復制表結構及其數據:

          create table table_name_new as select * from table_name_old

          2. 只復制表結構:

          create table table_name_new as select * from table_name_old where 1=2;

          或者:

          create table table_name_new like table_name_old

          3. 只復制表數據:

          如果兩個表結構一樣:

          insert into table_name_new select * from table_name_old

          如果兩個表結構不一樣:

          insert into table_name_new(column1,column2...) select column1,column2... from table_name_old

          posted @ 2013-11-05 21:29 奮斗成就男人 閱讀(174) | 評論 (0)編輯 收藏

          僅列出標題
          共23頁: First 上一頁 4 5 6 7 8 9 10 11 12 下一頁 Last 
          主站蜘蛛池模板: 荥经县| 福清市| 南江县| 乌鲁木齐市| 武陟县| 法库县| 班玛县| 凤台县| 中卫市| 通榆县| 沙洋县| 永善县| 吉木萨尔县| 浑源县| 饶阳县| 和顺县| 山丹县| 紫阳县| 嘉鱼县| 肥东县| 屯留县| 武宣县| 泸溪县| 闽清县| 印江| 玛曲县| 呼图壁县| 鹤山市| 满洲里市| 大理市| 汾西县| 广州市| 且末县| 乐安县| 福泉市| 张北县| 田阳县| 余庆县| 清原| 曲松县| 资中县|