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 奋斗成就男人 阅读(255) | 评论 (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 奋斗成就男人 阅读(234) | 评论 (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 奋斗成就男人 阅读(5379) | 评论 (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 奋斗成就男人 阅读(299) | 评论 (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 奋斗成就男人 阅读(171) | 评论 (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 奋斗成就男人 阅读(169) | 评论 (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 奋斗成就男人 阅读(261) | 评论 (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 奋斗成就男人 阅读(234) | 评论 (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 奋斗成就男人 阅读(319) | 评论 (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 奋斗成就男人 阅读(170) | 评论 (0)编辑 收藏

仅列出标题
共23页: First 上一页 4 5 6 7 8 9 10 11 12 下一页 Last