#
serialVersionUID作用:
序列化時(shí)為了保持版本的兼容性,即在版本升級(jí)時(shí)反序列化仍保持對象的唯一性。
有兩種生成方式:
一個(gè)是默認(rèn)的1L,比如:private static final long serialVersionUID = 1L;
一個(gè)是根據(jù)類名、接口名、成員方法及屬性等來生成一個(gè)64位的哈希字段,比如:
private static final long serialVersionUID = xxxxL;
當(dāng)你一個(gè)類實(shí)現(xiàn)了Serializable接口,如果沒有定義serialVersionUID,Eclipse會(huì)提供這個(gè)
提示功能告訴你去定義 。在Eclipse中點(diǎn)擊類中warning的圖標(biāo)一下,Eclipse就會(huì)
自動(dòng)給定兩種生成的方式。如果不想定義它,在Eclipse的設(shè)置中也
可以把它關(guān)掉的,設(shè)置如下:
Window ==> Preferences ==> Java ==> Compiler ==>
Error/Warnings ==>
Potential programming problems
將Serializable class without serialVersionUID的warning改成ignore即可。
如果你沒有考慮到兼容性問題時(shí),就把它關(guān)掉,不過有這個(gè)功能是好的,只要任何類別實(shí)現(xiàn)了Serializable這個(gè)接口的話,如果沒有加入
serialVersionUID,Eclipse都會(huì)給你warning提示,這個(gè)serialVersionUID為了讓該類別
Serializable向后兼容。
如果你的類Serialized存到硬盤上面后,可是后來你卻更改了類別的field(增加或減少或改名),當(dāng)你Deserialize時(shí),就會(huì)出現(xiàn)
Exception的,這樣就會(huì)造成不兼容性的問題。
但當(dāng)serialVersionUID相同時(shí),它就會(huì)將不一樣的field以type的預(yù)設(shè)值Deserialize,可避開不兼容性問題。
ApplicationContext wac = WebApplicationContextUtils .getRequiredWebApplicationContext(config.getServletContext());
環(huán)境->虛擬主機(jī)->default_host->其它屬性(主機(jī)別名)->修改端口
服務(wù)器->應(yīng)用程序服務(wù)器->server1->端口->WC_defaulthost->修改端口
/* 追加自定義驗(yàn)證方法 */
// 身份證號(hào)碼驗(yàn)證
jQuery.validator.addMethod("idcardno", function(value, element) {
return this.optional(element) || isIdCardNo(value);
}, "請正確輸入身份證號(hào)碼");
//字母數(shù)字
jQuery.validator.addMethod("alnum", function(value, element) {
return this.optional(element) || /^[a-zA-Z0-9]+$/.test(value);
}, "只能包括英文字母和數(shù)字");
// 手機(jī)號(hào)碼驗(yàn)證
jQuery.validator.addMethod("cellphone", function(value, element) {
var length = value.length;
return this.optional(element) || (length == 11 && /^(1\d{10})$/.test(value));
}, "請正確填寫手機(jī)號(hào)碼");
// 電話號(hào)碼驗(yàn)證
jQuery.validator.addMethod("telephone", function(value, element) {
var tel = /^(\d{3,4}-?)?\d{7,9}$/g;
return this.optional(element) || (tel.test(value));
}, "請正確填寫電話號(hào)碼");
// 郵政編碼驗(yàn)證
jQuery.validator.addMethod("zipcode", function(value, element) {
var tel = /^[0-9]{6}$/;
return this.optional(element) || (tel.test(value));
}, "請正確填寫郵政編碼");
// 漢字
jQuery.validator.addMethod("chcharacter", function(value, element) {
var tel = /^[\u4e00-\u9fa5]+$/;
return this.optional(element) || (tel.test(value));
}, "請輸入漢字");
/**
* 身份證號(hào)碼驗(yàn)證
*
*/
function isIdCardNo(num) {
var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
var parityBit=new Array("1","0","X","9","8","7","6","5","4","3","2");
var varArray = new Array();
var intValue;
var lngProduct = 0;
var intCheckDigit;
var intStrLen = num.length;
var idNumber = num;
// initialize
if ((intStrLen != 15) && (intStrLen != 18)) {
return false;
}
// check and set value
for(i=0;i<intStrLen;i++) {
varArray[i] = idNumber.charAt(i);
if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
return false;
} else if (i < 17) {
varArray[i] = varArray[i] * factorArr[i];
}
}
if (intStrLen == 18) {
//check date
var date8 = idNumber.substring(6,14);
if (isDate8(date8) == false) {
return false;
}
// calculate the sum of the products
for(i=0;i<17;i++) {
lngProduct = lngProduct + varArray[i];
}
// calculate the check digit
intCheckDigit = parityBit[lngProduct % 11];
// check last digit
if (varArray[17] != intCheckDigit) {
return false;
}
}
else{ //length is 15
//check date
var date6 = idNumber.substring(6,12);
if (isDate6(date6) == false) {
return false;
}
}
return true;
}
/**
* 判斷是否為“YYYYMM”式的時(shí)期
*
*/
function isDate6(sDate) {
if(!/^[0-9]{6}$/.test(sDate)) {
return false;
}
var year, month, day;
year = sDate.substring(0, 4);
month = sDate.substring(4, 6);
if (year < 1700 || year > 2500) return false
if (month < 1 || month > 12) return false
return true
}
/**
* 判斷是否為“YYYYMMDD”式的時(shí)期
*
*/
function isDate8(sDate) {
if(!/^[0-9]{8}$/.test(sDate)) {
return false;
}
var year, month, day;
year = sDate.substring(0, 4);
month = sDate.substring(4, 6);
day = sDate.substring(6, 8);
var iaMonthDays = [31,28,31,30,31,30,31,31,30,31,30,31]
if (year < 1700 || year > 2500) return false
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1]=29;
if (month < 1 || month > 12) return false
if (day < 1 || day > iaMonthDays[month - 1]) return false
return true
}
為了在windows和linux平臺(tái)公用相同的郵件客戶端和郵件內(nèi)容,主要是有時(shí)候切換操作系統(tǒng)又要看以前的郵件。最后找到了
thunderbird(下面簡稱TB)客戶端。這個(gè)客戶端就是有點(diǎn)慢,倒是能滿足我的要求。但是它的默認(rèn)設(shè)置有時(shí)候有點(diǎn)不符合我們的使用習(xí)慣,我對它的
設(shè)置作了下面的一些修改:
1:轉(zhuǎn)發(fā)郵件
默認(rèn)的設(shè)置轉(zhuǎn)發(fā)把郵件的內(nèi)容作為附件轉(zhuǎn)發(fā)。這樣有兩個(gè)不好的地方:第一,如果郵件有附件,這個(gè)附件不能轉(zhuǎn)發(fā);第二,接收方必須要用TB客戶端了,否則打不
開。
修改:編輯 -> 首選項(xiàng) -> 編寫 -> 常規(guī):轉(zhuǎn)發(fā)消息改成內(nèi)聯(lián)
2:其它郵件客戶端接收TB發(fā)的中文附件是亂碼
這個(gè)是標(biāo)準(zhǔn)問題,TB使用的是新的標(biāo)準(zhǔn),但是別的客戶端使用的是舊的標(biāo)準(zhǔn)(具體那個(gè)標(biāo)準(zhǔn)忘了,google一下就可以了)。這樣就會(huì)出現(xiàn)亂碼了。
修改:編輯 -> 首選項(xiàng) -> 高級(jí) ->
配置編輯器:mail.strictly_mime.parm_folding 改成0或者1
3:自動(dòng)打開附件
TB默認(rèn)的是在打開郵件的時(shí)候同時(shí)自動(dòng)打開郵件的附件。這樣的話,如果附件大就很頭痛。
修改:編輯 -> 首選項(xiàng)
-> 高級(jí) -> 配置編輯器:
mail.inline_attachments 改成faulse
mail.content_disposition.type 改成1
4:回復(fù)郵件時(shí)回復(fù)的郵件內(nèi)容在下面
TB默認(rèn)的回復(fù)郵件的回復(fù)內(nèi)容是在下面的,這樣如果郵件來回幾次,回復(fù)比較多,看起來很不方便。
修改:編輯
-> 首選項(xiàng) -> 高級(jí) -> 配置編輯器:Mail.identify.default.reply_on_top值由0改為1
還有一個(gè)問題沒有解決,就是有時(shí)候在TB中打開一個(gè)文件夾,它會(huì)重新建索引還是什么的,這時(shí)候打開一個(gè)文件夾比較慢。看網(wǎng)上有說把這個(gè)文件夾重命名,再創(chuàng)
建一個(gè)同名的文件夾,最后把老的文件夾的內(nèi)容拷貝到新的里面就好了,這個(gè)沒有試過。不過這個(gè)也不是特別大的問題,就沒有繼續(xù)搞了,什么時(shí)候有空再看看,到
時(shí)候再貼上來。
格式: tar 選項(xiàng) 文件目錄列表
功能: 對文件目錄進(jìn)行打包備份
選項(xiàng):
-c 建立新的歸檔文件
-r 向歸檔文件末尾追加文件
-x 從歸檔文件中解出文件
-O 將文件解開到標(biāo)準(zhǔn)輸出
-v 處理過程中輸出相關(guān)信息
-f 對普通文件操作
-z 調(diào)用gzip來壓縮歸檔文件,與-x聯(lián)用時(shí)調(diào)用gzip完成解壓縮
-Z 調(diào)用compress來壓縮歸檔文件,與-x聯(lián)用時(shí)調(diào)用compress完成解壓縮
例如:
1.將當(dāng)前目錄下所有.txt文件打包并壓縮歸檔到文件this.tar.gz,我們可以使用
tar czvf this.tar.gz ./*.txt
2.將當(dāng)前目錄下的this.tar.gz中的文件解壓到當(dāng)前目錄我們可以使用
tar xzvf this.tar.gz ./
Application Servers > server1 > Process Definition > Java
Virtual Machine > Custom Properties
虛擬機(jī)參數(shù)在命令行的形式為 -Dproperty=value,在程序中可以用System.getProperty("property")取值。
利用這個(gè)特性可以對程序運(yùn)行進(jìn)行控制,避免代碼的修改。
地址欄輸入about:support,在打開的頁面有打開配置文件夾的按鈕;
擴(kuò)展在Extensions文件夾下,插件在安裝文件夾下的plugin和其他目錄。
import java.net.URL;
import org.codehaus.xfire.client.Client;
public class XfireClient
{
public static void main(String[] args)
{
DyClient();
}
/**
* You get a DynamicClient when you create a Client with the URL of a WSDL
*/
public static void DyClient()
{
try
{
Client client = new Client(
new URL(
"http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"));
Object[] results = client.invoke("qqCheckOnline",
new Object[] { "31506173" });
System.out.println((String) results[0]);
}
catch ( Exception e)
{
e.printStackTrace();
}
}
}
必須jar:
commons-codec-1.3.jar
commons-httpclient-3.0.jar
commons-logging-1.0.4.jar
jdom-1.0.jar
wsdl4j-1.6.1.jar
xfire-all-1.2.6.jar
XmlSchema-1.1.jar
import java.io.UnsupportedEncodingException;
public class UTF {
public static void main(String[] args) {
String s = "非常好";
try {
byte[] b = s.getBytes("UTF-8");
for(int i=0; i< b.length; i++){
System.out.println(Integer.toHexString(b[i]).substring(6));
}
System.out.println(new String(b, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
輸出:
e9
9d
9e
e5
b8
b8
e5
a5
bd
非常好