ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>
é’ˆå¯¹ä»¥ä¸‹å‡ ç§æƒ…况的Map:
用法åQ?/p>
用法åQ?/p>
用法
用法åQ?/p>
package action; import org.springframework.mail.SimpleMailMessage; import com.opensymphony.xwork2.Action; } <?xml version="1.0"
encoding="UTF-8"?> struts2的酾|®æ–‡ä»¶struts.xml: <?xml version="1.0" encoding="UTF-8"
?> <%@ page language="java" import="java.util.*"
pageEncoding="UTF-8"%> ™åµé¢sendok.jsp: <%@ page language="java" import="java.util.*"
pageEncoding="UTF-8"%>
<web-app version="2.4"
</web-app>
Java¾c»MailAction.java:
import org.springframework.mail.javamail.JavaMailSenderImpl;
import com.opensymphony.xwork2.ActionSupport;
public class MailAction extends ActionSupport{
springé…置文äšgapplicationContext.xml:
<beans xmlns="
</beans>
<!DOCTYPE struts PUBLIC
</struts>
™åµé¢send.jsp:
<html>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html>
</html>
˜q行send.jspå‘é€é‚®ä»Óž¼ŒæˆåŠŸçš„è¯ä¼?x¨¬)蟩转到sendok.jsp™åµé¢ã€?/p>
1ã€ç”¨ä¸¤é‡å¾ªçŽ¯çš„æ–¹æ³?/p>
<s:iterator id="data1" value="#request.data" status="d1">
<s:iterator id="data2" value="#request.data1" status="d2">
<s:property value="#data2"/>
</s:iterator>
</s:iterator>
2ã€ç”¨ä¸€é‡åó@环的æ–ÒŽ(gu¨©)³•
<s:iterator value="collection1" status="status">
<s:property value="collection1[#status.index][0]"/>
<s:property value="collection1[#status.index][1]"/>
</s:iterator>
**************************************************************************************************************** DAO里é¢å¦‚下写:(x¨¬) package com.sinoconcept.match.dao.impl; import java.util.List; import org.springframework.dao.DataAccessException; import com.sinoconcept.match.dao.DirctDAO; public class DirctDAOImpl extends BaseDAOHibernateImpl implements DirctDAO {  (t¨©ng)public List loadAll(String className) { } *************************************************************************************************************** service里如下写åQ?/strong> package com.sinoconcept.match.service.impl; import java.lang.reflect.InvocationTargetException; import org.apache.struts.util.LabelValueBean; import com.sinoconcept.match.dao.DirctDAO; public class DirctServiceImpl implements DirctService {  (t¨©ng)public List getDirect(String dirName) {  (t¨©ng) (t¨©ng)List result = this.getDir(dirName);  (t¨©ng)public List getDirectLabelValueBean(String dirName) {  (t¨©ng) (t¨©ng)List result = this.getDirLableValueBean(dirName);  (t¨©ng)public List getDir(String dirName) {  (t¨©ng) (t¨©ng)result = dirctDAO.loadAll(dirName);  (t¨©ng) (t¨©ng)return result;  (t¨©ng)@SuppressWarnings("unchecked")  (t¨©ng)public DirctDAO getDirctDAO() {  (t¨©ng)public void setDirctDAO(DirctDAO dirctDAO) { } *********************************************************************************************************************** Action里é¢å¦‚下讄¡½®åQ?/p> String status = request.getParameter("status"); List sttusList = dirctService //DrStatus æ•°æ®æ˜ 设文äšgåªè¦äºŒä¸ªå—段åQšprivate Integer idåQ›private String value; manDiaryForm.setStatus(status); request.setAttribute("statusList", sttusList); **************************************************************************************************************** ™åµé¢ä¸Šå¦‚下获得:(x¨¬) <html:select property="status" onchange="sel()"> |
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) åœ?/span> web 应用ä¸ï¼Œä½¿ç”¨ javascript 的机ä¼?x¨¬)éžå¸¸å¤šã€‚虽然丞®‘书上æå?qi¨¢ng)客æˆähœ‰å¯èƒ½ä»Žæµè§ˆå™¨å…³é— js çš„æ‰§è¡Œï¼Œä½†æ˜¯è¦æƒ³å®Œå…¨çš„ä¸ä½¿ç”¨å®ƒï¼Œç›®å‰çœ‹æ¥å¥½åƒ˜q˜ä(sh¨´)¸è¡Œã€‚æ¯”å¦‚ä¸€äº›å¤æ‚çš„ UI 是必™å»é€šè¿‡ js æ¥å®žçŽ°çš„åQˆå¦‚下拉å¼èœå•牽{‰ï¼‰(j¨ª)。那ä¹?/span> validation æ¡†æž¶æ”¯ä¸æ”¯æŒå®¢æˆ·ç«¯çš„ js 验è¯å‘¢ï¼Ÿ
½{”案是:(x¨¬)å½“ç„¶ã€‚å…·ä½“åšæ³•是åQ?/span>
- (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 在页é?/span> html:form æ ‡ç¾å†…部æ·ÕdŠ onsubmit="return validateEditForm(this);" åQˆå…·ä½“çš„è¯æ³•åQ?/span> validate+ åœ?/span> validation.xml æ–‡äšgä¸å®šä¹‰çš„ form çš„åå—)(j¨ª)åQ›å¦‚åQ?/span>
<html:form action="<%=action%>" method="post" onsubmit="return validateEditForm(this);">
- (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
�/span>
html:form
内部å—䏿·ÕdŠ åQ?/span>
<html:javascript formName="editForm"/>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) å¦‚æ¤ 2 æ¥å³å¯ã€‚虽ç„?d¨°ng)ž¼?/span> validation 框架éžå¸¸½Ž€å•易用,但是˜q˜æ˜¯æœ‰éœ€è¦æ³¨æ„的地方ã€?/span>
1. (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 使用 validation 框架åŽï¼Œ form å¿…é¡»ä»?/span> ValidatorForm 䏿´¾ç”Ÿï¼ŒåŒæ—¶å¿…é¡»åœ¨ä½ çš?/span> validate æ–ÒŽ(gu¨©)³•ä¸å…ˆè°ƒç”¨åŸºç±»çš?/span> validate æ–ÒŽ(gu¨©)³•。对于ä‹Éç”?/span> Dyna 开头的æ–ÒŽ(gu¨©)³•æ¥åˆ›å»?/span> formbean çš„è¯»è€…ï¼Œä½ ä¹Ÿå¿…é¡»æ”¹äØ“(f¨´)ä»?/span> dyna 开头嫿œ?/span> validator çš?/span> form ã€?/span>
2. (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) æ³¨æ„ DynaValidatorForm åQ?/span> ValidatorForm åQ‰å’Œ DynaValidatorActionForm åQ?/span> ValidatorActionForm åQ‰çš„åŒºåˆ«ã€‚åˆšå¼€å§‹æ—¶ä»Žå¸®åŠ©ä¸æ²¡çœ‹æ˜Žç™½˜q?/span> 2 者的区别åQŒåŽæ¥ä»Ž¾|‘上一½‹‡æ–‡ç« ä¸å¾—到äº?ji¨£n)用法的区别。å‰è€…主è¦çš„视角æ˜?/span> formbean åQŒè€ŒåŽè€…的视角æ˜?/span> action ã€?/span>
å½?/span> formbean 被ä¸åŒçš„ action 使用æ—Óž¼Œå¯¹äºŽä¸åŒçš?/span> action 而言åQŒä‹É用的 formbean çš„å±žæ€§é›†åˆæœ‰å¤§æœ‰ž®ã€‚æ¤æ—¶å¦‚æžœä»ç„¶ä»¥ formbean ä¸ÞZ¸»ä½“,ä¼?x¨¬)é€ æˆå…¶ä»– action çš„ä¸æ£å¸¸ä½¿ç”¨ã€‚å› æ¤ï¼Œ struts 䏿å‡ÞZº†(ji¨£n) DynaValidatorActionForm åQ?/span> ValidatorActionForm åQ‰ã€‚æ¤æ—¶åœ¨ validation.xml ä¸çš„ form æ ‡ç¾çš?/span> name 属性改ä¸?/span> action çš?/span> path 属性,åˆç”±äº?/span> action 䏿œ‰ attribute å’?/span> name 属性, validation 框架ž®±å¯æ ÒŽ(gu¨©)®˜q™ä¸ª action 得到对应çš?/span> formbean 。例å:(x¨¬)
<formset>
 (t¨©ng) <form name="/createAddress">
 (t¨©ng) (t¨©ng) (t¨©ng) <field property="city"
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) depends="required">
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <arg0 key="prompt.city"/>
 (t¨©ng) (t¨©ng) (t¨©ng) </field>
 (t¨©ng) </form>
 (t¨©ng) <form name="/editAddress">
 (t¨©ng) (t¨©ng) (t¨©ng) <field property="state"
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) depends="required">
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <arg0 key="prompt.state"/>
 (t¨©ng) (t¨©ng) (t¨©ng) </field>
 (t¨©ng) </form>
</formset>
3. (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ä¸?/span> DispatchAction çš„é…åˆã€?/span> Struts1.1 çš?/span> DispatchAction 使得相关çš?/span> Action 的关¾pÈ´§å¯†ï¼Œå¤§å¤§å‡å°‘äº?ji¨£n)应用ä¸?/span> Action 的个敎ͼŒä½†æ˜¯éšä¹‹è€Œæ¥ä¹Ÿå¸¦æ¥äº†(ji¨£n)使用 Validation 框架的ä¸ä¾¿ï¼Œä¸èƒ½ä¸è¯´æ˜¯ä¸€ä¸ªé—æ†¾ã€‚è¯»è€…ä¹Ÿè®¸è®¤ä¸ø™¿™¿U情况å¯ä»¥ä‹É用第 2 æ¡çš„解决æ–ÒŽ(gu¨©)¡ˆæ¥è§£å†»I¼Œå³é‡‡ç”?/span> DyanValidatorActionForm åQŒç„¶åŽåœ¨ Validation.xml æ–‡äšgä¸?/span> form çš„å¿UîC‹É用ä¸åŒçš„ Actiond çš?/span> path åQŒå³åœ?/span> validation.xml ä¸ä‹É用:(x¨¬) <form name="/user.do?method=doAdd"> ã€?/span>  (t¨©ng) (t¨©ng) (t¨©ng) <form name="/user.do?method=doLoad"> 。然而,在目å‰çš„版本ä¸?/span> Validation 框架òq¶ä¸æ”¯æŒ˜q™ç§è¾¨è®¤ã€‚一¿U绕˜q‡è¿™ä¸ªæƒ…å†ëŠš„æ–ÒŽ(gu¨©)³•是,针对åŒä¸€ä¸?/span> Action 实现¾cÕdœ¨ Struts-config.xml æ–‡äšgä¸å®šä¹‰å¤šä¸?/span> Action çš?/span> path åQŒåœ¨ä¸éœ€è¦è¿›è¡ŒéªŒè¯çš„地方ž®?/span> Action çš?/span> validate 属性置ä¸?/span> false 。å³åQ?/span>
struts-config.xml åQ?/span>
<action attribute="editForm" path="/user" name="editForm" input="/editUser.jsp"
parameter="method" scope="request" type="foxgem.struts.UserDispatchAction"
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) validate="true">
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <forward name="load" path="/editUser.jsp"/>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <forward name="action" path="/userquery.do?pageId=1"/>
</action>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
<action attribute="editForm" path="/loaduser" name="editForm" input="/editUser.jsp"
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) parameter="method" scope="request" type="foxgem.struts.UserDispatchAction"
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) validate="false">
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <forward name="load" path="/editUser.jsp"/>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <forward name="action" path="/userquery.do?pageId=1"/>
</action>
ç„¶åŽåœ?/span>
validation.xml
æ–‡äšgä¸ä‹Éç”?/span>
2
的方法�/span>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) æ€Èš„说æ¥åQ?/span> validation 框架大大的æé«˜ä(sh¨´)º†(ji¨£n)™åµé¢éªŒè¯çš„开呿•ˆçŽ‡ï¼Œæ›´å¸å¼•äh的是˜q™äº›éªŒè¯æ–ÒŽ(gu¨©)³•å¯é€šè¿‡è‡ªå®šä¹‰çš„ validator æ¥å¾—到å¤ç”¨ã€‚ä‹É得这些验è¯ä»£ç æ›´åŠ é›†ä¸ï¼Œå¯ç»´æŠ¤æ€§å¾—åˆ°åŠ å¼ºã€‚å½“ç„‰™šç€™å¹ç›®çš„进行, validation.xml å’?/span> validator-rules.xml ä¼?x¨¬)éšä¹‹å¢žé•¿ï¼Œ˜q™éƒ¨åˆ†çš„¾l´æŠ¤å·¥ä½œåŠ é‡äº?ji¨£n)ã€?/span>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) åŒæ—¶åQŒç”±äºŽä¸èƒ½éžå¸¸å¥½çš„å’Œ DispatchAction 一起å作,也ä‹É得大é‡ä‹Éç”?/span> DispatchAction 的项目ä¸èƒ½éžå¸¸å¥½çš„ä‹É用它。å¾è®®å¤§é‡ä‹Éç”?/span> DispatchAction 和页é¢éªŒè¯éžå¸¸å¤æ‚多å˜çš„™å¹ç›®å¯ä»¥æš‚时按原æ¥çš„æ–ÒŽ(gu¨©)³•æ¥éªŒè¯ï¼Œä¸ä‹Éç”?/span> validation 框架ã€?/span>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 至于 validation 框架的其他详¾l†ä¿¡æ¯ï¼Œè¯·å‚è§?/span> struts 的文档,在æ¤ä¸å†èµ˜è¿°ã€?/span>
n (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) http://raibledesigns.com/wiki/Wiki.jsp?page=SecuringDispatchAction DispatchAction ä¸?/span> validation 框架的å作解å†Ïx(ch¨®ng)–¹æ¡ˆæ¥æºäºŽæ¤ã€?/span>
n (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
http://otn.oracle.com/oramag/oracle/04-jan/o14dev_struts.html
Check Your Form with Validator
n (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
http://www-900.ibm.com/developerWorks/cn/java/l-struts1-1/
深入
Struts 1.1
n (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
http://javaboutique.internet.com/tutorials/Struts11Val/
Stepping through the Struts 1.1 Validator
  最å¤è€çš„解决æ–ÒŽ(gu¨©)¡ˆæ˜¯ä‹É用Stringçš„å—节ç 转æ¢åQŒè¿™¿Uæ–¹æ¡ˆé—®é¢˜æ˜¯ä¸æ–¹ä¾¿ï¼Œæˆ‘们需è¦ç ´å对象å°è£…性,˜q›è¡Œå—节ç è{æ¢ã€?/p>
  ˜q˜æœ‰ä¸€¿Uæ–¹å¼æ˜¯å¯¹J2EE容器˜q›è¡Œ¾~–ç 讄¡½®åQŒå¦‚æžœJ2EE应用¾pÈ»Ÿè„Þq¦»è¯¥å®¹å™¨ï¼Œåˆ™ä¼š(x¨¬)å‘生ä¹Þq åQŒè€Œä¸”指定容器é…ç½®ä¸ç¬¦åˆJ2EE应用和容器分¼›Èš„原则ã€?/p>
  在Java内部˜qç®—ä¸ï¼Œæ¶‰åŠ(qi¨¢ng)到的所有嗽W¦ä¸²éƒ½ä¼š(x¨¬)被è{åŒ–äØ“(f¨´)UTF-8¾~–ç æ¥è¿›è¡Œè¿½Ž—。那么,在被Java转化之å‰åQŒå—½W¦ä¸²æ˜¯ä»€ä¹ˆæ ·çš„å—½W¦é›†åQ?Javaæ€ÀL˜¯æ ÒŽ(gu¨©)®æ“作¾pÈ»Ÿçš„默认编ç å—½W¦é›†æ¥å†³å®šå—½W¦ä¸²çš„åˆå§‹ç¼–ç ,而且Java¾pÈ»Ÿçš„è¾“å…¥å’Œè¾“å‡ºçš„éƒ½æ˜¯é‡‡å–æ“作系¾lŸçš„默认¾~–ç ã€?/p>
ã€€ã€€å› æ¤åQŒå¦‚果能¾lŸä¸€Java¾pÈ»Ÿçš„输入ã€è¾“出和æ“作¾pÈ»Ÿ3者的¾~–ç å—符集åˆåQŒå°†èƒ½å¤Ÿä½¿Java¾pÈ»Ÿæ£ç¡®å¤„ç†å’Œæ˜¾½Cºæ±‰å—。这是处ç†Java¾pÈ»Ÿæ±‰å—的一个原则,但是在实际项目ä¸åQŒèƒ½å¤Ÿæ£¼‹®æŠ“ä½å’ŒæŽ§åˆ¶ä½Java¾pÈ»Ÿçš„输入和输出部分是比较难的。J2EEä¸ï¼Œç”׃ºŽæ¶‰åŠ(qi¨¢ng)到外部æµè§ˆå™¨å’Œæ•°æ®åº“½{‰ï¼Œæ‰€ä»¥ä¸æ–‡é—®é¢˜ä(sh¨´)Ø•ç æ˜¾å¾—éžå¸¸çªå‡ºã€?/p>
  J2EE应用½E‹åºæ˜¯è¿è¡Œåœ¨J2EE容器ä¸ã€‚在˜q™ä¸ª¾pÈ»Ÿä¸ï¼Œè¾“入途径有很多ç§åQšä¸€¿U是通过™åµé¢è¡¨å•打包æˆè¯·æ±‚(requeståQ‰å‘å¾€æœåŠ¡å™¨çš„åQ›ç¬¬äºŒç§æ˜¯é€šè¿‡æ•°æ®åº“读入;˜q˜æœ‰½W?¿Uè¾“å…¥æ¯”è¾ƒå¤æ‚,JSP在第一‹Æ¡è¿è¡Œæ—¶æ€ÀL˜¯è¢«ç¼–译æˆServletåQŒJSPä¸å¸¸å¸¸åŒ…å«ä¸æ–‡å—½W¦ï¼Œé‚£ä¹ˆ¾~–译使用javacæ—Óž¼ŒJavaž®†æ ¹æ®é»˜è®¤çš„æ“ä½œ¾pÈ»Ÿ¾~–ç ä½œäØ“(f¨´)åˆå§‹¾~–ç 。除éžç‰¹åˆ«æŒ‡å®šï¼Œå¦‚在Jbuilder/eclipseä¸å¯ä»¥æŒ‡å®šé»˜è®¤çš„å—符集ã€?/p>
ã€€ã€€è¾“å‡ºé€”å¾„ä¹Ÿæœ‰å‡ ç§åQšç¬¬ä¸€¿U是JSP™åµé¢çš„输出。由于JSP™åµé¢å·²ç»è¢«ç¼–译æˆServletåQŒé‚£ä¹ˆåœ¨è¾“出æ—Óž¼Œä¹Ÿå°†æ ÒŽ(gu¨©)®æ“作¾pÈ»Ÿçš„é»˜è®¤ç¼–ç æ¥é€‰æ‹©è¾“出¾~–ç åQŒé™¤éžæŒ‡å®šè¾“å‡ºç¼–ç æ–¹å¼ï¼›˜q˜æœ‰è¾“出途径是数æ®åº“åQŒå°†å—符串输出到数æ®åº“ã€?/p>
  由æ¤çœ‹æ¥åQŒä¸€ä¸ªJ2EE¾pÈ»Ÿçš„输入输出是éžå¸¸å¤æ‚åQŒè€Œä¸”是动æ€å˜åŒ–çš„åQŒè€ŒJava是跨òq›_°˜q行的,在实际编译和˜q行ä¸ï¼Œéƒ½å¯èƒ½æ¶‰å?qi¨¢ng)到ä¸åŒçš„æ“ä½œç³»¾lŸï¼Œå¦‚æžœä»È”±Java自由æ ÒŽ(gu¨©)®æ“作¾pÈ»Ÿæ¥å†³å®šè¾“入输出的¾~–ç å—符集,˜q™å°†ä¸å¯æŽ§åˆ¶åœ°å‡ºçŽîCØ•ç ã€?/p>
ã€€ã€€æ£æ˜¯ç”׃ºŽJava的跨òq›_°ç‰ÒŽ(gu¨©)€§ï¼Œä½¿å¾—å—符集问题必™åÈ”±å…·ä½“¾pÈ»Ÿæ¥ç»Ÿä¸€è§£å†³åQŒæ‰€ä»¥åœ¨ä¸€ä¸ªJava应用¾pÈ»Ÿä¸ï¼Œè§£å†³ä¸æ–‡ä¹Þq çš„æ ¹æœ¬åŠžæ³•æ˜¯æ˜Žç¡®æŒ‡å®šæ•´ä¸ªåº”ç”¨¾pÈ»Ÿ¾lŸä¸€å—符集ã€?/strong>
  指定¾lŸä¸€å—符集时åQŒåˆ°åº•是指定ISO8859_1 ã€GBK˜q˜æ˜¯UTF-8呢?
  åQ?åQ‰å¦‚¾lŸä¸€æŒ‡å®šä¸ºISO8859_1åQŒå› 为目å‰å¤§å¤šæ•°è½¯äšg都是西方人编制的åQŒä»–们默认的å—符集就是ISO8859_1åQŒåŒ…括æ“作系¾lŸLinux和数æ®åº“MySQL½{‰ã€‚è¿™æ øP¼Œå¦‚果指定Jive¾lŸä¸€¾~–ç 为ISO8859_1åQŒé‚£ä¹ˆå°±æœ‰ä¸‹é?个环节必™åÀLŠŠæ¡ï¼š(x¨¬)
  开å‘å’Œ¾~–è¯‘ä»£ç æ—¶æŒ‡å®šå—½W¦é›†ä¸ºISO8859_1ã€?/p>
  ˜q行æ“作¾pÈ»Ÿçš„默认编ç å¿…™åÀL˜¯ISO8859_1åQŒå¦‚Linuxã€?/p>
  在JSP头部声明åQ?lt;%@ page contentType="text/html;charset=ISO8859_1" %>ã€?/p>
  åQ?åQ‰å¦‚果统一指定为GBK䏿–‡å—符集,上述3ä¸ªçŽ¯èŠ‚åŒæ ·éœ€è¦åšåˆŽÍ¼Œä¸åŒçš„æ˜¯åªèƒ½˜q行在默认编ç 䨓(f¨´)GBKçš„æ“作系¾lŸï¼Œå¦‚䏿–‡Windowsã€?/p>
  ¾lŸä¸€¾~–ç 为ISO8859_1å’ŒGBK虽然带楾~–制代ç 的方便,但是å„自åªèƒ½åœ¨ç›¸åº”çš„æ“作¾pÈ»Ÿä¸Šè¿è¡Œã€‚ä½†æ˜¯ä¹Ÿç ´åäº?ji¨£n)Javaè·¨åã^å°è¿è¡Œçš„优越性,åªåœ¨ä¸€å®šèŒƒå›´å†…行得通。例如,ä¸ÞZº†(ji¨£n)使得GBK¾~–ç 在linux上è¿è¡Œï¼Œè®„¡½®Linux¾~–ç 为GBKã€?/p>
  那么有没有一¿U除äº?ji¨£n)应用系¾lŸä»¥å¤–ä¸éœ€è¦è¿›è¡Œä“Qä½•é™„åŠ è®¾¾|®çš„䏿–‡¾~–ç æ ÒŽ(gu¨©)œ¬è§£å†³æ–ÒŽ(gu¨©)¡ˆå‘¢ï¼Ÿ
  ž®†Java/J2EE¾pÈ»Ÿçš„统一¾~–ç 定义为UTF-8。UTF-8¾~–ç æ˜¯ä¸€¿Uå…¼å®ÒŽ(gu¨©)‰€æœ‰è¯a€çš„ç¼–ç æ–¹å¼ï¼ŒæƒŸä¸€æ¯”较éºÈƒ¦(ch¨³)çš„å°±æ˜¯è¦æ‰‘Öˆ°åº”用¾pÈ»Ÿçš„æ‰€æœ‰å‡ºå…¥å£åQŒç„¶åŽä‹É用UTF-8åŽ Z€œç»“扎â€å®ƒã€?/p>
  一个J2EE应用¾pÈ»Ÿéœ€è¦åšä¸‹åˆ—å‡ æ¥å·¥ä½œåQ?/p>
  以上讨论äº?ji¨£n)Java/J2EEçš„ä¸æ–‡é—®é¢˜ã€‚如果整个应用系¾lŸæ˜¯ä»Žå¼€å§‹è¿›è¡Œå¼€å‘,那么¾lŸä¸€æŒ‡å®š¾~–ç 为UTF-8ž®±éžå¸¸å®¹æ˜“åšåˆ°ã€‚如果是在英文æºä»£ç 基础上二‹Æ¡å¼€å‘,那么首先è¦å°†åŽŸæ¥çš„æºä»£ç 转æ¢ä¸ºç»Ÿä¸€¾~–ç UTF-8åQŒé‚£ä¹ˆè¿™¿Uè{æ¢å·¥ä½œä¼š(x¨¬)带æ¥ä¸€å®šçš„éºÈƒ¦(ch¨³)ã€?/p>  
  有了(ji¨£n)˜q™ä¸ªè§£å†³æ–ÒŽ(gu¨©)¡ˆåQŒæ— è®ÞZ‹É用什么框架Struts 或JSF或未æ¥å‡ºçŽ°çš„Java技术,¾lŸä¸€æˆUTF-8的方案都ä¸ä¼š(x¨¬)出现ä¹Þq åQŒç¬”者以å‰åœ¨Jsp/Servletæ—¶å°±åŸÞZºŽ˜q™ä¸ªåŽŸåˆ™åQŒåŽæ¥ä‹É用Struts½{‰æ¡†æžÓž¼Œä»Žæœªè¢«äØ•ç 困扰过åQŒå¸Œæœ›æœ¬æ–ÒŽ(gu¨©)¡ˆå…¬å¸ƒå‡ºæ¥ä¾›æ›´å¤šåˆå¦è€…分享,å‡å°‘Java/J2EE的第一个拦路虎åQŒä¹Ÿé¿å…采å–一些äÍ(f¨´)æ—¶è§£å†Ïx(ch¨®ng)–¹æ¡ˆã€?br />
***********************************************************************************************************************
 (t¨©ng) <filter>  (t¨©ng)
 (t¨©ng) <filter-name>encodingFilter</filter-name>  (t¨©ng)
 (t¨©ng) <filter-class>  (t¨©ng)
 (t¨©ng) org.springframework.web.filter.CharacterEncodingFilter  (t¨©ng)
 (t¨©ng) </filter-class>  (t¨©ng)
 (t¨©ng) <init-param>  (t¨©ng)
 (t¨©ng) <param-name>encoding</param-name>  (t¨©ng)
 (t¨©ng) <param-value>UTF-8</param-value>  (t¨©ng)
 (t¨©ng) </init-param>  (t¨©ng)
 (t¨©ng) <init-param>  (t¨©ng)
 (t¨©ng) <param-name>forceEncoding</param-name>  (t¨©ng)
 (t¨©ng) <param-value>true</param-value>  (t¨©ng)
 (t¨©ng) </init-param>  (t¨©ng)
 (t¨©ng) </filter>  (t¨©ng)
 (t¨©ng)  (t¨©ng)
 (t¨©ng)  (t¨©ng)  (t¨©ng)  (t¨©ng)  (t¨©ng)  (t¨©ng)  (t¨©ng)  (t¨©ng)  (t¨©ng)  (t¨©ng) <filter-mapping>  (t¨©ng)
 (t¨©ng) <filter-name>encodingFilter</filter-name>  (t¨©ng)
 (t¨©ng) <servlet-name>action</servlet-name>  (t¨©ng)
 (t¨©ng) </filter-mapping>
***********************************************************************************************
hibernate+mysql写入数æ®åº“çš„ä¸æ–‡æ˜?b style="COLOR: black; BACKGROUND-COLOR: #a0ffff">ä¹Þq åQŒæ€Žä¹ˆè§£å†³åQŸï¼Ÿ
hibernate.hbm.xmlåŠ ä¸Šå±žæ€?
<property name=\"connection.useUnicode\">true</property>
<property name=\"connection.characterEncoding\">UTF-8</property>
mysql 的驱动用3.0.15以上版本�
åŠ ä¸ªFilter, 使用UTF-8å—符集就å¯ä»¥äº?
 (t¨©ng)
1.使ApplicationResources.properties支æŒä¸æ–‡
建立一个ApplicationResources_ISO.propertiesæ–‡äšgåQŒæŠŠåº”用½E‹åºç”¨çš„message都写˜q›åŽ»åQŒç„¶åŽåœ¨dos下执行这个命令,
native2ascii (t¨©ng)-encoding (t¨©ng)gb2312 (t¨©ng)ApplicationResources_ISO.properties (t¨©ng)ApplicationResources.properties
˜q™æ ·ž®×ƒ¼š(x¨¬)ž®†ISO¾~–ç çš„ApplicationResourcesè½¬æ¢æˆGB2312¾~–ç çš„æ ¼å¼äº†(ji¨£n)åQŒåŒæ—¶ä¿å˜åˆ°ApplicationResources.properties.
native2ascii˜q™ä¸ªå·¥å…·æ˜¯jdk自带的一个东东,所以如果path都设定棼‹®å°±å¯ä»¥ç›´æŽ¥˜q行äº?ji¨£n)ï¼Œä½ å¯ä»¥åœ?java_home$/bin下找åˆîC»–ã€?br />转æ¢åŽçš„䏿–‡¾cÖM¼¼äºŽè¿™ä¸ªæ ·å?br />iso (t¨©ng)æ ¼å¼ä¸‹Â?t¨©ng)ï¼?x¨¬)tj.type=商å“车类åž?br />gb2312æ ¼å¼ä¸‹Â?t¨©ng)ï¼?x¨¬)tj.type=\u5546\u54c1\u8f66\u7c7b\u578b
ç„¶åŽåœ¨struts-config.xmlä¸è®¾¾|®åº”ç”¨è¿™ä¸ªèµ„æºæ–‡ä»?br /> (t¨©ng)<message-resources (t¨©ng)parameter=\"com.huahang.tj.ApplicationResources\" (t¨©ng)key=\"org.apache.struts.action.MESSAGE\" (t¨©ng)/>
å¼€å‘jsp时在jsp的开头写ä¸?lt;%@ (t¨©ng)page (t¨©ng)contentType=\"text/html; (t¨©ng)charset=gb2312\" (t¨©ng)%>åQŒå°†å—符集设¾|®æˆgb2312ž®±å¯ä»¥äº†(ji¨£n)ã€?br />
2.使数æ®åº“æ“作支æŒä¸æ–‡ã€?br />æ•°æ®åº“æ“作支æŒä¸æ–‡ä¸€ç›´è®©æˆ‘æ¯”è¾ƒå¤´ç—›ï¼Œä½†æ˜¯æ„Ÿè°¢å–„è§£äºø™¡£å‘我推èäº?ji¨£n)www.chinaxp.orgåQŒè¿™ä¸ªç½‘站是用struts框架开å‘çš„åQŒè€Œä¸”
开放æºç ,下è²äº?ji¨£n)æºç åŽå‘çŽ°å®ƒçš„ä¸æ–‡å¤„ç†å¾—很好,阅读部分æºç åQŒæ²¡æœ‰å‘çŽîC»€ä¹ˆç‰¹ŒDŠçš„å—符集è{æ¢ï¼Œå¾ˆçº³é—øP¼Œå¶ç„¶çœ‹åˆ°æ¥ég¸Š¾|‘å‹
留言知é“原æ¥servletå¯ä»¥¾lŸä¸€è®„¡½®å—符转æ¢ã€‚chinaxp.orgž®±æ˜¯˜q™ä¹ˆåšçš„ã€?br />在web.xmlä¸åŠ ä¸?br /> (t¨©ng) (t¨©ng)<filter>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<filter-name>Set (t¨©ng)Character (t¨©ng)Encoding</filter-name>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<filter-class>com.huahang.tj.struts.filters.SetCharacterEncodingFilter</filter-class>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<init-param>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<param-name>encoding</param-name>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<param-value>GB2312</param-value>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)</init-param>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<init-param>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<param-name>ignore</param-name>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<param-value>true</param-value>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)</init-param>
 (t¨©ng) (t¨©ng)</filter>
 (t¨©ng) (t¨©ng)<filter-mapping>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<filter-name>Set (t¨©ng)Character (t¨©ng)Encoding</filter-name>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<servlet-name>action</servlet-name>
 (t¨©ng) (t¨©ng)</filter-mapping>
