锘??xml version="1.0" encoding="utf-8" standalone="yes"?> public class MultiboxForm extends ActionForm { public String[] getMountains() { 鎺ヤ笅鏉ヨRadio錛屽叾瀹濬orm鍜孉ction閮ㄥ垎閮藉樊涓嶅錛屽彧鏄疛SP欏甸潰鏈夌偣涓嶄竴鏍鳳紝Radio閲岄潰鐢氳嚦鐗墊秹鍒頒簡(jiǎn)JavaScript銆?BR>1.From鐨勮璁★細(xì)
http://www-128.ibm.com/developerworks/java/library/j-sr3.html
http://www-128.ibm.com/developerworks/java/library/j-sr4.html
鍏堣皟綆鍗曠殑璇磋搗鍚э紝鎴戜滑鏉ュ疄鐜板姩鎬佺殑checkbox:
1銆丗orm鐨勮璁★細(xì)鎴戜滑榪欎釜渚嬪瓙鏈変釜String[] mountains錛岃繖涓彉閲忔暟緇勪腑鍖呭惈寰堝鐨勫北鐨勫悕瀛?榪樻湁涓暟緇凷tring[] selectedMountains灝辨槸榛樿閫変腑鐨勪竴浜涘北錛屽儚涓嬮潰榪欐牱寰堢畝鍗曘?/P>
2銆丄ction鐨勮璁★細(xì)榪欎釜灝辨洿綆鍗曚簡(jiǎn)錛屼竴鍙ヨ瘽錛岀敱鎺у埗鍣ㄥ垏鎹㈠埌瑙嗗浘銆?PRE class=code>
private String[] selectedMountains = {"Everest","K2","Lhotse","Cho Oyu"};
private String[] mountains ={"Everest","K2","Kangchenjunga","Lhotse","Makalu","Kangchenjunga South","Lhotse Middle","Kangchenjunga West","Lhotse Shar","Cho Oyu"};
return mountains;
}
public void setMountains(String[] mountains) {
this.mountains = mountains;
}
public String[] getSelectedMountains() {
return selectedMountains;
}
public void setSelectedMountains(String[] selectedMountains) {
this.selectedMountains = selectedMountains;
}
return mapping.findForward("success");
3銆丣SP鐨勮璁★細(xì)
榪欎釜鐩稿姣旇緝澶嶆潅錛屼篃鏄瘮杈冧腑瑕佺殑銆?lt;logic:iterate/>鏄凱浠ultiboxForm涓殑mountians,
<html:form action="/multibox" name="multiboxForm" type="qiya.deng.struts.form.MultiboxForm">
<logic:iterate name="multiboxForm" property="mountains" id="mountain">
<html:multibox property="selectedMountains">
<bean:write name="mountain"/>
</html:multibox>
<bean:write name="mountain"/><br/>
</logic:iterate>
<br/>
<html:submit/><html:cancel/>
</html:form>
<html:multibox property="selectedMountains">
<bean:write name="mountain"/>
</html:multibox>
榪欎釜鏍囩鐨勪綔鐢ㄥ氨鏄痵electeDMountains鐨勫煎拰榪唬鐨刴ountain鍊間竴鑷寸殑鏃跺欏氨浼?xì)閫変腑銆?
2.Action鍚屼笂涓鏍鳳紝鍒囨崲鍒癑SP欏甸潰鍘匯?nbsp;
private String selectedMountain = "Kangchenjunga West";
private String[] mountains ={"Everest","K2","Kangchenjunga","Lhotse","Makalu","Kangchenjunga South","Lhotse Middle","Kangchenjunga West","Lhotse Shar","Cho Oyu"};
public String[] getMountains() {
return mountains;
}
public void setMountains(String[] mountains) {
this.mountains = mountains;
}
public String getSelectedMountain() {
return selectedMountain;
}
public void setSelectedMountain(String selectedMountain) {
this.selectedMountain = selectedMountain;
}
3.閲嶇偣閮ㄥ垎JSP:
<html:form action="/radio" name="radioForm" type="qiya.deng.struts.form.RadioForm">
<bean:define id="selectedRadio" property="selectedMountain" name="radioForm"></bean:define>
<logic:iterate id="mountain" property="mountains" name="radioForm">
<bean:define id="mountainValue">
<bean:write name="mountain"/>
</bean:define>
<html:radio property="selectedMountain" value="<%=mountainValue%>" styleId="<%=mountainValue%>"/>
<bean:write name="mountain"/><br/>
</logic:iterate><br/>
<html:submit/><html:cancel/>
<script type="text/javascript">
<!--
var selectedRadio =
document.forms["radioForm"].elements["<bean:write name="selectedRadio"/>"];
selectedRadio.checked=true;
-->
</script>
</html:form>
"<bean:define/>"瀹氫箟浜?jiǎn)涓涓狿ageContext浣滅敤鍩熺殑灞炴electedRadio錛屼笅闈㈢殑JavaScript鐨勪綔鐢ㄥ氨鏄牴鎹繖涓睘鎬ф壘鍒板簲璇ラ変腑鐨凴adio銆傚叾浠栫殑鍦版柟鍜屼笂闈㈤偅涓緢鐩鎬技鐨勩傚鏋滆繕鏄笉澶悊瑙e厛榪愯錛岀湅鐪嬬敓鎴愮殑HTML浠g爜銆?BR>
]]>
鍦ㄥ畠鐨勭綉绔欎笂鏈夋瘮杈冭緇嗙殑瀹夎璇存槑錛屽茍涓旈厤鏈夊疄渚嬨傞渶瑕佺殑璇昏呭彲浠ヤ粩緇嗘煡鐪嬶紝榪欓噷灝變笉浠嬬粛浜?jiǎn)銆?BR>鍦ㄤ嬌鐢ㄧ殑JSP欏甸潰涓姞鍏?pre class="code">
<head>
<tab:tabConfig/>
</head>
榪欐槸瀵煎叆涓浜汣SS鍜孞avaScript.
鐒跺悗鍩烘湰涓婂氨鏄袱濂楁爣絳撅細(xì)
<tab:tabContainer>
<tab:tabPane>
浠庡懡鍚嶆垜浠氨寰堝鏄撶湅鍑烘潵鏄粈涔堜綔鐢?lt;tab:tabContainer>鏄浉褰撲簬瀹瑰櫒涓鏍風(fēng)殑涓滆タ鍙互鍖呭惈寰堝鐨?lt;tab:tabPane>,鑰?lt;tab:tabPane>灝辨槸鎴戜滑瑕佺殑閭gTab鐨勬晥鏋滅殑闈㈡澘銆?pre class="code">
<tab:tabContainer id="foo-bar-container">
<tab:tabPane id="foo" tabTitle="濮撳悕">
<html:errors/><br/>
<bean:message key="tab_textfield_name"/>
<html:text property="userName"></html:text>
<br/>
<html:submit><bean:message key="tab_submit_label"/></html:submit>
</tab:tabPane>
<tab:tabPane id="bar" tabTitle="瀵嗙爜">
<html:errors/><br/>
<bean:message key="tab_textfield_password"/>
<html:password property="password"/>
<br/>
<bean:message key="tab_textfield_repassword"/>
<html:password property="rePassword"/>
<br/>
<html:submit><bean:message key="tab_submit_label"/></html:submit>
</tab:tabPane>
</tab:tabContainer>
娉ㄦ剰涓婇潰鐨勪袱涓爣絳鵑兘鏈塱d榪欒鏄敮涓鐨勶紝鑰屼笖鏄暣涓簲鐢ㄥ敮涓銆?BR>
涓婇潰鐨勪唬鐮佸氨鏄竴涓〃鍗曪紝鍚湁userName,password,rePassword涓変釜鏂囨湰鍩熴備絾鏄渶瑕佷竴涓狥orm,鏈夋病鏈夎冭檻榪嘑orm鏀懼湪浠涔堜綅緗憿錛熺粡榪囪瘯楠屾垜鍙戠幇瑕佸皢Form 鏀懼埌<tab:tabContainer>鐨勬爣絳句箣澶栥傝繖鏍峰氨鍍忓鐞嗕竴涓櫘閫氱殑Struts Form涓鏍蜂簡(jiǎn)銆傚鏋滀綘闇瑕佹瘡涓猅ab涔熷彲浠ユ槸涓狥orm錛岃繖鏍蜂篃娌℃湁浠涔堥棶棰樸?BR>
瀹屾暣鐨凧SP浠g爜濡備笅:
鏁堟灉濡傚浘錛?BR>
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="tab" uri="<%@ taglib prefix="html" uri="<%@ taglib prefix="bean" uri="<html>
<head>
<tab:tabConfig/>
</head>
<body>
<html:form action="/saveAll">
<tab:tabContainer id="foo-bar-container">
<tab:tabPane id="foo" tabTitle="濮撳悕">
<html:errors/><br/>
<bean:message key="tab_textfield_name"/>
<html:text property="userName"></html:text>
<br/>
<html:submit><bean:message key="tab_submit_label"/></html:submit>
</tab:tabPane>
<tab:tabPane id="bar" tabTitle="瀵嗙爜">
<html:errors/><br/>
<bean:message key="tab_textfield_password"/>
<html:password property="password"/>
<br/>
<bean:message key="tab_textfield_repassword"/>
<html:password property="rePassword"/>
<br/>
<html:submit><bean:message key="tab_submit_label"/></html:submit>
</tab:tabPane>
</tab:tabContainer>
</html:form>
</body>
</html>
package com.motel168.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.ValidatorUtil;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.validator.Resources;
public class MyValidator {
聽聽聽 public static boolean validateTwoFields(Object bean,ValidatorAction va,Field field,ActionErrors errors,HttpServletRequest request){
聽聽聽 聽聽聽
聽聽聽 聽聽聽 String value = ValidatorUtil.getValueAsString(bean,field.getProperty());
聽聽聽 聽聽聽 String sProperty2 = field.getVarValue("secondProperty");
聽聽聽 聽聽聽 String value2 = ValidatorUtil.getValueAsString(bean,sProperty2);
聽聽聽 聽聽聽 if(!GenericValidator.isBlankOrNull(value)){
聽聽聽 聽聽聽 聽聽聽 try{
聽聽聽 聽聽聽 聽聽聽 聽聽聽 if(!value.equals(value2)){
聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 errors.add(field.getKey(),Resources.getActionError(request,va,field));
聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 return false;
聽聽聽 聽聽聽 聽聽聽 聽聽聽 }
聽聽聽 聽聽聽 聽聽聽 }catch(Exception e){
聽聽聽 聽聽聽 聽聽聽 聽聽聽 errors.add(field.getKey(),Resources.getActionError(request,va,field));
聽聽聽 聽聽聽 聽聽聽 聽聽聽 return false;
聽聽聽 聽聽聽 聽聽聽 }
聽聽聽 聽聽聽 }
聽聽聽 聽聽聽 return true;
聽聽聽 }
聽聽聽
}
聽聽聽 聽鐒跺悗浣跨敤鐨勬椂鍊欏氨鍜屽叾浠栨病浠涔堜袱鏍風(fēng)殑浜?jiǎn)锛?xì)聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽methodParams="java.lang.Object,org.apache.commons.validator.ValidatorAction,org.apache.commons.validator.Field,org.apache.struts.action.ActionErrors,javax.servlet.http.HttpServletRequest" 聽聽聽
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽depends="required" msg="errors.twofield">
聽聽聽 聽
聽聽聽 聽 聽聽聽 聽聽聽 function validateTwoFields(form){
聽聽聽 聽 聽聽聽 聽聽聽 var bValid = true;
聽聽聽 聽 聽聽聽 聽聽聽 var focusField = null;
聽聽聽 聽 聽聽聽 聽聽聽 var i = 0;
聽聽聽 聽 聽聽聽 聽聽聽 var fields = new Array();
聽聽聽 聽 聽聽聽 聽聽聽 oTwoFields = new twofields();
聽聽聽 聽 聽聽聽 聽聽聽 for(x in oTwoFields){
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 var field = form[oTwoFields[x][0]];
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 var secondField = form[oTwoFields[x][2]("secondProperty")];
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 if(field.type=="text"||field.type=="textarea"||field.type=="select-one"||field.type=="radio"||field.type=="password"){
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 var value;
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 var secondValue;
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 if(field.type=="select-one"){
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 var si = field.selectedIndex;
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 value = field.options[si].value;
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 secondValue = secondField.options[si].value;
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 }else{
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 value=field.value;
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 secondValue = secondField.value;
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 }
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 if(value!=secondValue){
聽聽聽 聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 if(i==0){
聽聽聽 聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 focusField = field;
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 }
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 fields[i++]=oTwoFields[x][1];
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 bValid = flase;
聽聽聽 聽 聽聽聽 聽聽聽 聽聽聽 }
聽聽聽 聽 聽聽聽 聽聽聽 }
聽聽聽 聽 聽聽聽 }
聽聽聽 聽 聽聽聽 if(fiels.length > 0){
聽聽聽 聽 聽聽聽 聽聽聽 focusFiled.focus();
聽聽聽 聽 聽聽聽 聽聽聽 alert(fields.join('\n'));
聽聽聽 聽 聽聽聽 聽聽聽 }
聽聽聽 聽 聽聽聽 return bValid;
聽聽聽 聽
聽聽聽 聽 ]]>
聽聽聽 聽
聽聽聽 聽
聽聽聽 聽聽聽
聽聽聽 聽聽聽 聽聽聽 聽聽聽灝辨槸鎴戜滑鍦╦ava綾諱腑璇誨彇鐨勫彉閲忥紝瀹冧唬琛ㄧ殑鏄彟澶栫殑涓涓煙銆?br> 鍦↗SP涓殑浣跨敤灝變笉鍐嶈鏄庝簡(jiǎn)錛屽ぇ鍔熷憡鎴?)銆?br>
聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽secondProperty
聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽newPassword2
聽聽聽 聽聽聽 聽聽聽 聽聽聽
2.鐩稿叧璁劇疆
a.鎶婁笂闈㈡彁鍒扮殑a,b,c,d鍥涗釜鍖呮嫹璐濆埌<CATALINA_HOME>/common/lib鐩綍涓?BR>b.鎶奱xis鐩綍涓嬬殑WEB-INF/lib鐩綍涓嬬殑鏂囦歡鍏ㄩ儴鎷瘋礉鍒?lt;CATALINA_HOME>/common/lib鐩綍涓?BR>c.鎶奐AVA_HOME/lib/tools.jar鎷瘋礉鍒?lt;CATALINA_HOME>/common/lib鐩綍涓?/P>
榪欐牱灝卞簲璇K浜?
3.鍦?TOMCAT_HOME%/config/server.xml鏂囦歡涓姞鍏ュ涓嬩竴孌甸厤緗俊鎭?鍦?lt;/Host>涔嬪墠)
4.鍐欎釜綆鍗曠▼搴忔祴璇曚笅錛?BR>
涓銆丣SP欏甸潰鏄劇ず涔辯爜
涓嬮潰鐨勬樉紺洪〉闈?display.jsp)灝卞嚭鐜頒貢鐮侊細(xì)
<html>瀵逛笉鍚岀殑WEB鏈嶅姟鍣ㄥ拰涓嶅悓鐨凧DK鐗堟湰錛屽鐞嗙粨鏋滃氨涓嶄竴鏍楓傚師鍥狅細(xì)鏈嶅姟鍣ㄤ嬌鐢ㄧ殑緙栫爜鏂瑰紡涓嶅悓鍜屾祻瑙堝櫒瀵逛笉鍚岀殑瀛楃鏄劇ず緇撴灉涓嶅悓鑰屽鑷寸殑銆傝В鍐沖姙娉曪細(xì)鍦↗SP欏甸潰涓寚瀹氱紪鐮佹柟寮?gb2312),鍗沖湪欏甸潰鐨勭涓琛屽姞涓婏細(xì)<%@ page contentType="text/html; charset=gb2312"%>錛屽氨鍙互娑堥櫎涔辯爜浜?jiǎn)銆傚畬鏁撮〉闈㈠涓嬶細(xì)
<head>
<title>JSP鐨勪腑鏂囧鐞?lt;/title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head><body>
<%
out.print("JSP鐨勪腑鏂囧鐞?quot;);
%>
</body>
</html>
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>JSP鐨勪腑鏂囧鐞?lt;/title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head><body>
<%
out.print("JSP鐨勪腑鏂囧鐞?quot;);
%>
</body>
</html>
浜屻佽〃鍗曟彁浜や腑鏂囨椂鍑虹幇涔辯爜
涓嬮潰鏄竴涓彁浜ら〉闈?submit.jsp)錛屼唬鐮佸涓嬶細(xì)
<html>涓嬮潰鏄鐞嗛〉闈?process.jsp)浠g爜錛?
<head>
<title>JSP鐨勪腑鏂囧鐞?lt;/title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head><body>
<form name="form1" method="post" action="process.jsp">
<div align="center">
<input type="text" name="name">
<input type="submit" name="Submit" value="Submit">
</div>
</form>
</body>
</html>
<%@ page contentType="text/html; charset=gb2312"%>濡傛灉submit.jsp鎻愪氦鑻辨枃瀛楃鑳芥紜樉紺猴紝濡傛灉鎻愪氦涓枃鏃跺氨浼?xì)鍑虹庮C貢鐮併傚師鍥狅細(xì)嫻忚鍣ㄩ粯璁や嬌鐢║TF-8緙栫爜鏂瑰紡鏉ュ彂閫佽姹傦紝鑰孶TF-8鍜孏B2312緙栫爜鏂瑰紡琛ㄧず瀛楃鏃朵笉涓鏍鳳紝榪欐牱灝卞嚭鐜頒簡(jiǎn)涓嶈兘璇嗗埆瀛楃銆傝В鍐沖姙娉?閫氳繃request.setCharacterEncoding("gb2312")瀵硅姹傝繘琛岀粺涓緙栫爜錛屽氨瀹炵幇浜?jiǎn)涓枃鐨勬甯告槃·恒備慨鏀瑰悗鐨刾rocess.jsp浠g爜濡備笅錛?pre class="code"><%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>JSP鐨勪腑鏂囧鐞?lt;/title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head><body>
<%=request.getParameter("name")%>
</body>
</html>
<body>
<%=request.getParameter("name")%>
</body>
</html>
涓夈佹暟鎹簱榪炴帴鍑虹幇涔辯爜
鍙娑夊強(qiáng)涓枃鐨勫湴鏂瑰叏閮ㄦ槸涔辯爜錛岃В鍐沖姙娉曪細(xì)鍦ㄦ暟鎹簱鐨勬暟鎹簱URL涓姞涓妘seUnicode=true&characterEncoding=GBK灝監(jiān)K浜?jiǎn)銆?
鍥涖佹暟鎹簱鐨勬樉紺轟貢鐮?
鍦╩ysql4.1.0涓?varchar綾誨瀷錛宼ext綾誨瀷灝變細(xì)鍑虹幇涓枃涔辯爜錛屽浜巚archar綾誨瀷鎶婂畠璁句負(fù)binary灞炴у氨鍙互瑙e喅涓枃闂錛屽浜巘ext綾誨瀷灝辮鐢ㄤ竴涓紪鐮佽漿鎹㈢被鏉ュ鐞嗭紝瀹炵幇濡備笅錛?
public class Convert {鎶婂畠緙栬瘧鎴恈lass錛屽氨鍙互璋冪敤Convert綾葷殑闈?rùn)鎬佹柟娉旾SOtoGB()鏉ヨ漿鎹㈢紪鐮併?
/** 鎶奍SO-8859-1鐮佽漿鎹㈡垚GB2312
*/
public static String ISOtoGB(String iso){
String gb;
try{
if(iso.equals("") || iso == null){
return "";
}
else{
iso = iso.trim();
gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
return gb;
}
}
catch(Exception e){
System.err.print("緙栫爜杞崲閿欒錛?quot;+e.getMessage());
return "";
}
}
}
2.褰撶劧闇瑕佸幓涓嬭澆iReport-0.5.1浜?jiǎn)锛岃寰棙q樼殑鎹庝笂涓猧TextAsian.jar錛岃繖鏄垜浠腑鍥戒漢闇瑕佺殑涓滆タ銆?BR>瑙e帇iReport-0.5.1錛屾妸\lib鐩綍涓嬬殑tinylaf.jar,mysql-connector-java-3.0.8-stable-bin.jar榪欎袱涓枃浠跺垹闄わ紝鐒跺悗鎶奿TextAsian.jar鎷瘋礉鍒癨lib鐩綍涓嬶紙tinylaf.jar鏂囦歡鍜宨TextAsian.jar鏈夊啿紿侊紝tinylaf.jar鏂囦歡鍒犱簡(jiǎn)涓嶄細(xì)褰卞搷浣跨敤錛屽彧鏄細(xì)褰卞搷涓鐐圭編瑙傦紝搴旇涓嶅叧緋諱笉澶_^錛夛紝鍏朵粬鐨勯厤緗兘涓嶉渶瑕佷簡(jiǎn)錛屽弻鍑昏鐩綍涓嬬殑iReport.bat榪愯iReport銆?/P>
3.鏂板緩涓涓枃妗g湅鐪嬶紝騫跺線鍏朵腑娣誨姞涓涓猄tatic Text錛屽啓涓婁腑鏂囷紝騫墮夋嫨濡備笅錛欶ont name:瀹嬩綋錛孭DF font name錛歋TSong-Light,PDF Encoding:UniGB-UCS2-H(Chinese Simplified)榪欎笁欏瑰繀淇慨鏀癸紝瑕佷笉涓枃浼?xì)鏈夐棶棰樸?BR>
4.璁劇疆 DataSource--Connections/DataSource騫舵柊寤猴紝mysql璁劇疆濡備笅,騫惰鎶婁綘鐨勯┍鍔ㄦ嫹璐濆埌\lib鐩綍涓嬶紝璁板緱涓婇潰鍒犱簡(jiǎn)涓猰ysql-connector-java-3.0.8-stable-bin.jar涓滆タ鍚楋紵榪欎釜涓滆タ涓嶇煡閬撲負(fù)浠涔堜篃涓嶈兘鐢紝榪樻槸鐢╩ysql-connector-java-3.1.10-bin.jar銆?BR>
5.閲嶆柊鍚姩iReport錛屽啀鎵撳紑Connections/DataSource嫻嬭瘯涓嬶紝搴旇浼?xì)鎻惤C轟綘鎴愬姛鐨勩傜劧鍚庨夋嫨鑿滃崟builder-set active connection.榪欐牱灝卞彲浠ヤ嬌鐢ㄤ簡(jiǎn)SQL璇彞浜?jiǎn)銆傞夋嫨鑿滃崟View-Report query,鍐欎笂鍙ョ畝鍗曠殑SQL璇彞錛屼笅闈㈠氨浼?xì)鏄窘C哄嚭瀛楁銆?BR>
6.閫夋嫨view-Report-field錛岀劧鍚庡啀娣誨姞涓狥ield鍒版姤琛ㄤ腑鎸夋彁紺烘搷浣滐紝鎻愰啋涓嬶紝娉ㄦ剰涓嬪瓧孌電殑綾誨瀷錛屼笉姝g‘鐨勮瘽浼?xì)鍑洪敊銆傚鏋滃惈鏈変腑闂殑璇濓紝澶勭悊鍚屼笂3銆?/P>
榪愯涓嬬湅涓嬫晥鏋?builder-Execute Report(using active conn))錛?/P>
涓嬮潰鎴戜滑浠ュ湪tomcat涓ず鑼冩庝箞閰嶇疆鍜屼嬌鐢╨og4j
鐜璁劇疆錛氱敤榪噒omcat鐨勯兘鐭ラ亾錛屽簲璇ユ妸log4j.jar鏂囦歡鎷瘋礉鍒?TOMCAT_HOME%\common\lib涓?BR>緙栬緫servlet:
騫跺湪web.xml涓姞鍏ュ涓嬮厤緗細(xì)
娉ㄦ剰涓婇潰<param-value>涓殑"\"鍦╨inux瑕佸啓鎴?/"銆?BR>榪樻湁鍔犱笂log4j.properties鏂囦歡鍦╓EB-INF鐩綍涓?BR>
log4j.rootLogger=INFO, A1 , R
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%nlog4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log4j.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
涓嬮潰鍐欎簡(jiǎn)涓や釜嫻嬭瘯鐨勭▼搴忥細(xì)
servlet Test.java涓細(xì)
JSP temp.jsp涓細(xì)
榪欐牱鍦?TOMCAT_HOME%\bin鐩綍涓嬩細(xì)浜х敓log4j.log鐨勬枃浠訛紝榪欏氨鏄棩蹇楁枃浠躲?/P>
鏂板緩涓涓厤緗枃浠秎og4j.properties錛?PRE class=code>
log4j.rootLogger=WARN, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
#log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
# Print the date in ISO 8601 format
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN
緙栬瘧騫惰繍琛孴estLog4j浼?xì)鍦ㄧ洰褰曚笅鐢熸垚涓涓猠xample.log鐨勬枃浠訛紝灞忓箷涔熶細(xì)杈撳嚭淇℃伅錛岃繖璇佹槑宸茬粡浣犲凡緇忔垚鍔熶簡(jiǎn)絎竴姝ャ?BR>涓嬮潰瑙i噴涓嬭繖浜涢厤緗枃浠?BR>
log4j.rootLogger = [ level ], appendName1, appendName2, 鈥ppendNameN銆傚悓涓涓褰曞櫒鍙湁澶氫釜杈撳嚭绔?BR>PS錛歭evel鐨勭駭鍒紙姝ょ駭鍒彲浠ヨ嚜瀹氫箟錛岀郴緇熼粯璁ゆ彁渚涗簡(jiǎn)浠ヤ笅綰у埆錛?BR>debug//璋冭瘯淇℃伅
info//涓鑸俊鎭?BR>warn//璀﹀憡淇℃伅
error//閿欒淇℃伅
fatal//鑷村懡閿欒淇℃伅
涓婇潰鍒楀嚭鐨勫氨鏄墍璋搇og4j鐨勮緭鍑虹駭鍒紝log4j寤鴻鍙嬌鐢?涓駭鍒紝瀹冧滑浠庝笂鍒頒笅鍒嗗埆涓篍RROR銆乄ARN銆両NFO銆丏EBUG錛屽亣璁句綘瀹氫箟鐨勭駭鍒槸info錛岄偅涔坋rror鍜寃arn鐨勬棩蹇楀彲浠ユ樉紺鴻屾瘮浠栦綆鐨刣ebug淇℃伅灝變笉鏄劇ず浜?jiǎn)銆?
log4j.appender.appenderName = fully.qualified.name.of.appender.class銆俵og4j鎻愪緵浜?jiǎn)浠ヤ笅鍑牽U嶅父鐢ㄧ殑杈撳嚭鐩殑鍦幫細(xì)
org.apache.log4j.ConsoleAppender錛屽皢鏃ュ織淇℃伅杈撳嚭鍒版帶鍒跺彴
org.apache.log4j.FileAppender錛屽皢鏃ュ織淇℃伅杈撳嚭鍒頒竴涓枃浠?BR>org.apache.log4j.DailyRollingFileAppender錛屽皢鏃ュ織淇℃伅杈撳嚭鍒頒竴涓紝騫朵笖姣忓ぉ杈撳嚭鍒頒竴涓柊鐨勬棩蹇楁枃浠?BR>org.apache.log4j.RollingFileAppender錛屽皢鏃ュ織淇℃伅杈撳嚭鍒頒竴涓枃浠訛紝閫氳繃鎸囧畾鏂囦歡鐨勭殑灝哄錛屽綋鏂囦歡澶у皬鍒拌揪鎸囧畾灝哄鐨勬椂鍊欎細(xì)鑷姩鎶婃枃浠舵敼鍚嶏紝濡傚悕涓篹xample.log鐨勬枃浠朵細(xì)鏀瑰悕涓?example.log.1錛屽悓鏃朵駭鐢熶竴涓柊鐨別xample.log鏂囦歡銆傚鏋滄柊鐨勬枃浠跺啀嬈¤揪鍒版寚瀹氬昂瀵革紝鍙堜細(xì)鑷姩鎶婃枃浠舵敼鍚嶄負(fù) example.log.2錛屽悓鏃朵駭鐢熶竴涓猠xample.log鏂囦歡銆備緷姝ょ被鎺紝鐩村埌example.log. MaxBackupIndex錛?MaxBackupIndex鐨勫煎彲鍦ㄩ厤緗枃浠朵腑瀹氫箟銆?BR>org.apache.log4j.WriterAppender錛屽皢鏃ュ織淇℃伅浠ユ祦鏍煎紡鍙戦佸埌浠繪剰鎸囧畾鐨勫湴鏂廣?BR>org.apache.log4j.jdbc.JDBCAppender錛岄氳繃JDBC鎶婃棩蹇椾俊鎭緭鍑哄埌鏁版嵁搴撲腑銆?BR>
Log4j鎻愪緵浜?jiǎn)涓涓嬪嚑縐嶅竷灞錛?BR>org.apache.log4j.HTMLLayout錛屼互HTML琛ㄦ牸褰㈠紡甯冨眬
org.apache.log4j.PatternLayout錛屽彲浠ョ伒媧誨湴鎸囧畾甯冨眬妯″紡
org.apache.log4j.SimpleLayout錛屽寘鍚棩蹇椾俊鎭殑綰у埆鍜屼俊鎭瓧絎︿覆
瀹氫箟涓涓狿atternLayout甯冨眬鐨勮鍙ヤ負(fù)錛?BR>log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1} - %m%n
PS錛欳onversionPattern鍙傛暟鐨勬牸寮忓惈涔?BR>鏍煎紡鍚?鍚箟
%c 杈撳嚭鏃ュ織淇℃伅鎵灞炵殑綾葷殑鍏ㄥ悕
%d 杈撳嚭鏃ュ織鏃墮棿鐐圭殑鏃ユ湡鎴栨椂闂達(dá)紝榛樿鏍煎紡涓篒SO8601錛屼篃鍙互鍦ㄥ叾鍚庢寚瀹氭牸寮忥紝姣斿錛?d{yyy-MM-dd HH:mm:ss }錛岃緭鍑虹被浼鹼細(xì)2002-10-18- 22錛?0錛?8
%f 杈撳嚭鏃ュ織淇℃伅鎵灞炵殑綾葷殑綾誨悕
%l 杈撳嚭鏃ュ織浜嬩歡鐨勫彂鐢熶綅緗紝鍗寵緭鍑烘棩蹇椾俊鎭殑璇彞澶勪簬瀹冩墍鍦ㄧ殑綾葷殑絎嚑琛?BR>%m 杈撳嚭浠g爜涓寚瀹氱殑淇℃伅錛屽log(message)涓殑message
%n 杈撳嚭涓涓洖杞︽崲琛岀錛學(xué)indows騫沖彴涓衡淺r\n鈥濓紝Unix騫沖彴涓衡淺n鈥?BR>%p 杈撳嚭浼樺厛綰э紝鍗矰EBUG錛孖NFO錛學(xué)ARN錛孍RROR錛孎ATAL銆傚鏋滄槸璋冪敤debug()杈撳嚭鐨勶紝鍒欎負(fù)DEBUG錛屼緷姝ょ被鎺?BR>%r 杈撳嚭鑷簲鐢ㄥ惎鍔ㄥ埌杈撳嚭璇ユ棩蹇椾俊鎭墍鑰楄垂鐨勬縐掓暟
%t 杈撳嚭浜х敓璇ユ棩蹇椾簨浠剁殑綰跨▼鍚?BR>
鍙﹀寰堝ソ鐨勫涔?fàn)绗旇畮图?xì)
http://www.sentom.net/list.asp?id=59
http://www.sentom.net/list.asp?id=60
http://www.sentom.net/list.asp?id=61
鐢變簬涓涓簲鐢紝鎴戦渶瑕佷竴涓狹D5綆楁硶鍔犲瘑鏁版嵁錛屾垜鏌ョ湅浜?jiǎn)缃戜笂涓浜涜祫鏂欙紝鍙戠幇鍏朵粬鐨勮璦閮芥槸瑕佽嚜宸卞疄鐜扮殑錛屼絾鏄疛ava灝卞緢綆鍗曪紝鍥犱負(fù)java涓殑綾誨凡緇忓鐞嗗ソ浜?jiǎn)锛岃屼笖榪樺彲浠ラ夊叾浠栫殑鍔犲瘑綆楁硶錛屽SHA錛屼笅闈㈠氨緇欎竴涓緥瀛?/p>
/*
* Created on 2005-5-21
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.merrylin.util;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class MD5Class {public static String MD5Encrypt(String inStr) {
MessageDigest md = null;
String outStr = null;try {
md = MessageDigest.getInstance("MD5"); //鍙互閫変腑鍏朵粬鐨勭畻娉曞SHA
byte[] digest = md.digest(inStr.getBytes()); //榪斿洖鐨勬槸byet[]錛岃杞寲涓篠tring瀛樺偍姣旇緝鏂逛究
outStr = bytetoString(digest);
} catch (NoSuchAlgorithmException nsae) {
nsae.printStackTrace();
}return outStr;
}public static String bytetoString(byte[] digest) {
String str = "";
String tempStr = "";for (int i = 1; i < digest.length; i++) {
tempStr = (Integer.toHexString(digest[i] & 0xff));
if (tempStr.length() == 1) {
str = str + "0" + tempStr;
} else {
str = str + tempStr;
}
}return str.toLowerCase();
}
}
綆鍗曞惂錛屽鏋滀綘鍙槸瑕佸簲鐢紝灝卞彲浠ヤ笉鐭ラ亾MD5鐨勭畻娉曚簡(jiǎn)錛屼絾鏄鎯崇煡閬撴洿澶氾紝鍙互鍙傜湅緗戜笂鐨勬簮鐮佹垨鏄?a >http://www.donews.net/qiyadeng/archive/2005/05/26/399340.aspx銆備絾鏄敞鎰廙D5鍔犲瘑綆楁硶錛岀牬瑙h繕鏄緢鍥伴毦錛岃櫧鐒舵姤閬撶О灞變笢澶у鐨勭帇灝忎簯鏁欐巿濂藉儚鏄凡緇忓鎵懼埌浜?jiǎn)鐮磋В鐨勬栆?guī)硶銆?/font>
<?xml version="1.0" encoding="UTF-8"?><!-- $Id: mysql-ds.xml,v 1.3.2.1 2004/12/01 11:46:00 schrouf Exp $ -->
<!-- Datasource config for MySQL using 3.0.9 available from:
http://www.mysql.com/downloads/api-jdbc-stable.html
--><datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/test</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
--><!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
<datasource>java:/MySqltDS</datasource>
<datasource-mapping>mySQL</datasource-mapping>
<datasource>java:/MySqltDS</datasource>
<type-mapping>mySQL</type-mapping>
<application-policy name = "MySqlDbRealm">
<authentication>
<login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule"
flag = "required">
<module-option name = "principal">test</module-option>
<module-option name = "userName">root</module-option>
<module-option name = "password">root</module-option>
<module-option name = "managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=MySqlDS</module-option>
</login-module>
</authentication>
</application-policy>
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
try {
// Put your code here
Context cx = new InitialContext();
Object obj = cx.lookup("java:/MySqlDS");
DataSource ds = (DataSource)obj;
Connection connect = ds.getConnection();
Statement stmt = connect.createStatement();
ResultSet rs = stmt.executeQuery("select * from customers");
while(rs.next()){
out.println(rs.getString("name"));
}
} catch (NamingException e) {
e.printStackTrace();
} catch(SQLException e1){
e1.printStackTrace();
}
out.flush();
out.close();
[root@localhost root]# native2ascii
浣犲ソ涓栫晫!
\u4f60\u597d\u4e16\u754c!
涓銆佸湪Servlet涓鍙栵細(xì)
鍦⊿ervlet涓竴鑸彲浠ョ敤ServletConfig瀵硅薄鐨刧etInitParameter鏂規(guī)硶鍘昏鍙栨寚瀹氱殑鍙傛暟鐨勫箋備婦涓緥瀛愶細(xì)
鏂板緩涓涓猄ervlet錛歊eadInitParameter.java
騫跺湪web.xml涓鍔犲涓嬮厤緗細(xì)
<servlet>
<servlet-name>ReadInitParameter</servlet-name>
<servlet-class>com.test.ReadInitParameter</servlet-class>
<init-param>
<param-name>email</param-name>
<param-value>qiyadeng@haha.com</param-value>
</init-param>
<init-param>
<param-name>name</param-name>
<param-value>qiyadeng</param-value>
</init-param>
</servlet>
閰嶇疆濂戒簡(jiǎn)web.xml錛岀幇鍦ㄥ彲浠ュ湪紼嬪簭涓鍙栧垵濮嬪寲鐨勫弬鏁頒簡(jiǎn)銆傚湪init(ServletConfig config)鏂規(guī)硶涓紶閫掍簡(jiǎn)涓涓猄ervletConfig鍙傛暟錛屽彲浠ヨ繖鏍瘋幏鍙栧垵濮嬪寲鍙傛暟錛?/p>
public void init(ServletConfig config) throws ServletException
{
super.init(config);
String email = config.getInitParameter("email");
String name = config.getInitParameter("name");
}
String email = getServletConfig().getInitParameter("email");
String name= getServletConfig().getInitParameter("name");
浜屻佸湪JSP涓鍙栵細(xì)
鍦↗SP涓鍙栫殑鏂瑰紡鍜孲ervlet涓殑doGet(),doPost(),Service()鐨勬柟娉曚竴鏍鳳紝閮芥槸鐢盨ervletConfig瀵硅薄鏉ヨ鍙栫殑銆?/p>
<%
String zhutou = getServletConfig().getInitParameter("zhutou");
String zhutouname = getServletConfig().getInitParameter("zhutouname");
浣嗘槸錛屽湪web.xml鐨勯厤緗渶瑕佹敞鎰忎竴涓?鏂板濡備笅錛?/p>
<servlet>
<servlet-name>ReadInitParam</servlet-name>
<jsp-file>ReadInitParam.jsp</jsp-file>
<init-param>
<param-name>zhutou</param-name>
<param-value>zhutou@hotmail.com</param-value>
</init-param>
<init-param>
<param-name>zhutouname</param-name>
<param-value>zhutou</param-value>
</init-param>
</servlet>
鍦╯ervlet-mapping涓篃瑕侀厤緗ソ錛?/p>
<servlet-mapping>
<servlet-name>ReadInitParam</servlet-name>
<url-pattern>ReadInitParam.jsp</url-pattern>
</servlet-mapping>
涓婇潰鐨凴eadInitParam.jsp鍑虹幇鐨勬爣絳鵑渶瑕乯sp鏂囦歡鐨勫叏閮ㄨ礬寰勩?/p>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
native2ascii -encoding gb2312 applicaion_CN.properties application_CN.properties
package com.yourcompany.struts;import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class SetCharacterEncodingFilter implements Filter {
public void init(FilterConfig arg0) throws ServletException {
}public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request,response);}
public void destroy() {
}}
<filter>
<filter-name>Character Encoding</filter-name>
<filter-class>com.yourcompany.struts.SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>