锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
1.榪滅▼瀵硅薄鏄紩鐢ㄤ紶閫掋?br />榪欎釜寮曠敤灝辨槸浣嶄簬client绔殑stub錛岃搗鐫浠g悊鐨勪綔鐢紝榪滅▼瀵硅薄瀹炵幇浜嗙殑榪滅▼鎺ュ彛錛屼綔涓轟唬鐞嗙殑stub涔熷叏閮ㄥ疄鐜幫紱
2.鏈湴瀵硅薄鏄間紶閫掞紝鍗蟲嫹璐濄?br />緙虹渷鐨勮瘽錛屾墍鏈夌殑灞炴ч兘浼氳鎷瘋礉錛岄櫎浜嗘爣紺轟負static鎴杢ransient鐨勫睘鎬т箣澶栥傝繖縐嶇己鐪佽涓烘槸鍙互鍦ㄧ被閲岃瑕嗙洊鐨勩?br />榪滅▼瀵硅薄鐨勫紩鐢ㄤ紶閫掓剰鍛崇潃瀵硅繙紼嬫柟娉曡皟鐢ㄧ殑瀵硅薄鐨勭姸鎬佹墍浣滅殑浠諱綍鏀瑰彉閮藉皢鍙嶆槧鍒拌stub鎵瀵瑰簲鐨勮繙紼嬪璞′笂鍘匯傚綋涓涓繙紼嬪璞¤浼犻掓椂錛屾帴鍙楄呭彧鑳界湅鍒拌繙紼嬫帴鍙i噷瀹氫箟鐨勬柟娉曪紝鑰屼笉鑳界湅鍒拌繙紼嬪璞¢噷瀹氫箟鐨勬湰鍦版柟娉曘?br />鏈湴瀵硅薄鐨勫間紶閫掓剰鍛崇潃浠諱綍瀵規帴鍙楄呯殑瀵硅薄鐨勭姸鎬佺殑鏀瑰彉閮戒笉浼氬獎鍝嶅埌鍙戦佽呴偅閲岀殑瀵硅薄錛屽弽涔嬩害鐒躲?img src ="http://www.tkk7.com/koradji/aggbug/351135.html" width = "1" height = "1" />
]]>
絎簩姝ワ紝瀹炵幇remote鎺ュ彛錛?br />
瀹炵幇鎺ュ彛閲屽畾涔夌殑鍚勪釜鏂規硶錛?br />
(optional)瀹氫箟鏈湴鏂規硶錛屽嵆鏈湪鎺ュ彛閲屽畾涔夌殑鏂規硶錛宑lient绔湅涓嶅埌錛?br />
瀹氫箟static main鏂規硶錛岃繖閲岄渶瑕佸疄鐜頒笅鍒楀嚑姝ワ細
System.setSecurityManager(new RMISecurityManager()); //鍒涘緩騫跺畨瑁呭畨鍏ㄧ鐞嗗櫒
鍙栧緱args[0]鍙傛暟錛屽疄渚嬪寲remote綾籵bj錛?br />
Naming.rebind(args[0], obj); //緇戝畾鍚嶅瓧鍜屽璞?br />
絎笁姝ワ紝鍒涘緩瀹㈡埛绔被錛?br />
涓昏灝辨槸瀹氫箟static main鏂規硶錛岃繖閲岄渶瑕佸疄鐜頒笅鍒楀嚑姝ワ細
鍙栧緱args[0]鎸囧畾鐨剆erver鍚嶅瓧錛?br />
鐢∟aming.lookup(server鍚嶅瓧)鏌ユ壘緇戝畾鐨勫璞bj錛?br />
璋冪敤obj鐨勫悇涓柟娉曪紝灝卞儚鏈湴璋冪敤涓鏍鳳紱
絎洓姝ワ紝鍒涘緩policy鏂囦歡錛屼緥濡傦紝鍒涘緩rmi.policy鏂囦歡錛?br />
grant {
// Allow everything for now
permission java.security.AllPermission;
};
娉ㄦ剰錛屼互涓婁粎鏄敤浣滅粌涔犮?br />
絎簲姝ワ紝鍚姩rmiregistry錛?br />
鍦╠os紿楀彛涓嬶紝杈撳叆錛歴tart rmiregistry(鍥炶濺)
浼氬脊鍑烘柊紿楀彛錛岃〃紺烘鍦ㄨ繍琛宺miregistry錛?br />
娉ㄦ剰錛佷竴瀹氳鍦╮emote綾繪墍鍦ㄧ殑鐩綍涓嬫墽琛岃鍛戒護銆?/span>
絎叚姝ワ紝鍚姩server绔▼搴忥細
杈撳叆鍛戒護錛歫ava server鍚?-Djava.security.policy="policy瀹屾暣璺緞鍚?
絎竷姝ワ紝鍚姩client绔▼搴忥細
杈撳叆鍛戒護錛歫ava server鍚?br />
鐜板湪灝卞彲浠ョ湅鍒癱lient-server闂寸殑閫氳浜嗐?br />
琛ュ厖錛氬疄闄呮祴璇曞彂鐜幫紝鐢ㄤ竴涓猦elper瀵硅薄灝佽鎵鏈夐渶瑕佷紶緇檙emote綾葷殑鏂規硶鍙傛暟錛屾瘮璧蜂竴涓釜鍙傛暟浼犻掓ц兘瑕佸ソ寰堝銆?br />
helper瀵硅薄涓瀹氳implements Serializable鎺ュ彛銆?/span>
]]>
闂瑙e喅浜嗐?br />
2.鎺ョ潃鍦ㄦ墽琛宩ava紼嬪簭鏃跺張鎶ラ敊錛歂oClassDefFoundError錛屽彲鏄槑鏄庝袱涓猚lass鏂囦歡閮藉湪錛岃繖鏄負浠涔堝憿錛?br />
鍚庢潵錛屾煡浜唃oogle鎵嶆槑鐧斤紝鍘熸潵鏄痗lasspath閲屼竴瀹氳鍦ㄨ礬寰勪笂鍔犱笂“.;”錛屾紡鎺夎繖涓皬灝忕殑鐐瑰氨浼氭姤榪欑閿欒銆?br />
鐜闂錛岃礬寰勯棶棰樿繖浜涙繪槸璁﹋ava寮鍙戣呮姄鐙?)
]]>
鍦╯truts2閲岋紝璧勬簮鏂囦歡琚垎鎴愪簡涓変釜綰у埆錛氱被綰у埆錛屽寘綰у埆錛屽叏灞綰у埆銆?br />
鎵ц鏃訛紝灝嗘寜鐓т粠灝忓埌澶х殑欏哄簭渚濇鎼滅儲璧勬簮鏂囦歡閲岀殑key鍊鹼紝鐩磋嚦鎵懼埌銆?br />
綾葷駭鍒殑鏂囦歡鍚嶅畾涔夛細Action綾誨悕_璇█鐮乢鍥藉鐮?properties錛屾瘮濡傦細LoginAction_en_US.properties錛孡oginAction_zh_CN.properties錛?br />
濡傛灉鏄湪鍏ㄥ眬涓畾涔夎祫婧愭枃浠訛紝鍒欓渶瑕佸湪struts.xml閲岄厤緗紝渚嬪瓙錛?lt;constant name="struts.custom.i18n.resources" value="message" />錛屽叾涓璵essage涓鴻祫婧愭枃浠剁殑璧峰鍚嶏紱
鍏ㄥ眬璧勬簮鏂囦歡鐨勪綅緗湪src\涓嬨?br />
濡備綍鍐欎腑鏂囩殑璧勬簮鏂囦歡錛?br />
瀵逛簬鐢ㄤ簬涓枃鏄劇ず鐨勮祫婧愭枃浠訛紝浠ュ墠闇瑕佷嬌鐢╦ava鑷甫鐨刵ative2ascii.exe灝嗕腑鏂囧唴瀹硅漿鎹㈡垚瀵瑰簲鐨剈nicode錛屾瘮杈冮夯鐑︼紝鑰岀幇鍦ㄥ彲浠ヤ嬌鐢╡clipse鐨勬彃浠惰嚜鍔ㄨ漿鎹€?br />
eclipse鎻掍歡錛?span style="background-color: yellow">propertieEdit(涓嬈劇敱鏃ユ湰浜哄紑鍙戠殑寮婧愭彃浠訛紝鍙洿鎺ヨ緭鍏ヤ腑鏂囷紝鑷姩杞崲)
鏈湴涓嬭澆link錛?a href="/Files/koradji/propertieEdit.zip">/Files/koradji/propertieEdit.zip
涓嬭澆鍚庯紝灝嗛噷闈㈢殑鐩綍鎷瘋礉鍒癳clipse涓嬪搴旂殑鐩綍閲岋紝閲嶆柊鍚姩eclipse灝卞彲浠ヤ簡銆?鍙兘闇瑕佸湪鍚姩鍛戒護閲屽姞涓?clean)銆?br />
鍦╦sp閲岃鍙栬祫婧愭枃浠剁殑鏂規硶錛?/u>
鐢婚潰涓婄殑鏂囧瓧閲囩敤<s:text name="key" />鍐欙紱
鍏朵粬鐨勶紝姣斿鎸夐挳鐨剉alue錛宼extfield鐨刲abel絳夐噰鐢?lt;%{getText('key')}>鍐欙紝渚嬪瓙錛?lt;s:submit action="confirm" value="%{getText('confirm.button.label')}" /> 錛?br />
鎴栬咃紝涔熷彲浠ヤ嬌鐢ㄨ繖鏍風殑鍐欐硶錛?lt;s:textfield name="username" key="page.index.text.username"></s:textfield>
浣跨敤<s:i18n>鍙互鎸囧畾涓存椂鐨勮祫婧愭枃浠訛紝
渚嬪瓙1錛?br />
<s:i18n name="temp"> ----- baseName瀵瑰簲鍚嶇О鐨勮祫婧愭枃浠跺悕
<s:text name="info"> ----- info涓鴻祫婧愭枃浠朵腑鐨刱ey
<s:param>寮犱笁</s:param> ---- 鎸囧畾絎竴涓弬鏁?nbsp; {0}
<s:param>23</s:param> ---- 鎸囧畾絎簩涓弬鏁?nbsp; {1}
</s:text>
</s:i18n>
渚嬪瓙2錛?br />
<s:i18n name="org.scorpio.jh.struts2.i18n.web.action.LoginAction">
<s:text name="page.index.text.username"></s:text>
<s:text name="page.index.text.password"></s:text>
</s:i18n>
娌℃湁瀹為檯搴旂敤榪囷紝鐚滄祴鍙兘鏄湪欏甸潰涓婃寚瀹氭煇涓尯鍩熷彲浠ユ樉紺轟笌default locale涓嶅悓鐨勮璦鏂囧瓧錛?br />
鍦╦ava閲岃鍙栬祫婧愭枃浠剁殑鏂規硶錛?/u>
Action綾婚噷(闇瑕佺戶鎵緼ctionSupport)錛屼嬌鐢╣etText(String key)鏂規硶灝辮兘鍙栧緱璧勬簮鏂囦歡閲岀殑鍊鹼紱
Business Services綾婚噷錛屼嬌鐢≧esourceBundle.getBundle(璧勬簮鏂囦歡鍚?.getString(key)鏂規硶鍙栧緱鍊鹼紱
濡備綍鍒囨崲鐢婚潰璇█錛?/u>
鍦╦sp閲岋紝鍦ㄩ傚綋鐨勪綅緗斁鍏ヤ笅闈㈢殑浠g爜錛?br />
<s:url id="url" action="UnsubscribeNL_language">
<s:param name="request_locale">en_US</s:param>
</s:url>
<s:a href="%{url}">English</s:a><br>
<s:url id="url" action="UnsubscribeNL_language">
<s:param name="request_locale">zh_CN</s:param>
</s:url>
<s:a href="%{url}">綆浣撲腑鏂?lt;/s:a>
鍦ㄥ彂閫佽姹傛椂錛宻truts浼氭悳绱㈡嫤鎴猺equest_locale鍙橀噺錛屽茍灝嗚鍙橀噺鍊艱涓篸efault locale錛?br />
鍦ˋction綾婚噷鍔犲叆涓涓柟娉曪細public String language()錛岃繍琛屽垵濮嬪寲榪斿洖鏈敾闈㈠嵆鍙紱
]]>
<s:checkboxlist name="" list="" listKey="" listValue="" value="" />
name-瀹氫箟鏍囩鍚嶏紝鐢ㄤ簬鎺ユ敹鐢婚潰涓婇変腑鐨勫閫夋錛屾晠搴斾笌Action閲屽畾涔夌殑灞炴т竴鑷達紝涓斿涓烘暟緇勶紱
list-瀹氫箟闆嗗悎鍙橀噺錛岀敤浜庤緭鍑哄閫夋鍒扮敾闈笂錛屼竴鑸湪Action閲屽畾涔変竴涓狶ist鎴朚ap灞炴э紱
listKey-濡傛灉鍦ˋction閲屽畾涔夌殑鏄竴涓狶ist錛屽垯寰寰浼氬湪List閲屽畾涔変竴涓狟ean錛屽畠鍙湁涓や釜灞炴э紝鍏朵腑涓涓?姣斿id)灝卞湪榪欓噷璁劇疆錛?br />
濡傛灉鍦ˋction閲屽畾涔夌殑鏄竴涓狹ap錛屽垯Map鐨刱ey灝卞湪榪欓噷璁劇疆錛?br />
listValue-濡傛灉鍦ˋction閲屽畾涔夌殑鏄竴涓狶ist錛屽垯寰寰浼氬湪List閲屽畾涔変竴涓狟ean錛屽畠鍙湁涓や釜灞炴э紝鍙﹀涓涓?姣斿name)灝卞湪榪欓噷璁劇疆錛?br />
濡傛灉鍦ˋction閲屽畾涔夌殑鏄竴涓狹ap錛屽垯Map鐨剉alue灝卞湪榪欓噷璁劇疆錛?br />
value-鐢ㄤ簬鍥炴樉鐢婚潰涓婅閫変腑鐨勫閫夋錛屽亣濡傜敾闈㈡湁杈撳叆媯鏌ワ紝濡傛灉鏈夐敊鍒欒繑鍥炲師鐢婚潰騫舵樉紺哄嚭閿欎俊鎭紝榪欐椂鍊欏氨闇瑕佷嬌鐢ㄥ畠銆?br />
涓鑸妸瀹冭鎴愬拰name涓鑷村氨鍙互浜嗐?br />
娉ㄦ剰鐐癸細
涓轟簡鑳芥紜樉紺哄凡琚変腑鐨勫閫夋錛屼竴瀹氳浣垮緱name鐨勬暟緇勭被鍨嬩笌listKey鐨勭被鍨嬩竴鑷淬?br />
姣斿錛宯ame璁炬垚String[] users錛屽垯listKey灝辮璁炬垚String id錛涘鏋渘ame璁炬垚Integer[] users錛屽垯listKey灝辮璁炬垚Integer id錛?br />
淇敼ftl鏂囦歡鏀瑰彉杈撳嚭鏂瑰紡錛?/u>
1.鎼滅儲struts2-core-xxx.jar錛屾壘鍒癱heckboxlist.ftl鏂囦歡錛屾嫹璐濆嚭鏉ワ紱
2.鍦ㄨ嚜宸辯殑宸ョ▼鐨剆rc涓嬫柊寤簍emplate.simple鍖咃紝鏀劇疆涓婅堪鏂囦歡錛?br />
3.鐢ㄦ枃鏈紪杈戝櫒鎵撳紑璇ユ枃浠訛紝淇敼鎴愯嚜宸卞笇鏈涜緭鍑虹殑鏍煎紡錛屼繚瀛橈紝OK錛?br />
渚嬪瓙錛?/u>
甯屾湜鐢婚潰涓婃瘡3涓閫夋杈撳嚭涓轟竴琛屻?/span>
<#--
/*
* $Id: checkboxlist.ftl 804072 2009-08-14 03:16:35Z musachy $
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
-->
<#assign itemCount = 0/>
<#if parameters.list?exists>
<@s.iterator value="parameters.list">
<#assign itemCount = itemCount + 1/>
<#if parameters.listKey?exists>
<#assign itemKey = stack.findValue(parameters.listKey)/>
<#else>
<#assign itemKey = stack.findValue('top')/>
</#if>
<#if parameters.listValue?exists>
<#assign itemValue = stack.findString(parameters.listValue)/>
<#else>
<#assign itemValue = stack.findString('top')/>
</#if>
<#assign itemKeyStr=itemKey.toString() />
<#if (itemCount-1)%3 == 0>
<tr>
</#if>
<td>
<input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/>
<#if tag.contains(parameters.nameValue, itemKey)>
checked="checked"<#rt/>
</#if>
<#if parameters.disabled?default(false)>
disabled="disabled"<#rt/>
</#if>
<#if parameters.title?exists>
title="${parameters.title?html}"<#rt/>
</#if>
<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
/>
<label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label>
</td>
<#if itemCount%3 == 0>
</tr>
</#if>
</@s.iterator>
</#if>
<input type="hidden" id="__multiselect_${parameters.id?html}" name="__multiselect_${parameters.name?html}" value=""<#rt/>
<#if parameters.disabled?default(false)>
disabled="disabled"<#rt/>
</#if>
/>
]]>
*ZIP宥屾儔鍍d箷鍎?br />
=============================================================================*/
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipCompressor {
static final int BUFFER = 8192;
private File zipFile;
public ZipCompressor(String pathName) {
zipFile = new File(pathName);
}
public void compress(String srcPathName) {
File file = new File(srcPathName);
if (!file.exists())
throw new RuntimeException(srcPathName + "鎳氬導鍋熷伌鍋?);
try {
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,
new CRC32());
ZipOutputStream out = new ZipOutputStream(cos);
String basedir = "";
compress(file, out, basedir);
out.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private void compress(File file, ZipOutputStream out, String basedir) {
/* 鍍ㄥ偪鍎楀儖鍍╁剷鍋插亹鍍煎偨鍍鍎栧伈鍋愬仸鍌熷仹鍌熷嫉媯熷仧鍌戝仭 */
if (file.isDirectory()) {
System.out.println("鍩戝紖涓? + basedir + file.getName());
this.compressDirectory(file, out, basedir);
} else {
System.out.println("鍩戝紖涓? + basedir + file.getName());
this.compressFile(file, out, basedir);
}
}
/** 鍍ㄥ偪鍎楀儖鍍╁剷鍌煈寮?*/
private void compressDirectory(File dir, ZipOutputStream out, String basedir) {
if (!dir.exists())
return;
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
compress(files[i], out, basedir + dir.getName() + "/");
}
}
/** 鏆ュ鍌煈寮?*/
private void compressFile(File file, ZipOutputStream out, String basedir) {
if (!file.exists()) {
return;
}
try {
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(file));
ZipEntry entry = new ZipEntry(basedir + file.getName());
out.putNextEntry(entry);
int count;
byte data[] = new byte[BUFFER];
while ((count = bis.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
bis.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}