˜q™é‡Œä¼?x¨¬)涉åŠ(qi¨¢ng)一个bean,æºç 如下åQ?br />/*
 (t¨©ng)* (t¨©ng)XP (t¨©ng)Forum
 (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
 (t¨©ng)* (t¨©ng)Copyright (t¨©ng)(c) (t¨©ng)2002-2003 (t¨©ng)RedSoft (t¨©ng)Group. (t¨©ng) (t¨©ng)All (t¨©ng)rights (t¨©ng)reserved.
 (t¨©ng)*
 (t¨©ng)*/
package (t¨©ng)com.huahang.tj.struts.filters;
import (t¨©ng)javax.servlet.*;
import (t¨©ng)java.io.IOException;
/**
 (t¨©ng)* (t¨©ng)<p>Filter (t¨©ng)that (t¨©ng)sets (t¨©ng)the (t¨©ng)character (t¨©ng)encoding (t¨©ng)to (t¨©ng)be (t¨©ng)used (t¨©ng)in (t¨©ng)parsing (t¨©ng)the
 (t¨©ng)* (t¨©ng)incoming (t¨©ng)request, (t¨©ng)either (t¨©ng)unconditionally (t¨©ng)or (t¨©ng)only (t¨©ng)if (t¨©ng)the (t¨©ng)client (t¨©ng)did (t¨©ng)not
 (t¨©ng)* (t¨©ng)specify (t¨©ng)a (t¨©ng)character (t¨©ng)encoding. (t¨©ng) (t¨©ng)Configuration (t¨©ng)of (t¨©ng)this (t¨©ng)filter (t¨©ng)is (t¨©ng)based (t¨©ng)on
 (t¨©ng)* (t¨©ng)the (t¨©ng)following (t¨©ng)initialization (t¨©ng)parameters:</p>
 (t¨©ng)* (t¨©ng)<ul>
 (t¨©ng)* (t¨©ng)<li><strong>encoding</strong> (t¨©ng)- (t¨©ng)The (t¨©ng)character (t¨©ng)encoding (t¨©ng)to (t¨©ng)be (t¨©ng)configured
 (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for (t¨©ng)this (t¨©ng)request, (t¨©ng)either (t¨©ng)conditionally (t¨©ng)or (t¨©ng)unconditionally (t¨©ng)based (t¨©ng)on
 (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)the (t¨©ng)<code>ignore</code> (t¨©ng)initialization (t¨©ng)parameter. (t¨©ng) (t¨©ng)This (t¨©ng)parameter
 (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)is (t¨©ng)required, (t¨©ng)so (t¨©ng)there (t¨©ng)is (t¨©ng)no (t¨©ng)default.</li>
 (t¨©ng)* (t¨©ng)<li><strong>ignore</strong> (t¨©ng)- (t¨©ng)I(y¨ªng)f (t¨©ng)set (t¨©ng)to (t¨©ng)\"true\", (t¨©ng)any (t¨©ng)character (t¨©ng)encoding
 (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)specified (t¨©ng)by (t¨©ng)the (t¨©ng)client (t¨©ng)is (t¨©ng)ignored, (t¨©ng)and (t¨©ng)the (t¨©ng)value (t¨©ng)returned (t¨©ng)by (t¨©ng)the
 (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<code>selectEncoding()</code> (t¨©ng)method (t¨©ng)is (t¨©ng)set. (t¨©ng) (t¨©ng)I(y¨ªng)f (t¨©ng)set (t¨©ng)to (t¨©ng)\"false,
 (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<code>selectEncoding()</code> (t¨©ng)is (t¨©ng)called (t¨©ng)<strong>only</strong> (t¨©ng)if (t¨©ng)the
 (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)client (t¨©ng)has (t¨©ng)not (t¨©ng)already (t¨©ng)specified (t¨©ng)an (t¨©ng)encoding. (t¨©ng) (t¨©ng)By (t¨©ng)default, (t¨©ng)this
 (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)parameter (t¨©ng)is (t¨©ng)set (t¨©ng)to (t¨©ng)\"true\".</li>
 (t¨©ng)* (t¨©ng)</ul>
 (t¨©ng)*
 (t¨©ng)* (t¨©ng)<p>Although (t¨©ng)this (t¨©ng)filter (t¨©ng)can (t¨©ng)be (t¨©ng)used (t¨©ng)unchanged, (t¨©ng)it (t¨©ng)is (t¨©ng)also (t¨©ng)easy (t¨©ng)to
 (t¨©ng)* (t¨©ng)subclass (t¨©ng)it (t¨©ng)and (t¨©ng)make (t¨©ng)the (t¨©ng)<code>selectEncoding()</code> (t¨©ng)method (t¨©ng)more
 (t¨©ng)* (t¨©ng)intelligent (t¨©ng)about (t¨©ng)what (t¨©ng)encoding (t¨©ng)to (t¨©ng)choose, (t¨©ng)based (t¨©ng)on (t¨©ng)characteristics (t¨©ng)of
 (t¨©ng)* (t¨©ng)the (t¨©ng)incoming (t¨©ng)request (t¨©ng)(such (t¨©ng)as (t¨©ng)the (t¨©ng)values (t¨©ng)of (t¨©ng)the (t¨©ng)<code>Accept-Language</code>
 (t¨©ng)* (t¨©ng)and (t¨©ng)<code>User-Agent</code> (t¨©ng)headers, (t¨©ng)or (t¨©ng)a (t¨©ng)value (t¨©ng)stashed (t¨©ng)in (t¨©ng)the (t¨©ng)current
 (t¨©ng)* (t¨©ng)user\'s (t¨©ng)session.</p>
 (t¨©ng)*
 (t¨©ng)* (t¨©ng)@author (t¨©ng)<a (t¨©ng)href=\"mailto:jwtronics@yahoo.com\">John (t¨©ng)Wong</a>
 (t¨©ng)*
 (t¨©ng)* (t¨©ng)@version (t¨©ng)$Id: (t¨©ng)SetCharacterEncodingFilter.java,v (t¨©ng)1.1 (t¨©ng)2002/04/10 (t¨©ng)13:59:27 (t¨©ng)johnwong (t¨©ng)Exp (t¨©ng)$
 (t¨©ng)*/
public (t¨©ng)class (t¨©ng)SetCharacterEncodingFilter (t¨©ng)implements (t¨©ng)Filter (t¨©ng){
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)// (t¨©ng)----------------------------------------------------- (t¨©ng)I(y¨ªng)nstance (t¨©ng)Variables
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)/**
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)The (t¨©ng)default (t¨©ng)character (t¨©ng)encoding (t¨©ng)to (t¨©ng)set (t¨©ng)for (t¨©ng)requests (t¨©ng)that (t¨©ng)pass (t¨©ng)through
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)this (t¨©ng)filter.
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*/
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)protected (t¨©ng)String (t¨©ng)encoding (t¨©ng)= (t¨©ng)null;
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)/**
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)The (t¨©ng)filter (t¨©ng)configuration (t¨©ng)object (t¨©ng)we (t¨©ng)are (t¨©ng)associated (t¨©ng)with. (t¨©ng) (t¨©ng)I(y¨ªng)f (t¨©ng)this (t¨©ng)value
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)is (t¨©ng)null, (t¨©ng)this (t¨©ng)filter (t¨©ng)instance (t¨©ng)is (t¨©ng)not (t¨©ng)currently (t¨©ng)configured.
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*/
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)protected (t¨©ng)FilterConfig (t¨©ng)filterConfig (t¨©ng)= (t¨©ng)null;
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)/**
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)Should (t¨©ng)a (t¨©ng)character (t¨©ng)encoding (t¨©ng)specified (t¨©ng)by (t¨©ng)the (t¨©ng)client (t¨©ng)be (t¨©ng)ignored?
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*/
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)protected (t¨©ng)boolean (t¨©ng)ignore (t¨©ng)= (t¨©ng)true;
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)// (t¨©ng)--------------------------------------------------------- (t¨©ng)Public (t¨©ng)Methods
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)/**
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)Take (t¨©ng)this (t¨©ng)filter (t¨©ng)out (t¨©ng)of (t¨©ng)service.
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*/
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)public (t¨©ng)void (t¨©ng)destroy() (t¨©ng){
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)this.encoding (t¨©ng)= (t¨©ng)null;
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)this.filterConfig (t¨©ng)= (t¨©ng)null;
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)/**
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)Select (t¨©ng)and (t¨©ng)set (t¨©ng)(if (t¨©ng)specified) (t¨©ng)the (t¨©ng)character (t¨©ng)encoding (t¨©ng)to (t¨©ng)be (t¨©ng)used (t¨©ng)to
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)interpret (t¨©ng)request (t¨©ng)parameters (t¨©ng)for (t¨©ng)this (t¨©ng)request.
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)@param (t¨©ng)request (t¨©ng)The (t¨©ng)servlet (t¨©ng)request (t¨©ng)we (t¨©ng)are (t¨©ng)processing
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)@param (t¨©ng)result (t¨©ng)The (t¨©ng)servlet (t¨©ng)response (t¨©ng)we (t¨©ng)are (t¨©ng)creating
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)@param (t¨©ng)chain (t¨©ng)The (t¨©ng)filter (t¨©ng)chain (t¨©ng)we (t¨©ng)are (t¨©ng)processing
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)@exception (t¨©ng)I(y¨ªng)OException (t¨©ng)if (t¨©ng)an (t¨©ng)input/output (t¨©ng)error (t¨©ng)occurs
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)@exception (t¨©ng)ServletException (t¨©ng)if (t¨©ng)a (t¨©ng)servlet (t¨©ng)error (t¨©ng)occurs
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*/
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)public (t¨©ng)void (t¨©ng)doFilter(ServletRequest (t¨©ng)request, (t¨©ng)ServletResponse (t¨©ng)response,
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)FilterChain (t¨©ng)chain)
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)throws (t¨©ng)I(y¨ªng)OException, (t¨©ng)ServletException (t¨©ng){
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)// (t¨©ng)Conditionally (t¨©ng)select (t¨©ng)and (t¨©ng)set (t¨©ng)the (t¨©ng)character (t¨©ng)encoding (t¨©ng)to (t¨©ng)be (t¨©ng)used
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if (t¨©ng)(ignore (t¨©ng)|| (t¨©ng)(request.getCharacterEncoding() (t¨©ng)== (t¨©ng)null)) (t¨©ng){
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)String (t¨©ng)encoding (t¨©ng)= (t¨©ng)selectEncoding(request);
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if (t¨©ng)(encoding (t¨©ng)!= (t¨©ng)null)
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)request.setCharacterEncoding(encoding);
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)// (t¨©ng)Pass (t¨©ng)control (t¨©ng)on (t¨©ng)to (t¨©ng)the (t¨©ng)next (t¨©ng)filter
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)chain.doFilter(request, (t¨©ng)response);
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)/**
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)Place (t¨©ng)this (t¨©ng)filter (t¨©ng)into (t¨©ng)service.
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)@param (t¨©ng)filterConfig (t¨©ng)The (t¨©ng)filter (t¨©ng)configuration (t¨©ng)object
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*/
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)public (t¨©ng)void (t¨©ng)init(FilterConfig (t¨©ng)filterConfig) (t¨©ng)throws (t¨©ng)ServletException (t¨©ng){
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)this.filterConfig (t¨©ng)= (t¨©ng)filterConfig;
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)this.encoding (t¨©ng)= (t¨©ng)filterConfig.getInitParameter(\"encoding\");
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)String (t¨©ng)value (t¨©ng)= (t¨©ng)filterConfig.getInitParameter(\"ignore\");
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if (t¨©ng)(value (t¨©ng)== (t¨©ng)null)
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)this.ignore (t¨©ng)= (t¨©ng)true;
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else (t¨©ng)if (t¨©ng)(value.equalsIgnoreCase(\"true\"))
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)this.ignore (t¨©ng)= (t¨©ng)true;
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else (t¨©ng)if (t¨©ng)(value.equalsIgnoreCase(\"yes\"))
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)this.ignore (t¨©ng)= (t¨©ng)true;
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)this.ignore (t¨©ng)= (t¨©ng)false;
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)// (t¨©ng)------------------------------------------------------ (t¨©ng)Protected (t¨©ng)Methods
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)/**
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)Select (t¨©ng)an (t¨©ng)appropriate (t¨©ng)character (t¨©ng)encoding (t¨©ng)to (t¨©ng)be (t¨©ng)used, (t¨©ng)based (t¨©ng)on (t¨©ng)the
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)characteristics (t¨©ng)of (t¨©ng)the (t¨©ng)current (t¨©ng)request (t¨©ng)and/or (t¨©ng)filter (t¨©ng)initialization
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)parameters. (t¨©ng) (t¨©ng)I(y¨ªng)f (t¨©ng)no (t¨©ng)character (t¨©ng)encoding (t¨©ng)should (t¨©ng)be (t¨©ng)set, (t¨©ng)return
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)<code>null</code>.
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)<p>
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)The (t¨©ng)default (t¨©ng)implementation (t¨©ng)unconditionally (t¨©ng)returns (t¨©ng)the (t¨©ng)value (t¨©ng)configured
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)by (t¨©ng)the (t¨©ng)<strong>encoding</strong> (t¨©ng)initialization (t¨©ng)parameter (t¨©ng)for (t¨©ng)this
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)filter.
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)* (t¨©ng)@param (t¨©ng)request (t¨©ng)The (t¨©ng)servlet (t¨©ng)request (t¨©ng)we (t¨©ng)are (t¨©ng)processing
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*/
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)protected (t¨©ng)String (t¨©ng)selectEncoding(ServletRequest (t¨©ng)request) (t¨©ng){
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return (t¨©ng)(this.encoding);
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}
}//EOC
åŠ ä¸Š˜q™ä¸ªåŽï¼Œåœ¨actionä¸å°±å¯ä»¥ç›´æŽ¥ä»Žformä¸æŽ¥æ”¶gb2312¾~–ç 的数æ®äº†(ji¨£n)åQŒè¿”回时自然也是gb2312äº?ji¨£n)ã€?br />但是˜q™ä¸ªå¥½åƒéœ€è¦servlet (t¨©ng)2.2以上的容å™?br />
¾l¼åˆä¸Šé¢çš„æ–¹æ³•,我解决了(ji¨£n)strutsä¸çš„䏿–‡é—®é¢˜åQŒçŽ°åœ¨è¿˜æ²¡å‘现新的问题ã€?/font>
1ã€â€œNo bean found under attribute key XXXâ€?br />在struts-config.xml里定义了(ji¨£n)一个ActionFormåQŒä½†type属性指定的¾cÖM¸å˜åœ¨åQŒtype属性的值应该是Form¾cÈš„å…¨å。或者是åQŒåœ¨Action的定义ä¸åQŒname或attribute属性指定的ActionFormä¸å˜åœ¨ã€?br />
2ã€â€œCannot find bean (t¨©ng)XXX in any scopeâ€?/strong>
在Action里一般会(x¨¬)request.setAttribute()一些对象,然åŽåœ¨è{å‘çš„jspæ–‡äšg里(用tag或request.getAttribute()æ–ÒŽ(gu¨©)³•åQ‰å¾—åˆ°è¿™äº›å¯¹è±¡åÆˆæ˜„¡¤ºå‡ºæ¥ã€‚这个异常是说jspè¦å¾—åˆîC¸€ä¸ªå¯¹è±¡ï¼Œä½†å‰é¢çš„Actioné‡ŒåÆˆæ²¡æœ‰ž®†å¯¹è±¡è®¾¾|®åˆ°requeståQˆä¹Ÿå¯ä»¥æ˜¯sessionã€servletContextåQ‰é‡Œã€?br />å¯èƒ½æ˜¯åå—é”™äº?ji¨£n),è¯äh£€æŸ¥jsp里的tag的一般是name属性,或getAttribute()æ–ÒŽ(gu¨©)³•çš„å‚æ•°å€û|¼›æˆ–者是Action逻辑有问题没有执行setAttribute()æ–ÒŽ(gu¨©)³•ž®±å…ˆè½¬å‘äº?ji¨£n)ã€?br />˜q˜æœ‰å¦å¤–一个å¯èƒ½ï¼Œ¾U¯çÑa(b¨³)是jspæ–‡äšg的问题,例如<logic:iterate>ä¼?x¨¬)指定一个idå€û|¼Œç„¶åŽåœ¨åó@环里<bean:write>使用˜q™ä¸ªå€ég½œä¸ºnameçš„å€û|¼Œå¦‚æžœ˜q™ä¸¤ä¸ªå€ég¸åŒï¼Œä¹Ÿä¼š(x¨¬)出现æ¤å¼‚常。(都是一个é“ç†ï¼Œrequest里没有对应的对象。)(j¨ª)
3ã€â€œMissing message for key "XXX"â€?/strong>
¾~ºå°‘所需的资æºï¼Œ‹‚€(g¨¨)查ApplicationResources.propertiesæ–‡äšgé‡Œæ˜¯å¦æœ‰jspæ–‡äšg里需è¦çš„资æºåQŒä¾‹å¦‚:(x¨¬)
 (t¨©ng)
 (t¨©ng)
˜q™è¡Œä»£ç ä¼?x¨¬)找msg.name.prompt资æºåQŒå¦‚æžœAppliationResources.properties里没有这个资æºå°±ä¼?x¨¬)å‡ºçŽ°æœ¬å¼‚å¸¸ã€‚åœ¨ä½¿ç”¨å¤šæ¨¡å—æ—¶åQŒè¦æ³¨æ„在模å—çš„struts-config-xxx.xml里指定è¦ä½¿ç”¨çš„èµ„æºæ–‡ä»¶å¿UŽÍ¼Œå¦åˆ™å½“然什么资æºä¹Ÿæ‰¾ä¸åˆŽÍ¼Œ˜q™ä¹Ÿæ˜¯ä¸€ä¸ªå¾ˆå®ÒŽ(gu¨©)˜“犯的错误ã€?/p>
4ã€â€œNo getter method for property (t¨©ng)XXX of bean teacherâ€?/strong>
5ã€â€œCannot find ActionMappings or ActionFormBeans collectionâ€?br />待解冟ë€?/p>
6ã€â€œCannot retrieve mapping for action XXXâ€?br />åœ?jspçš?lt;form>æ ‡ç¾é‡ŒæŒ‡å®šaction='/XXX'åQŒä½†˜q™ä¸ªActionòq¶æœªåœ¨struts-config.xml里设¾|®è¿‡ã€?/p>
7ã€HTTP Status 404 - /xxx/xxx.jsp
8ã€æ²¡æœ‰ä“Q何异叿€¿¡æ¯ï¼Œæ˜„¡¤º½Iºç™½™åµé¢
9ã€â€œThe element type "XXX" must be terminated by the matching end-tag "XXX".â€?br />˜q™ä¸ªæ˜¯struts-config.xmlæ–‡äšgçš„æ ¼å¼é”™è¯¯ï¼Œä»”细‹‚€(g¨¨)æŸ¥å®ƒæ˜¯å¦æ˜¯è‰¯æž„çš„xmlæ–‡äšgåQŒå…³äºŽxmlæ–‡äšgçš„æ ¼å¼è¿™é‡Œå°±ä¸èµ˜˜qîCº†(ji¨£n)ã€?/p>
10ã€â€œServlet.init() for servlet action threw exceptionâ€?/strong>
11ã€â€œResources not defined for Validatorâ€?/strong>
上题q™äº›æ˜¯æˆ‘在用Strutsåšé¡¹ç›®æ—¶é‡åˆ°˜q‡çš„问题åQŒå…¶ä¸ä¸€äº›æ›¾å›°ç»•我丞®‘æ—¶é—ß_(d¨¢)¼Œå…¶å®žå¤§éƒ¨åˆ†éƒ½æ˜¯è‡ªå·×ƒ¸¾l†å¿ƒ(j¨©)é€ æˆçš„。希望这½‹‡æ–‡ç« èƒ½å¯¹ä½ çš„å¼€å‘æœ‰æ‰€å¸®åŠ©åQŒåƈ‹Æ¢è¿Ž¾l§ç®‹(hu¨¤)补充ã€?br />
˜q™æ¡å¼‚常信æ¯è¯´å¾—很明白,jsp里è¦å–一个bean的属性出æ¥ï¼Œä½†è¿™ä¸ªbeanòq¶æ²¡æœ‰è¿™ä¸ªå±žæ€§ã€‚ä½ åº”è¯¥‹‚€(g¨¨)查jsp䏿Ÿä¸ªæ ‡½{„¡š„property属性的倹{€‚例如下é¢ä»£ç ä¸çš„cadeåº”è¯¥æ”¹äØ“(f¨´)codeæ‰å¯¹åQ?/p>
<
bean:write (t¨©ng)name
=
"
teacher
"
 (t¨©ng)property
=
"
cade
"
 (t¨©ng)filter
=
"
true
"
/>
Forwardçš„path属性指å‘çš„jsp™åµé¢ä¸å˜åœ¨ï¼Œè¯äh£€æŸ¥èµ\径和模å—åQŒå¯¹äºŽåŒä¸€æ¨¡å—ä¸çš„Action转å‘åQŒpathä¸ä¸åº”åŒ…å«æ¨¡å—ååQ›æ¨¡å—间转å‘åQŒè®°ä½ä‹É用contextRelative="true"ã€?/p>
å¯èƒ½æ˜¯Action里ä‹É用的forward与struts-config.xml里定义的forwardåç§°ä¸åŒ¹é…ã€?br />
一般出现这¿U异常在åŽé¢ä¼?x¨¬)显½CÞZ¸€ä¸ªå…³äºŽActionServletçš„å¼‚å¸¸å †æ ˆä¿¡æ¯ï¼Œå…¶ä¸æŒ‡å‡ºäº?ji¨£n)异常具体出现在代ç 的哪一行。我曄¡»é‡åˆ°çš„一‹Æ¡æ½Cºå¦‚下:(x¨¬)
java.lang.NullPointerException
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)at (t¨©ng)org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:
1003
)
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)at (t¨©ng)org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:
955
)
䏸™§£å†³é—®é¢˜ï¼Œå…ˆä¸‹è½½strutsçš„æºç 包åQŒç„¶åŽåœ¨ActionServlet.java的第1003行æ’å…¥æ–点,òq¶å¯¹å„å˜é‡è¿›è¡Œç›‘视。很丢ähåQŒæˆ‘竟然把struts-config.xmlæ–‡äšg弄丢äº?ji¨£n)ï¼Œå› æ¤å‡ºçŽ°äº†(ji¨£n)上é¢çš„异常åQŒåº”该是和CVSåŒæ¥æ—¶ä¸ž®å¿ƒ(j¨©)åˆ é™¤çš„ã€?/p>
˜q™ä¸ªæ˜¯åˆ©ç”¨Validatoræ’äšgåšéªŒè¯æ—¶å¯èƒ½å‡ºçŽ°çš„å¼‚å¸¸ï¼Œ˜q™æ—¶ä½ 見‚€(g¨¨)查validation.xmlæ–‡äšgåQŒçœ‹é‡Œé¢ä½¿ç”¨çš„èµ„æºæ˜¯å¦ç¡®å®žæœ‰å®šä¹‰åQŒformçš„å¿U°æ˜¯å¦æ£¼‹®ï¼Œ½{‰ç‰ã€?/p>
12.Struts¾~–译ä¸å‡ºçŽ°â€œcannot find actionmappings or actionformbeans collectionâ€æ½Cºçš„åŽŸå› åQ?br />
ž®‘了(ji¨£n)一ä¸?lt;load-on-startup>0</load-on-startup>
˜q™æ ·å¼€å§‹æ˜¯æ²¡æœ‰åŠ è²˜q™ä¸ª¾c»ï¼Œž®±æ²¡æœ‰åˆå§‹åŒ–struts-config.xmlåQŒæ‰€ä»¥æ‰¾ä¸åˆ°
actionmappings or actionformbeans collection�br />
也有å¯èƒ½å¯ÆD‡´˜q™ä¸ªé—®é¢˜åQŒä»Žstuts例åé‡Œé¢æ‹¯‚¿‡æ¥å°±å¥½äº†(ji¨£n)。struts1.1自带å…?0个jar包ã€?br />
有å¯èƒ½Actionå’ŒFormbean没有¾~–译åQŒä¹Ÿä¼?x¨¬)有˜q™ä¸ªé—®é¢˜åQŒæ£€æŸ¥ä¸€ä¸‹æœ‰æ²¡æœ‰å¯¹åº”çš„classæ–‡äšgž®±å¥½ã€‚class路径ä¸å¯¹å¯èƒ½ä¹Ÿä¼š(x¨¬)坯D‡´˜q™ä¸ªé—®é¢˜ã€?br />
用的servlet容器和struts版本ä¸å¯¹æˆ–这两个版本å调有问题ã€?br />åœ¨ä»¥ä¸Šå‡ æ¡éƒ½ä¸èƒ½è§£å†³é—®é¢˜çš„æƒ…况下åQŒå¯èƒ½å°±æ˜¯ç‰ˆæœ¬çš„问题?sh¨´)º†(ji¨£n),æ¢ä¸ªé«˜ç‰ˆæœ¬è¯•试å?/li>