??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲导航深夜福利,国产亚洲精品久久久久秋霞,亚洲熟妇少妇任你躁在线观看无码http://www.tkk7.com/jzone/category/40407.htmljava web, java wap ..My laboratory..zh-cnWed, 08 Sep 2010 19:46:23 GMTWed, 08 Sep 2010 19:46:23 GMT60OGNL功用Q!Q?/title><link>http://www.tkk7.com/jzone/articles/331427.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Wed, 08 Sep 2010 12:34:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/331427.html</guid><description><![CDATA[ <span style="font-size: 10pt; font-family: 微Y雅黑">讉K值栈中的action的普通属?username = <s:property value="username"/>    </span> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉K值栈中对象的普通属?get setҎ(gu))Q?/span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><s:property value="user.age"/> </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><s:property value="user['age']"/></span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><s:property value="user[""age""]"/></span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">wrong: <%--<s:property value="user[age]"/>--%>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉K值栈中对象的普通属?get setҎ(gu)):</span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"> <s:property value="cat.friend.name"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉K值栈中对象的普通方法:(x)<s:property value="password.length()"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉K值栈中对象的普通方法:(x)<s:property value="cat.miaomiao()" />   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉K值栈中action的普通方法:(x)<s:property value="m()" /> </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉K?rn)态方法:(x)<s:property value="@com.bjsxt.struts2.ognl.S@s()"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉K?rn)态属性:(x)<s:property value="@com.bjsxt.struts2.ognl.S@STR"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉KMathcȝ?rn)态方法:(x)<s:property value="@@max(2,3)" />   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉K普通类的构造方法:(x)</span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><s:property value="new com.bjsxt.struts2.ognl.User(8)"/> </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉KList:<s:property value="users"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉KList中某个元?<s:property value="users[1]"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉KList中元素某个属性的集合:<s:property value="users.{age}"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉KList中元素某个属性的集合中的特定?</span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><s:property value="users.{age}[0]"/></span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><s:property value="users[0].age"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉KSet:<s:property value="dogs"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉KSet中某个元?<s:property value="dogs[1]"/></span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><!--set</span><span style="font-size: 10pt; font-family: 微Y雅黑">是没有顺序的Q所以取下标值是没有意义?->  </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉KMap:<s:property value="dogMap"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉KMap中某个元?<s:property value="dogMap.dog101"/></span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><s:property value="dogMap['dog101']"/></span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><s:property value="dogMap[""dog101""]"/><!--</span><span style="font-size: 10pt; font-family: 微Y雅黑">取出key为dog101的?->   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉KMap中所有的key:<s:property value="dogMap.keys"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉KMap中所有的value:<s:property value="dogMap.values"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">讉K容器的大:(x)<s:property value="dogMap.size()"/></span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><s:property value="users.size"/> <!--</span><span style="font-size: 10pt; font-family: 微Y雅黑">不加ku9ohao也可以访?-> </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">投媄(jing)(qo(h))Q?lt;s:property value="users.{?#this.age==1}[0]"/><!--格式固定Qthis指@环过E中的每一个对象。取出users里age{于1的集合里面的W一个元?->   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">投媄(jing)Q?lt;s:property value="users.{^#this.age>1}.{age}"/><!--^指第一个元?->   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">投媄(jing)Q?lt;s:property value="users.{$#this.age>1}.{age}"/><!--$指结元素-->   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑">投媄(jing)Q?lt;s:property value="users.{$#this.age>1}.{age} == null"/><!--查看age>1的user的age是否为空--></span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"> []:<s:property value="[0].username"/>   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><!--</span><span style="font-size: 10pt; font-family: 微Y雅黑">指value stack栈顶的那个ActionQ因为action在栈?值value stack从上往下数的第?个元?-->   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><!--[0]</span><span style="font-size: 10pt; font-family: 微Y雅黑">代表action的位|,而不是action那个对象Q[0]代表?往下数到栈底的对象的集合?->   </span></p> <p><span style="font-size: 10pt; font-family: 微Y雅黑"><!--[0].username</span><span style="font-size: 10pt; font-family: 微Y雅黑">Q如果有多个actionQ在W一个action里找不到[0].usernameQ会(x)往下找-->   </span></p> <img src ="http://www.tkk7.com/jzone/aggbug/331427.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-09-08 20:34 <a href="http://www.tkk7.com/jzone/articles/331427.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2中解决一个表单多U提?/title><link>http://www.tkk7.com/jzone/articles/322934.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 06 Jun 2010 16:50:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/322934.html</guid><description><![CDATA[<a href="http://www.tkk7.com/nokiaguy/archive/2008/04/16/193287.html">http://www.tkk7.com/nokiaguy/archive/2008/04/16/193287.html</a> <p><span style="font-size: 10pt; color: blue; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: maroon; font-family: 'Courier New'">s:form </span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">action</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="submit.action"</span> <span style="font-size: 10pt; color: blue; font-family: 'Courier New'">></span><span style="font-size: 10pt; color: black; font-family: 'Courier New'"><br /> </span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: maroon; font-family: 'Courier New'">s:textfield </span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="param"</span><span style="font-size: 10pt; color: red; font-family: 'Courier New'"> label</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">content</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">"/></span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">  <br /> </span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: maroon; font-family: 'Courier New'">s:submit </span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="method1"</span><span style="font-size: 10pt; color: red; font-family: 'Courier New'"> value</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="</span><span style="font-size: 10pt; color: blue; font-family: ?hu)?>Ҏ(gu)一</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">"</span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">  method</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="method1"/></span><span style="font-size: 10pt; color: black; font-family: 'Courier New'"><br /> </span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: maroon; font-family: 'Courier New'">s:submit </span><span style="font-size: 10pt; color: red; font-family: 'Courier New'">name</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">=" method1"</span><span style="font-size: 10pt; color: red; font-family: 'Courier New'"> value</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="</span><span style="font-size: 10pt; color: blue; font-family: ?hu)?>Ҏ(gu)?/span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">"</span><span style="font-size: 10pt; color: red; font-family: 'Courier New'"> method</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">="method1"</span> <span style="font-size: 10pt; color: blue; font-family: 'Courier New'">/></span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">      <br /> </span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: maroon; font-family: 'Courier New'">s:form</span><span style="font-size: 10pt; color: blue; font-family: 'Courier New'">></span></p> <img src ="http://www.tkk7.com/jzone/aggbug/322934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-06-07 00:50 <a href="http://www.tkk7.com/jzone/articles/322934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2验证错误信息的两个经典方?addFieldError&addActionErrorhttp://www.tkk7.com/jzone/articles/322603.htmlGavin.leeGavin.leeThu, 03 Jun 2010 03:45:00 GMThttp://www.tkk7.com/jzone/articles/322603.htmlq两个方法都?/span>ActionSupportActionSupportActionSupporthasErrors()(ActionField)errortry {

   XXX

} catch (Exception e) {

   Super.addFieldError(“username”, “”);

      Super.addActionError(“”);

}

OK如:(x)

<s:fielderror>

   <s:param>username</s:param>

</s:fielderror>

<s:actionerror/>

fielderrorfielderrorMap-errorStruts2()

:<s:form theme="simple"> ,,Ҏ(gu)需要自己发?/span>
注:(x)我们只需要进行设|?/span>errorinputStruts2<result name=”input”>/input.jsp</result>



Gavin.lee 2010-06-03 11:45 发表评论
]]>
Struts2 Result-typeQ封装Action层到View层的跌{逻辑Q?/title><link>http://www.tkk7.com/jzone/articles/322222.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 29 May 2010 09:36:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/322222.html</guid><description><![CDATA[     摘要: Struts2Result列ؓ(f)一个独立的层次Q可以说是整个Struts2的Action层架构设计中的另外一个精华所在。Result之所以成Z个层ơ,其实 是ؓ(f)?jin)解决MVC框架中,如何从Control层{向View层这样一个问题而存在的   在struts2-core.jar/struts-default.xml中,我们可以扑ֈ关于result-type的一些配|信息,从中...  <a href='http://www.tkk7.com/jzone/articles/322222.html'>阅读全文</a><img src ="http://www.tkk7.com/jzone/aggbug/322222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-29 17:36 <a href="http://www.tkk7.com/jzone/articles/322222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Struts2中以IOC和非IOC方式获取session&requesthttp://www.tkk7.com/jzone/articles/322218.htmlGavin.leeGavin.leeSat, 29 May 2010 08:55:00 GMThttp://www.tkk7.com/jzone/articles/322218.htmlstruts1requestsessionstruts2requestsessionstrutssessionrequestSPRINGIOCIOCactionServletRequestAwareHttpServletRequest request

public class UserLoginAction extends ActionSupport implements ServletRequestAware {

public void setServletRequest(HttpServletRequest request) {

this.request=request;

}

requestrequest.getRemoteAddr()

actionSessionAwareMAPsession

public class UserLoginAction extends ActionSupport implements ServletRequestAware,SessionAware{

public void setServletRequest(HttpServletRequest request) {

this.request=request;

}

public void setSession(Map session) {

this.session=session; 

}

Iocq种方式主要是利用了(jin)com.opensymphony.xwork2.ActionContextorg.apache.struts2.ServletActionContext获得requestA. HttpServletRequest request = ServletActionContext.getRequest ();

BActionContext ct = ActionContext.getContext()

   HttpServletRequest request = (HttpServletRequest)ct.get(ServletActionContext. HTTP_REQUEST );

session?/span>Struts2sessionMapSessionMapsessionHttpSessionAMap session = ActionContext.getSession();

BMap session = (Map)ActionContext.getContext().get(ActionContext.SESSION);

SessionMapsessionHttpSessionHttpServletRequestrequest.getSession()HttpSessionSessionMapsession

Gavin.lee 2010-05-29 16:55 发表评论
]]>
采用url链接形式提交actionQ非s:from方式提交Q?/title><link>http://www.tkk7.com/jzone/articles/322215.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 29 May 2010 08:14:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/322215.html</guid><description><![CDATA[<p><span style="font-size: 10pt; font-family: ?hu)?>在我们日常开发中Qƈ不是都适合</span><span style="font-size: 10pt; font-family: 'Courier New'">form</span><span style="font-size: 10pt; font-family: ?hu)?>提交Q如在无U网l领域,使用</span><span style="font-size: 10pt; font-family: 'Courier New'">form</span><span style="font-size: 10pt; font-family: ?hu)?>提交?x)导致部分手机无法解析该标签Q这时候,我们可爱?/span><span style="font-size: 10pt; font-family: 'Courier New'">url</span><span style="font-size: 10pt; font-family: ?hu)?>链接提交׃(x)得到更广泛的应用?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">1. </span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>标准?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">WML1.0</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>表单提交格式</span></strong></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">anchor</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span><span style="font-size: 10pt; color: black; font-family: ?hu)?>提交</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">go</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">href</span><span style="color: black">=</span>"<span style="color: teal"><</span><span style="color: #3f7f7f">s:url</span> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">'/wap/postParams.action</span></em><span style="color: teal">/></span>" <span style="color: #7f007f">method</span><span style="color: black">=</span><em><span style="color: #2a00ff">"get"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">postfield</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"param1"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"$(param1)"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">postfield</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"param2"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"$(param2)"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">postfield</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token.name"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">postfield</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span>"<span style="color: black">${sessionScope['struts.token'] }</span>"<span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">go</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">anchor</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">2. </span></strong><strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"><a href=””></a></span></strong><strong><span style="font-size: 10pt; color: black; font-family: ?hu)?>?/span></strong><strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"><s:url /></span></strong><strong><span style="font-size: 10pt; color: black; font-family: ?hu)?>完成链接效果</span></strong></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">a</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">href</span><span style="color: black">=</span>'</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">    <span style="color: teal"><</span><span style="color: #3f7f7f">s:url</span> <span style="color: #7f007f">action</span><span style="color: black">=</span><em><span style="color: #2a00ff">"postParams"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">       <span style="color: teal"><</span><span style="color: #3f7f7f">s:param</span> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"param1"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"#stu.id"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">       <span style="color: teal"><</span><span style="color: #3f7f7f">s:param</span> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token.name"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">       <span style="color: teal"><</span><span style="color: #3f7f7f">s:param</span> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span>"<span style="color: black">${sessionScope['struts.token']}</span>" <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">    <span style="color: teal"></</span><span style="color: #3f7f7f">s:url</span><span style="color: teal">></span>'<span style="color: teal">></span></span></p> <p><span style="font-size: 10pt; color: black; font-family: ?hu)?>提交</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">a</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">3</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>Q?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'"><s:a /> </span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'"> <s:url /></span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>一起完成链接提?/span></strong></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">s:url</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">id</span><span style="color: black">=</span><em><span style="color: #2a00ff">"toUrl"</span></em> <span style="color: #7f007f">action</span><span style="color: black">=</span><em><span style="color: #2a00ff">"postParams"</span></em> <span style="color: #7f007f">namespace</span><span style="color: black">=</span><em><span style="color: #2a00ff">"/wap"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:param</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"param1"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"%{param1}"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:param</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"param2"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"%{param2}"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:param</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token.name"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em> <span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:param</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.token"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span>"<span style="color: black">${sessionScope['struts.token'] }</span>"<span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">s:url</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:a</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">href</span><span style="color: black">=</span><em><span style="color: #2a00ff">"%{toUrl}"</span></em><span style="color: teal">></span></span><span style="font-size: 10pt; color: black; font-family: ?hu)?>提交</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:a</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>以上q三个方法在无线互联|开发过E中都是很实用的Q具体的要看个h爱好Q当?dng)如果你?/span><span style="font-size: 10pt; font-family: 'Courier New'">WEB</span><span style="font-size: 10pt; font-family: ?hu)?>开发,你也可以直接?/span><span style="font-size: 10pt; font-family: 'Courier New'"><s:form /></span></p> <img src ="http://www.tkk7.com/jzone/aggbug/322215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-29 16:14 <a href="http://www.tkk7.com/jzone/articles/322215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回顾Struts2 工作?/title><link>http://www.tkk7.com/jzone/articles/322181.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Fri, 28 May 2010 15:33:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/322181.html</guid><description><![CDATA[Struts2 处理程概要Q?br /> 一个请求在Struts2框架中的处理大概分ؓ(f)以下几个步骤<br /> 1 客户端初始化一个指向Servlet容器Q例如TomcatQ的h<br /> 2 q个hl过一pd的过滤器QF(tun)ilterQ(q些qo(h)器中有一个叫做ActionContextCleanUp的可选过滤器Q这个过滤器对于Struts2和其他框架的集成很有帮助Q例如:(x)SiteMesh PluginQ?br /> 3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action<br /> 4 如果ActionMapper军_需要调用某个ActionQFilterDispatcher把请求的处理交给ActionProxy<br /> 5 ActionProxy通过Configuration Manager询问框架的配|文Ӟ扑ֈ需要调用的Actionc?br /> 6 ActionProxy创徏一个ActionInvocation的实例?br /> 7 ActionInvocation实例使用命名模式来调用,在调用Action的过E前后,涉及(qing)到相x(chng)截器QIntercepterQ的调用?br /> 8一旦Action执行完毕QActionInvocation负责Ҏ(gu)struts.xml中的配置扑ֈ对应的返回结果。返回结果通常是(但不LQ也可能是另外的一个Action链)(j)一个需要被表示的JSP或者FreeMarker的模版。在表示的过E中可以使用Struts2框架中承的标签。在q个q程中需要涉?qing)到ActionMapperQ在上述q程中所有的对象QActionQResultsQInterceptorsQ等Q都是通过ObjectFactory来创建的?br /> <br /> qo(h)器介l(F(tun)ilterQ?br /> FilterDispatcherQ注Q我所使用?.1.8版本中过滤器也升U到?jin)StrutsPrepareAndExecuteFilterQ?br /> org.apache.struts2.dispatcher.FilterDispatcher的四个功能(必须Q?br /> struts2.0的主要FilterQ负责四个方面的功能。具体:(x)<br /> Q?Q执行Actions<br /> qo(h)器通过ActionMapper对象Q来判断是否应该被映到Action.如果mapper对象指示他应该被映射Q过滤链会(x)被终止,然后Action被调用。这一炚w帔R要,如果同时使用SiteMesh filterQ则SiteMesh filter应该攑ֈ该过滤器前,否则Action的输出将不会(x)被装饰?br /> Q?Q清除ActionContext<br /> qo(h)器ؓ(f)?jin)确保内存溢出,会(x)自动的清除ActionContext。这可能?x)存在一些问题,在和其它的框枉成时Q例如SiteMesh。ActionContextCleanUp提供?jin)怎么处理q些问题的一些信息?br /> Q?Q维护静(rn)态内?br /> qo(h)器也?x)维护在Struts2中用的一些公q?rn)态的内容Q例如JavaScript文gQCSS文g{。搜?struts/*范围内的hQ然后将/struts/后面的值映到一些struts的公共包中,也可以在你的c\径中搜烦(ch)?br /> Q?Q清除ActionContext中的内容?br /> Finally{ActionContextCleanUp.cleanUp(req);} <br /> <br /> ActionContextCleanUp<br /> org.apache.struts2.dispatcher.ActionContextCleanUpQ可选)(j)<br /> 可选过滤器Q这个过滤器对于Struts2和其他框架的集成很有帮助Q例如:(x)SiteMesh Plugin。该qo(h)器用来与FilterDispatcher协同工作以便于集成SiteMesh. 通常, 排列qo(h)器ƈ保证SiteMesh排在W一? 而让FilterDispatcher排在W二位看h是最x(chng)? 然? 你可能希望在SiteMesh修饰器中使用WebWork的特? 包括value stack, 但由于FilterDispatcher清除ActionContext, 因此修饰器就讉K不到惌的数据了(jin). <br /> <br /> WEB.XML配置序<br /> 在WebWork的架构中, 标准的过滤器?filter-chain)一般以 ActionContextCleanUp 开? 后面跟着其他需要的qo(h)? 最? ?FilterDispatcher 处理h, 通常是将h传递给ActionMapper. ActionContextCleanUp 的首要用途是为集成SiteMesh服务? 他会(x)通知FilterDispatcher在正的旉清除h. 否则, ActionContext在SiteMesh修饰器访问数据之前被清除.<br /> 在不使用SiteMesh的时?Z(jin)使用WebWork,我们只需要在web.xml配置FilterDispatcher一个过滤器卛_,阅读一下FilterDispatcher的JavaDoc和源?我们可以看到它调用了(jin):<br /> finally {   ActionContextCleanUp.cleanUp(req); } <br /> 而且JavaDoc中也提到看ActionContextCleanUp的文?那我们就ȝ?我没看所?..)<br /> 在ActionContextCleanUp?有这L(fng)代码:<br /> req.setAttribute(CLEANUP_PRESENT, Boolean.TRUE); <br /> 如果FilterDispatcher(g)到q个属?׃?x)清除ActionContext中的内容?而由ActionContextCleanUp后箋(hu)的代码来清除,保证?jin)一pd的Filter讉K正确的ActionContext.文中提?如果用到SiteMesh的Filter或者其他类似Filter,那么讄序?<br /> 1 ActionContextCleanUp filter <br /> 2 SiteMesh filter <br /> 3 FilterDispatcher <br /> <br /> Struts 2 中用的模式--CHAIN OF RESPONSIBILITY(职责?<br />   适用性:(x)<br />   1.有多个对象可以处理统一hQ但是,那个对象处理要到q行时刻军_?br />   2.希望在不明确接收者的情况下,向多个对象中的一个提交一个请求?br />   3.可处理一个请求的对象集合应该被动态指定?br />   思考:(x)<br />   既然要向未知的接收者提交请求,那么需要统一的提交界面,也就是说Q所有接收者应该实C个公共接口,来接收请求,当然Delegate可以改变q一状况。一个典型的应用环境?yu)是GUIpȝ中的事g处理Ҏ(gu)。例如,我们可以定义一个OnClick的界面,然后OnClick可以是实际接收对象的一个方法代?<br />   OnClick Q?someObj.doClick;<br />   最重要的是QOnClick和someObj.doClick之间的关pL可以动态改变的。另外,q个doClick可以向一个对象集合分发该事gQ该集合也是可以动态变化的Q这时它的静(rn)态结构和观察员模式很怼Q但是职责链模式q不需要将事g递交l每一个接收者。观察员模式兛_(j)的是如何观察到模型的变化Q职责链模式兛_(j)的是如何递交Z件。这两者还都需要关?j)如何接收到相应的事Ӟ管接收的行为ƈ不一栗?br />   职责链模式需要关?j)每一个事仉应该被合适的一个或多个接收者处理(HOOK模式Q。例如,在一个消息分zq程中,我们需要考虑如何增减消息处理q程Q以处理相关的消息,通常q些处理q程都是各不相同的行为,q且反过来可能对发送者有影响。观察员模式一般而言Q应该是无扰的?br />   接收者常常是通过Composite模式来组l的?br />   COMMAND(命o(h))<br />   适用性:(x)<br />   1.Command模式是回调函数的一个面向对象的替代品?br />   2.Command对象可以有和初始h无关的生存期<br />   3.支持取消操作<br />   4.支持修改日志<br />   5.用构建在原语操作上的高层操作构造一个系l?br />   思考:(x)<br />   COMMAND模式L?x)关联到一个触发者。通常Q它提供的是一个非常简单的接口。COMMAND对象一般而言是一个相寚wU的对象Q他通常可以完成一个相对完整的概念操作Q好像是完成?jin)一个事务一栗因为COMMAND比较高Q那么其内部可以安排一些相对底层的支持Q例如日志活动。很多COMMAND对象也是同时提供撤销操作?br />   如果COMMAND应用于事务系l,q且Q一个COMMAND对象对应于一个事务的话,要小?j)撤销语意。一般而言Q不应该撤销一个事务系l中已经完成的事务。而是通过另一个反向的事务来冲c(din)例如一个帐务系l,对于错误的记帐流水事务,在向pȝ提交以前Q可以简单撤销Q这可以在Command对象的撤销操作中实玎ͼ也可以简单放弃)(j)。对于提交以后,则应该提供一个反向的撤销水事务Q不在撤销操作中实玎ͼ(j)Q这L(fng)l最l记录两个事务,q且后一个事务可以冲销前一个事务。进一步,如果发现历史帐务水记录有错Q一般的财务逻辑是需要用U字冲正Q就更不应该采用撤销的手D了(jin)?br />   职责铄接收者,可以实现为COMMAND对象Q当?dng)qƈ不必要? <img src ="http://www.tkk7.com/jzone/aggbug/322181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-28 23:33 <a href="http://www.tkk7.com/jzone/articles/322181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA脚本取得struts2 OgnlValueStack中的?/title><link>http://www.tkk7.com/jzone/articles/321637.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 22 May 2010 15:56:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/321637.html</guid><description><![CDATA[<p>1 利用脚本获取传入|(x) </p> <p>在struts2中action传递给jsp中的数据是保存在OgnlValueStack中的Q所以在jsp面中如果想利用脚本而不是sturts标签获取传入值的话,量使用OgnlValueStack的D得,例如Q?</p> <p><%...OgnlValueStack stack = (OgnlValueStack) request.getAttribute("struts.valueStack"); </p> <p>Article article = (Article)(stack.findValue("article"));%> </p> <p>2 sturts2标签自动转换Html标签 </p> <p>在用struts2标签<s:property value="">来显CZ递值的时候,?x)将字符串中的html标签转换Q所以可以利用java脚本直接获取传入|使用方式见第一?br /> </p> <img src ="http://www.tkk7.com/jzone/aggbug/321637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-22 23:56 <a href="http://www.tkk7.com/jzone/articles/321637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSH2 主要知识?SSH2的jar包详?/title><link>http://www.tkk7.com/jzone/articles/321578.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Fri, 21 May 2010 14:00:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/321578.html</guid><description><![CDATA[<p>以下为我下蝲的传智播客视频里SSH视频的目录,感觉ȝ的挺好,SSH2学习(fn)中一直由q套视频伴随着?br /> </p> <p>SSH2要点Q?br /> Struts2.1.8 要点Q?br /> 01 struts2?qing)struts2开发环境的搭徏<br /> 02 W一个struts2应用开?br /> 03 解决struts2配置文g无提C问?br /> 04 Action名称的搜索顺?br /> 05 Action配置的各w认?br /> 06 result配置的各U视图{发类?br /> 07 为Action属性注入?br /> 08 指定Struts2处理的请求后~、常量定义、常用常?br /> 09 Struts2的处理流E与Action的管理方?br /> 10 为应用指定多个配|文?br /> 11 动态方法调用和使用通配W定义action<br /> 12 h参数接收与采用复合类型接收请求参数及(qing)解决中文参数q问题<br /> 13 自定义类型{换器<br /> 14 全局cd转换?br /> 15 讉K或添加request、session、application属?br /> 16 文g上传<br /> 17 多文件上?br /> 18 自定义拦截器<br /> 19 对Action中所有方法进行输入校?br /> 20 对action指定Ҏ(gu)q行校验<br /> 21 输入校验的流E?br /> 22 ZXML配置方式实现对action的所有方法进行校?br /> 23 ZXML配置方式实现Ҏ(gu)定actionҎ(gu)校验与基于XML配置校验的一些特?br /> 24 配置国际化全局资源文g、输出国际化信息<br /> 25 输出带有占位W的国际化信?br /> 26 配置包范围国际化资源文g<br /> 27 配置Action范围国际化资源文?br /> 28 ognl表达?br /> 29 struts2常用标签解说<br /> 30 防止表单重复提交</p> <p>Spring2.5 要点Q?br /> 01 全面阐释Spring?qing)其各项功?br /> 02 搭徏与测试Spring的开发环?nbsp;<br /> 03 ~码剖析Spring理Bean的原?nbsp;<br /> 04 Spring的三U实例化Bean的方?nbsp;<br /> 05 配置Spring理的bean的作用域 <br /> 06 Spring理的Bean的生命周?nbsp;<br /> 07 ~码剖析Spring依赖注入的原?nbsp;<br /> 08 ~码剖析Spring装配基本属性的原理 <br /> 09 Spring如何装配各种集合cd的属?nbsp;<br /> 10 使用构造器装配属?nbsp;<br /> 11 用@Resource注解完成属性装?nbsp;<br /> 12 ~码剖析@Resource注解的实现原?nbsp;<br /> 13 @Autowire注解与自动装?nbsp;<br /> 14 让Spring自动扫描和管理Bean <br /> 15 使用JDK中的Proxy技术实现AOP功能 <br /> 16 使用CGLIB实现AOP功能与AOP概念解释 <br /> 17 使用Spring的注解方式实现AOP入门 <br /> 18 使用Spring的注解方式实现AOP的细?nbsp;<br /> 19 使用Spring配置文g实现AOP <br /> 20 aspectj的切入点语法定义l节 <br /> 21 搭徏和配|Spring与jdbc整合的环?nbsp;<br /> 22 Spring集成的jdbc~码和事务管?nbsp;<br /> 23 使用Spring注解方式理事务与传播行?nbsp;<br /> 24 使用Spring配置文g实现事务理 <br /> 25 搭徏和配|Spring与Hibernate整合的环?nbsp;<br /> 26 Spring集成的Hibernate~码与测?nbsp;<br /> 27 Struts与Spring集成Ҏ(gu)1(Struts集成Spring) <br /> 28 Struts与Spring集成Ҏ(gu)2(Spring集成Struts) <br /> 29 为Spring集成的Hibernate配置二~存 <br /> 30 Spring提供的CharacterEncoding和OpenSessionInView功能 <br /> 31 使用Spring集成JPA <br /> 32 Struts+Spring+JPA集成 <br /> 33 使用Spring集成Struts2 </p> <p>Hibernate3.3要点Q?br /> 01 hibernate介绍与动手入门体?br /> 02 hibernate入门案例的细节分?br /> 03 hibernate入门案例的代码优?br /> 04 Session接口?qing)get|load|persistҎ(gu)<br /> 05 实体对象的三U状态与saveOrUpdateҎ(gu)<br /> 06 完善HibernateUtilcd(qing)hql查询入门<br /> 07 实体cL属性名与数据库关键字冲H问?br /> 08 hql的命名参CQuery接口的分|?br /> 09 Criteria查询方式<br /> 10 使用Hibernate完成CRUD实验的步骤说?br /> 11 完成CRUD实验q回֒补充l节知识Q上Q?br /> 12 完成CRUD实验q回֒补充l节知识Q下Q?br /> 13 ȝ分析W一天的讲解内容<br /> 14 多对一兌关系的映与原理分析<br /> 15 多对一兌关系的检索与原理分析<br /> 16 保存多对一兌关系的更q一步分?br /> 17 一对多兌关系的映与原理分析<br /> 18 一对一主键兌关系的映与原理分析<br /> 19 一对一主键兌关系的检?br /> 20 一对一外键兌关系的映与原理分析<br /> 21 多对多关联关pȝ映射与原理分?br /> 22 多对多关联关pȝ(g)?br /> 23 lg兌关系的映与原理分析<br /> 24 兌关系的ȝ<br /> 25 Hibernate中用的集合cd<br /> 26 兌关系的联操?br /> 27 inverse属性的作用与原理分?br /> 28 分析有序集合与多对多中的inverse属?br /> 29 l承关系_整个l承?wi)映到一张表<br /> 30 l承关系_每个cL到一张表<br /> 31 l承关系_鉴别器与内连接相l合<br /> 32 l承关系_每个具体cL一张独立表<br /> 33 loadҎ(gu)的懒加蝲?qing)原理分?br /> 34 一对一的懒加蝲分析<br /> 35 一对多和多对多的懒加蝲分析<br /> 36 多对一与一对一的懒加蝲原理分析<br /> 37 懒加载的一些扩充细?br /> 38 ~存的原理与模拟分析<br /> 39 hibernate的内部缓存分?br /> 40 hibernate的二U缓存配|与分析<br /> 41 hibernate二~存的扩充细?br /> 42 分布式缓存的分析与研?br /> 43 事务与事务边界的相关知识<br /> 44 OpenSessionInView模式的代码分?br /> 45 OpenSessionInView的时序图与缺点分?br /> 46 事务中的(zhn)观锁与乐观?br /> 47 串讲hibernate配置文g中的配置?br /> 48 串讲hibernate映射文g中的配置?br /> 49 Hibernate映射cd<br /> 50 Session与SessionFactory的多U程问题<br /> 51 Session的内部缓存管理与扚w更新<br /> 52 Hql与Criteria查询的补充知?br /> 53 iterate查询与N+1此查询问?br /> 54 Hibernate的拦截器与监听器<br /> 55 本地sql查询与命名查?br /> 56 Hiberante的最?jng)_?br /> <br /> jar作用的详解:(x)<br /> </p> <p>spring.jar 是包含有完整发布模块的单个jar 包。但是不包括mock.jar, aspects.jar, spring- </p> <p>portlet.jar, and spring-hibernate2.jar?</p> <p>spring-src.zip是所有的源代码压~包?</p> <p>除了(jin)spring.jar 文gQSpring q包括有其它21个独立的jar 包,各自包含着对应的SpringlgQ用户可以根据自q需要来选择l合自己的jar 包,而不必引入整个spring.jar 的所有类文g?</p> <p>spring-core.jar <br /> q个jar 文g包含Spring 框架基本的核?j)工L(fng)。Spring 其它lg要都要用到q个包里的类Q是?/p> <p>它组件的基本核心(j)Q当然你也可以在自己的应用系l中使用q些工具cR外部依赖Commons LoggingQ?(Log4J)?</p> <p>spring-beans.jar <br /> q个jar 文g是所有应用都要用到的Q它包含讉K配置文g、创建和理bean 以及(qing)q行Inversion of Control / Dependency InjectionQIoC/DIQ操作相关的所有类。如果应用只需基本的IoC/DI 支持Q引入spring-core.jar ?qing)spring-beans.jar 文g可以了(jin)?<br /> 外部依赖spring-coreQ?CGLIB)?</p> <p>spring-aop.jar <br /> q个jar 文g包含在应用中使用Spring 的AOP Ҏ(gu)时所需的类和源码元数据支持。用基于AOP 的SpringҎ(gu),如声明型事务理QDeclarative Transaction ManagementQ,也要在应用里包含q个jar包?<br /> 外部依赖spring-coreQ?(spring-beansQAOP AllianceQ?CGLIBQCommons Attributes)?</p> <p>spring-context.jar <br /> q个jar 文g为Spring 核心(j)提供?jin)大量扩展。可以找C用Spring ApplicationContextҎ(gu)时所需的全部类QJDNI 所需的全部类Qinstrumentationlg以及(qing)校验Validation 斚w的相关类,外部依赖spring-beans, (spring-aop)?</p> <p>spring-dao.jar <br /> q个jar 文g包含Spring DAO、Spring Transaction q行数据讉K的所有类。ؓ(f)?jin)用声明型事务支持Q还需在自q应用里包含spring-aop.jar。外部依赖spring-coreQ?spring-aopQ?spring-contextQ?JTA API)?</p> <p>spring-jdbc.jar <br /> q个jar 文g包含对Spring 对JDBC 数据讉Kq行装的所有类。外部依赖spring-beansQspring-dao?</p> <p>spring-support.jar <br /> q个jar 文g包含支持UI模版QVelocityQFreeMarkerQJasperReportsQ,邮g服务Q脚本服?JRuby)Q缓存CacheQEHCacheQ,d计划SchedulingQuartzQ方面的cR外部依赖spring-context, (spring-jdbc, Velocity, FreeMarker, JasperReports, BSH, Groovy, JRuby, Quartz, EHCache) </p> <p>spring-web.jar <br /> q个jar 文g包含Web 应用开发时Q用到Spring 框架时所需的核?j)类Q包括自动蝲入Web Application Context Ҏ(gu)的cRStruts 与JSF 集成cR文件上传的支持cRFilter cd大量工具辅助cR外部依赖spring-context, Servlet API, (JSP API, JSTL, Commons FileUpload, COS)?</p> <p>spring-webmvc.jar <br /> q个jar 文g包含Spring MVC 框架相关的所有类。包括框架的ServletsQW(xu)eb MVC框架Q控制器和视图支持。当?dng)如果你的应用使用了(jin)独立的MVC 框架Q则无需q个JAR 文g里的McR外部依赖spring-web, (spring-supportQTilesQiTextQPOI)?</p> <p>spring-portlet.jar <br /> spring自己实现的一个类似Spring MVC的框架。包括一个MVC框架和控制器。外部依赖spring-webQ?Portlet APIQ?spring-webmvc)?</p> <p>spring-struts.jar <br /> Struts框架支持Q可以更方便更容易的集成Struts框架。外部依赖spring-webQStruts?</p> <p>spring-remoting.jar <br /> q个jar 文g包含支持EJB、远E调用RemotingQRMI、Hessian、Burlap、Http Invoker、JAX-RPCQ方面的cR外部依赖spring-aopQ?(spring-contextQspring-webQHessianQBurlapQJAX-RPCQEJB API)?</p> <p>spring-jmx.jar <br /> q个jar包提供了(jin)对JMX 1.0/1.2的支持类。外部依赖spring-beansQspring-aopQ?JMX API?</p> <p>spring-jms.jar <br /> q个jar包提供了(jin)对JMS 1.0.2/1.1的支持类。外部依赖spring-beansQspring-daoQJMS API?</p> <p>spring-jca.jar <br /> 对JCA 1.0的支持。外部依赖spring-beansQspring-daoQ?JCA API?</p> <p>spring-jdo.jar <br /> 对JDO 1.0/2.0的支持。外部依赖spring-jdbcQ?JDO APIQ?(spring-web)?</p> <p>spring-jpa.jar <br /> 对JPA 1.0的支持。外部依赖spring-jdbcQ?JPA APIQ?(spring-web)?</p> <p>spring-hibernate2.jar <br /> 对Hibernate 2.1的支持,已经不徏议用。外部依赖spring-jdbcQHibernate2Q?spring-web)?</p> <p>spring-hibernate3.jar <br /> 对Hibernate 3.0/3.1/3.2的支持。外部依赖spring-jdbcQHibernate3Q?spring-web)?</p> <p>spring-toplink.jar <br /> 对TopLink框架的支持。外部依赖spring-jdbcQTopLink?</p> <p>spring-ibatis.jar <br /> 对iBATIS SQL Maps的支持。外部依赖spring-jdbcQiBATIS SQL Maps。另外的两个包?</p> <p>spring-mock.jar <br /> q个jar 文g包含Spring 一整套mock cL辅助应用的测试。Spring 试套g使用?jin)其中大量mock c,q样试更加简单。模拟HttpServletRequest 和HttpServletResponse cdWeb 应用单元试是很方便的。ƈ且提供了(jin)对JUnit的支持。外部依赖spring-core?</p> <p>spring-aspects.jar <br /> 提供对AspectJ的支持,以便可以方便的将面向斚w的功能集成进IDE中,比如Eclipse AJDT。外部依赖。WEAVER JARS (dist/weavers)说明?</p> <p>spring-agent.jar <br /> Spring的InstrumentationSavingAgent (为InstrumentationLoadTimeWeaver)Q一个设备代理包Q可以参考JDK1.5的Instrumentation功能获得更多信息。外部依赖none (for use at JVM startup: "-javaagent:spring-agent.jar")?</p> <p>spring-tomcat-weaver.jar <br /> 扩展Tomcat的ClassLoaderQ其可以用instrumentationQ设备)(j)cR外部依赖none (for deployment into Tomcat's "server/lib" directory)。如果需要用JSP语言作ؓ(f)Spring's web MVC tags的参敎ͼ则需要JSP 2.0的支持。或者选择Jakarta的JSTL (standard.jar)。如何选择q些发布包,军_选用哪些发布包其实相当简单。如果你正在构徏Web 应用q将全程使用SpringQ那么最好就使用单个全部的spring.jar 文gQ如果你的应用仅仅用到简单的Inversion of Control / Dependency InjectionQIoC/DIQ容器,那么只需spring-core.jar与spring-beans.jar 卛_Q如果你对发布的大小要求很高Q那么就得精?xi)细选了(jin)Q只取包含自己所需Ҏ(gu)的jar 文g?jin)。采用独立的发布包你可以避免包含自己的应用不需要的全部cR当然你可以采用其它的一些工h设法令整个应用包变小Q节省空间的重点在于准确地找?gu)己所需?Spring 依赖c,然后合ƈ所需的类与包可以了(jin)。Eclispe 有个插g叫ClassPathHelper 可以帮你找找所依赖的类 </p> <p> </p> <p>Hibernate一共包括了(jin)23个jar包,令hD~ؕ。下载HibernateQ例?.0.3E_版本Q解压羃Q可以看?</p> <p>一个hibernate2.jar和lib目录下有22个jar包:(x) </p> <p>hibernate2.jar: <br /> Hibernate的库Q没有什么可说的Q必M用的jar?</p> <p>cglib-asm.jar: <br /> CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心(j)的库Q必M用的jar?</p> <p>dom4j.jar: <br /> dom4j是一个Java的XML APIQ类gjdomQ用来读写XML文g的。dom4j是一个非帔R怼U的Java XML APIQ具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的YӞ可以在SourceForge上找到它。在IBM developerWorks上面可以扑ֈ一文章,对主的Java XML APIq行 的性能、功能和易用性的评测Qdom4j无论在那个方面都是非常出色的。我早在近两年之前开始 用dom4jQ直到现在。如今你可以看到来多的Java软g都在使用dom4j来读写XMLQ特别值得一提的 是连Sun的JAXM也在用dom4j。这是必M用的jar包,Hibernate用它来读写配|文件?</p> <p>odmg.jar: <br /> ODMG是一个ORM的规范,Hibernate实现?jin)ODMG规范Q这是一个核?j)的库,必须使用的jar包?</p> <p>commons-collections.jarQ?<br /> Apache Commons包中的一个,包含?jin)一些Apache开发的集合c,功能比java.util.*强大。必M用的jar包?</p> <p>commons-beanutils.jarQ?<br /> Apache Commons包中的一个,包含?jin)一些Bean工具cȝ。必M用的jar包?</p> <p>commons-lang.jar: <br /> Apache Commons包中的一个,包含?jin)一些数据类型工L(fng)Q是java.lang.*的扩展。必M用的jar包?</p> <p>commons-logging.jar: <br /> Apache Commons包中的一个,包含?jin)日志功能,必须使用的jar包。这个包本n包含?jin)一个Simple LoggerQ但是功能很弱。在q行的时候它?x)先在CLASSPATH找log4jQ如果有Q就使用log4jQ如果没有,找JDK1.4带的java.util.loggingQ如果也找不到就用Simple Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾Q当初Apache极力游说Sun把log4j加入JDK1.4Q然而JDK1.4目组已经 接近发布JDK1.4产品的时间了(jin)Q因此拒l了(jin)Apache的要求,使用自己的java.util.loggingQ这个包的功能比log4j差的很远Q性能也一般?后来Apache开发出来了(jin)commons-logging.jar用来兼容两个logger。因此用commons-logging.jar 写的logE序Q底层的Logger是可以切换的Q你可以选择log4jQjava.util.logging或者它自带?Simple Logger。不q我仍然强烈使用log4jQ因为log4j性能很高Qlog输出信息旉几乎{于 System.outQ而处理一条logq_只需?us。你可以在Hibernate的src目录下找到Hibernate已经Z准备好了(jin)的log4j的配|文Ӟ你只需要到Apache |站M载log4j可以了(jin)。commons-logging.jar也是必须的jar包?使用Hibernate必须的jar包就是以上的q几个,剩下的都是可选的?</p> <p>ant.jar: <br /> Ant~译工具的jar包,用来~译Hibernate源代码的。如果你不准备修改和~译Hibernate源代码,那么没有什么用Q可选的jar?</p> <p>optional.jarQ?<br /> Ant的一个辅助包?</p> <p>c3p0.jarQ?<br /> C3PO是一个数据库q接池,Hibernate可以配置Z用C3POq接池。如果你准备用这个连接池Q就需要这个jar包?</p> <p>proxool.jarQ?<br /> 也是一个连接池Q同上?</p> <p>commons-pool.jar, commons-dbcp.jar: <br /> DBCP数据库连接池QApache的Jakartal织开发的QTomcat4的连接池也是DBCP。实际上Hibernate自己也实C(jin)一个非帔R常简单的数据库连接池Q加上上?个,你实际上可以?Hibernate上选择4U不同的数据库连接池Q选择哪一个看个h的偏好,不过DBCP可能更通用一些。另外强调一点,如果在EJB中用HibernateQ一定要用App Server的连接池Q不要用以上4U连接池Q否则容器管理事务不起作用?</p> <p>connector.jar: <br /> JCA 规范Q如果你在App Server上把Hibernate配置为Connector的话Q就需要这个jar。不q实际上一般App Server肯定?x)带上这个包Q所以实际上是多余的包?</p> <p>jaas.jar: <br /> JAAS是用来进行权限验证的Q已l包含在JDK1.4里面?jin)。所以实际上是多余的包?</p> <p>jcs.jarQ?<br /> 如果你准备在Hibernate中用JCS的话Q那么必d括它Q否则就不用?</p> <p>jdbc2_0-stdext.jar: <br /> JDBC2.0的扩展包Q一般来说数据库q接池会(x)用上它。不qApp Server都会(x)带上Q所以也是多余的?</p> <p>jta.jarQ?<br /> JTA规范Q当Hibernate使用JTA的时候需要,不过App Server都会(x)带上Q所以也是多余的?/p> <img src ="http://www.tkk7.com/jzone/aggbug/321578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-21 22:00 <a href="http://www.tkk7.com/jzone/articles/321578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点W记Q六Q?/title><link>http://www.tkk7.com/jzone/articles/321315.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Tue, 18 May 2010 17:24:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/321315.html</guid><description><![CDATA[<p><span style="font-family: ?hu)?>二十三?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>表达?/span><span style="font-family: 'Courier New'">-Object Graphic Navigation Language</span><span style="font-family: ?hu)?>Q对象图D语言Q?/span></p> <p><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: ?hu)?>框架默认的表辑ּ语言</span><span style="font-family: 'Courier New'">?/span><span style="font-family: ?hu)?>其实我们可以不掌?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>表达式,</span><span style="font-family: 'Courier New'">JSTL/EL</span><span style="font-family: ?hu)?>来代?/span></p> <p><span style="font-family: ?hu)?>相对</span><span style="font-family: 'Courier New'">EL</span><span style="font-family: ?hu)?>表达式,它提供了(jin)qx(chng)我们需要的一些功能,如:(x)</span></p> <p><span style="font-family: 'Courier New'">1. </span><span style="font-family: ?hu)?>支持对象Ҏ(gu)调用。如</span><span style="font-family: 'Courier New'">xxx.sayHello()</span></p> <p><span style="font-family: 'Courier New'">2. </span><span style="font-family: ?hu)?>支持c静(rn)态方法调用和D问,表达式的格式?/span><span style="font-family: 'Courier New'">@[</span><span style="font-family: ?hu)?>cd名(包括包\径)(j)</span><span style="font-family: 'Courier New'">]@[</span><span style="font-family: ?hu)?>Ҏ(gu)?/span><span style="font-family: 'Courier New'">|</span><span style="font-family: ?hu)?>值名</span><span style="font-family: 'Courier New'">]</span><span style="font-family: ?hu)?>Q例如:(x)</span><span style="font-family: 'Courier New'">@<a href="mailto:java.lang.String@format('foo%25s">java.lang.String@format(‘foo%s</a>’, ‘bar’)</span><span style="font-family: ?hu)?>或?/span></p> <p><span style="font-family: 'Courier New'">@cn.itcast.Constant@APP_NAME</span></p> <p style="margin-left: 18.75pt; text-indent: -18.75pt; tab-stops: list 18.75pt"><span style="font-family: 'Courier New'">1.<span style="font: 7pt 'Times New Roman'">     </span></span><span style="font-family: ?hu)?>操作cd?/span></p> <p><span style="font-family: 'Courier New'">ognl</span><span style="font-family: ?hu)?>有一个上下文</span><span style="font-family: 'Courier New'">(Context)</span><span style="font-family: ?hu)?>概念Q说白了(jin)上下文就是一?/span><span style="font-family: 'Courier New'">MAP</span><span style="font-family: ?hu)?>l构Q它实现?/span><span style="font-family: 'Courier New'">java.utils.Map</span><span style="font-family: ?hu)?>接口Q在</span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: ?hu)?>中上下文</span><span style="font-family: 'Courier New'">(Context)</span><span style="font-family: ?hu)?>的实Cؓ(f)</span><span style="font-family: 'Courier New'">ActionContext</span><span style="font-family: ?hu)?>Q下面是上下文(</span><span style="font-family: 'Courier New'">Context</span><span style="font-family: ?hu)?>Q的l构C意?/span></p> <p><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: ?hu)?>中的</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>实现者ؓ(f)</span><span style="font-family: 'Courier New'">AcionContext</span></p> <p><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: ?hu)?>接收一个请求时Q会(x)q速创?/span><span style="font-family: 'Courier New'">ActionContext</span><span style="font-family: ?hu)?>Q?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: ?hu)?>Q?/span><span style="font-family: 'Courier New'">action</span><span style="font-family: ?hu)?>Q然后把</span><span style="font-family: 'Courier New'">action</span><span style="font-family: ?hu)?>存放q?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: ?hu)?>Q所?/span><span style="font-family: 'Courier New'">action</span><span style="font-family: ?hu)?>的实例变量可以被</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>讉K</span></p> <p><span style="font-family: ?hu)?>讉K上下文(</span><span style="font-family: 'Courier New'">Context</span><span style="font-family: ?hu)?>Q中的对象徐傲?/span><span style="font-family: 'Courier New'">#</span><span style="font-family: ?hu)?>W号标注命名I间Q如</span><span style="font-family: 'Courier New'">#application</span><span style="font-family: ?hu)?>Q?/span><span style="font-family: 'Courier New'">#session</span></p> <p><span style="font-family: ?hu)?>另外</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>?x)设定一个根对象Q?/span><span style="font-family: 'Courier New'">root</span><span style="font-family: ?hu)?>对象Q,?/span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: ?hu)?>中根对象是</span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: ?hu)?>Q值栈Q,如果要访问根对象Q即</span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: ?hu)?>Q中对象的属性,则可以省?/span><span style="font-family: 'Courier New'">#</span><span style="font-family: ?hu)?>命名I间Q直接访问该对象的属性即可?/span></p> <p><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: ?hu)?>中,根对?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: ?hu)?>的实Cؓ(f)</span><span style="font-family: 'Courier New'">OgnlValueStack</span><span style="font-family: ?hu)?>Q该对象不是我们惌的只存放单个|而是存放一l对象。在</span><span style="font-family: 'Courier New'">OgnlValueStack</span><span style="font-family: ?hu)?>c里有一?/span><span style="font-family: 'Courier New'">List</span><span style="font-family: ?hu)?>cd?/span><span style="font-family: 'Courier New'">root</span><span style="font-family: ?hu)?>变量是使用他存放一l对象?/span></p> <p><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">root</span><span style="font-family: ?hu)?>变量中处于第一位的对象叫栈对象,通常我们?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>表达式里直接写上属性的名称卛_讉K</span><span style="font-family: 'Courier New'">root</span><span style="font-family: ?hu)?>变量里对象的属性,搜烦(ch)序是从栈顶对象开始寻找,如果栈顶对象不存在该属性,׃(x)从第二个对象LQ如果没有找到就到第三个对象LQ依ơ往下访问,知道扑ֈ为止?/span></p> <p><span style="font-family: ?hu)?>注意Q?/span><span style="font-family: 'Courier New'">Struts</span><span style="font-family: ?hu)?>中,</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>表达式是需要配?/span><span style="font-family: 'Courier New'">Struts</span><span style="font-family: ?hu)?>标签才能使用Q如</span><span style="font-family: 'Courier New'">:<s:property value=”name”/></span></p> <p><span style="font-family: ?hu)?>׃</span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: ?hu)?>Q值栈Q是</span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>的根对象Q如果用户需要访问值栈中的对象Q在</span><span style="font-family: 'Courier New'">JSP</span><span style="font-family: ?hu)?>面可以直接通过下面?/span><span style="font-family: 'Courier New'">EL</span><span style="font-family: ?hu)?>表达式访?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: ?hu)?>Q值栈Q中对象的属性:(x)</span></p> <p><span style="font-family: 'Courier New'">${foo} //</span><span style="font-family: ?hu)?>获得值栈中某个对象的</span><span style="font-family: 'Courier New'">foo</span><span style="font-family: ?hu)?>属?/span></p> <p><span style="font-family: ?hu)?>如果讉K其他</span><span style="font-family: 'Courier New'">Context</span><span style="font-family: ?hu)?>中的对象Q由于他们不是根对象Q所以在讉KӞ需要添?/span><span style="font-family: 'Courier New'">#</span><span style="font-family: ?hu)?>前缀</span></p> <p><strong><span style="font-family: 'Courier New'">application</span></strong><strong><span style="font-family: ?hu)?>对象</span></strong><span style="font-family: ?hu)?>Q用于访?/span><span style="font-family: 'Courier New'">ServletContext</span><span style="font-family: ?hu)?>Q例?/span><span style="font-family: 'Courier New'">#application.userName</span><span style="font-family: ?hu)?>或?/span><span style="font-family: 'Courier New'">#application[‘userName’]</span><span style="font-family: ?hu)?>Q相当于调用</span><span style="font-family: 'Courier New'">ServletContext</span><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">getAttribute(“username”)</span></p> <p><strong><span style="font-family: 'Courier New'">session</span></strong><strong><span style="font-family: ?hu)?>对象</span></strong><span style="font-family: ?hu)?>Q用来访?/span><span style="font-family: 'Courier New'">HttpSession</span><span style="font-family: ?hu)?>。例?/span><span style="font-family: 'Courier New'">#session.userName</span><span style="font-family: ?hu)?>或?/span><span style="font-family: 'Courier New'">#session[‘userName’]</span><span style="font-family: ?hu)?>Q相当于调用</span><span style="font-family: 'Courier New'">session.getAttribue(“userName”)</span></p> <p><strong><span style="font-family: 'Courier New'">request</span></strong><strong><span style="font-family: ?hu)?>对象</span></strong><span style="font-family: ?hu)?>Q用来访?/span><span style="font-family: 'Courier New'">HttpServletRequest</span><span style="font-family: ?hu)?>属性(</span><span style="font-family: 'Courier New'">attribute</span><span style="font-family: ?hu)?>Q的</span><span style="font-family: 'Courier New'">Map</span><span style="font-family: ?hu)?>Q例?/span><span style="font-family: 'Courier New'">#request.userName</span><span style="font-family: ?hu)?>或?/span><span style="font-family: 'Courier New'">#request[‘userName’],</span><span style="font-family: ?hu)?>相当于调?/span><span style="font-family: 'Courier New'">request.getAttribute(“username”)</span></p> <p><strong><span style="font-family: 'Courier New'">parameters</span></strong><strong><span style="font-family: ?hu)?>对象</span></strong><span style="font-family: ?hu)?>Q用于访?/span><span style="font-family: 'Courier New'">HTTP</span><span style="font-family: ?hu)?>的请求参敎ͼ例如</span><span style="font-family: 'Courier New'">#parameters.userName</span><span style="font-family: ?hu)?>或?/span></p> <p><span style="font-family: 'Courier New'">#parameters[‘userName’]</span><span style="font-family: ?hu)?>Q?/span></p> <p><span style="font-family: ?hu)?>相当于调?/span><span style="font-family: 'Courier New'">request.getParameter(“username”)</span></p> <p><strong><span style="font-family: 'Courier New'">attr</span></strong><strong><span style="font-family: ?hu)?>对象</span></strong><span style="font-family: ?hu)?>Q用于按</span><span style="font-family: 'Courier New'">page->request->session->application</span><span style="font-family: ?hu)?>序讉K其属?/span></p> <p><span style="font-family: ?hu)?>Z?/span><span style="font-family: 'Courier New'">EL</span><span style="font-family: ?hu)?>表达式能够访?/span><span style="font-family: 'Courier New'">valueStack</span><span style="font-family: ?hu)?>中对象的属性?</span></p> <p><span style="font-family: ?hu)?>因ؓ(f)</span><span style="font-family: 'Courier New'">Struts2</span><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">HttpServletRequest</span><span style="font-family: ?hu)?>做了(jin)q一步的装</span></p> <p><span style="font-family: ?hu)?>采用</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>Q不能访问四大作用域中的变量Q只能访?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: ?hu)?>中的变量</span></p> <p><span style="font-family: ?hu)?>采用</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>表达式创Z?/span><span style="font-family: 'Courier New'">List/Map</span><span style="font-family: ?hu)?>集合对象</span></p> <p><span style="font-family: ?hu)?>如果需要一个集合元素的时候(例如</span><span style="font-family: 'Courier New'">List</span><span style="font-family: ?hu)?>对象或?/span><span style="font-family: 'Courier New'">Map</span><span style="font-family: ?hu)?>对象Q,可以使用</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>中同集合相关的表辑ּ?/span></p> <p><span style="font-family: ?hu)?>例如使用如下代码直接生成一?/span><span style="font-family: 'Courier New'">List</span><span style="font-family: ?hu)?>对象Q?/span></p> <p><span style="font-family: 'Courier New'"><s:set name=”list” value=”{‘zhangming’,’xiaoli’,’liming’}”/></span></p> <p><span style="font-family: 'Courier New'"><s:iterator value=”#list”></span></p> <p><span style="font-family: 'Courier New'">    <s:property /><br/></span></p> <p><span style="font-family: 'Courier New'"></s:iterator></span></p> <p><span style="font-family: 'Courier New'">set</span><span style="font-family: ?hu)?>标签用于某个值放入指定范?/span></p> <p><span style="font-family: 'Courier New'">scope</span><span style="font-family: ?hu)?>Q指定变量被攄的范_(d)该属性可以接?/span><span style="font-family: 'Courier New'">application</span><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">session</span><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">request</span><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">page</span><span style="font-family: ?hu)?>或?/span><span style="font-family: 'Courier New'">action</span><span style="font-family: ?hu)?>。如果没有设|该属性,则默认放|在</span><span style="font-family: 'Courier New'">OGNL Context</span><span style="font-family: ?hu)?>?/span></p> <p><span style="font-family: 'Courier New'">value</span><span style="font-family: ?hu)?>Q赋l变量的|如果没有讄该属性,则将</span><span style="font-family: 'Courier New'">valueStack</span><span style="font-family: ?hu)?>栈顶的Dl变?/span></p> <p><span style="font-family: ?hu)?>生成一?/span><span style="font-family: 'Courier New'">Map</span><span style="font-family: ?hu)?>对象</span></p> <p><span style="font-family: 'Courier New'"><s:set name=”foobar” value=”#{‘foo1’:’bar1’,’foo2’:’bar2’}” /></span></p> <p><span style="font-family: 'Courier New'"><s:iterator value=”#foobar” ></span></p> <p><span style="font-family: 'Courier New'">    <s:property value=”key”>=<s:property value=”value”/></span></p> <p><span style="font-family: 'Courier New'"></s:iterator></span></p> <p><span style="font-family: ?hu)?>采用</span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>表达式判断对象是否存在于集合中:(x)</span></p> <p><span style="font-family: ?hu)?>对于集合cdQ?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>表达式可以?/span><span style="font-family: 'Courier New'">in</span><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">not in</span><span style="font-family: ?hu)?>两个元素W号Q其中,</span><span style="font-family: 'Courier New'">in</span><span style="font-family: ?hu)?>表达式用来判断某个元素是否在指定的集合对象中Q?/span><span style="font-family: 'Courier New'">not in</span><span style="font-family: ?hu)?>判断某个元素是否不在指定的集合对象中Q如下所C?/span></p> <p><span style="font-family: 'Courier New'">in</span><span style="font-family: ?hu)?>表达式:(x)</span></p> <p><span style="font-family: 'Courier New'"><s:if test=”’foo’ in {‘foo’,’bar’}></span></p> <p><span style="font-family: 'Courier New'">    zai</span></p> <p><span style="font-family: 'Courier New'"></s:if></span></p> <p><span style="font-family: 'Courier New'"><s:else></span></p> <p><span style="font-family: 'Courier New'">    bu zai</span></p> <p><span style="font-family: 'Courier New'"></s:else></span></p> <p><span style="font-family: 'Courier New'">not in </span><span style="font-family: ?hu)?>表达式:(x)</span></p> <p><span style="font-family: 'Courier New'"><s:if test”’foo’ not in {‘foo’,’bar’}></span></p> <p><span style="font-family: 'Courier New'">    bu zai</span></p> <p><span style="font-family: 'Courier New'"></s:if></span></p> <p><span style="font-family: 'Courier New'"><s:else></span></p> <p><span style="font-family: 'Courier New'">    zai</span></p> <p><span style="font-family: 'Courier New'"></s:else></span></p> <p><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>表达式的投媄(jing)功能</span><span style="font-family: 'Courier New'">---</span><span style="font-family: ?hu)?>一般不适用Q我们一般会(x)在业务层把满x(chng)件的对象归结出来</span></p> <p><span style="font-family: ?hu)?>除了(jin)</span><span style="font-family: 'Courier New'">in</span><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">not in</span><span style="font-family: ?hu)?>之外Q?/span><span style="font-family: 'Courier New'">OGNL</span><span style="font-family: ?hu)?>q允怋用某个规则获得集合对象的子集Q场用的有以?/span><span style="font-family: 'Courier New'">3</span><span style="font-family: ?hu)?>个相x(chng)作符?/span></p> <p><span style="font-family: 'Courier New'">?:</span><span style="font-family: ?hu)?>获得所有符合逻辑的元?/span></p> <p><span style="font-family: 'Courier New'">^:</span><span style="font-family: ?hu)?>获得W合逻辑的第一个元?/span></p> <p><span style="font-family: 'Courier New'">$:</span><span style="font-family: ?hu)?>获得W合逻辑的最后一个元?/span></p> <p><span style="font-family: ?hu)?>例如代码Q?/span></p> <p><span style="font-family: 'Courier New'"><s:iterator value=”books.{?#this.price > 35}”></span></p> <p><span style="font-family: 'Courier New'">    <s:property value=”title”/>-$<s:property value=”price” /><br/></span></p> <p><span style="font-family: 'Courier New'"></s:iterator></span></p> <p><span style="font-family: ?hu)?>在上面的代码中,直接在集合后紧跟</span><span style="font-family: 'Courier New'">.{}</span><span style="font-family: ?hu)?>q算W取?gu)集合的子集?/span><span style="font-family: 'Courier New'">{}</span><span style="font-family: ?hu)?>内的表达式用于获取符合条件的元素Q?/span><span style="font-family: 'Courier New'">this</span><span style="font-family: ?hu)?>指的是ؓ(f)?jin)从大集?/span><span style="font-family: 'Courier New'">books</span><span style="font-family: ?hu)?>{选数据到集合,需要对大集?/span><span style="font-family: 'Courier New'">books</span><span style="font-family: ?hu)?>q行q代Q?/span><span style="font-family: 'Courier New'">this</span><span style="font-family: ?hu)?>代表当前q代的元素。本例的表达式用于获取集合中h大于</span><span style="font-family: 'Courier New'">35</span><span style="font-family: ?hu)?>的书集合</span></p> <p><span style="font-family: 'Courier New'">books.{?#this.price > 35}</span></p> <p><span style="font-family: 'Courier New'">books.{……}</span><span style="font-family: ?hu)?>Q?/span><span style="font-family: 'Courier New'"> </span><span style="font-family: ?hu)?>要从大集合中Q筛选出满</span><span style="font-family: 'Courier New'">……</span><span style="font-family: ?hu)?>q个条g的子集合攑ֈ</span><span style="font-family: 'Courier New'">value</span><span style="font-family: ?hu)?>?/span></p> <p><span style="font-family: 'Courier New'">?</span><span style="font-family: ?hu)?>Q表C符合逻辑的元?/span></p> <p><span style="font-family: 'Courier New'">#this:</span><span style="font-family: ?hu)?>q代大集合的当前元素<br /> <br /> <br />   </p> <p><span style="font-family: ?hu)?>二十四?/span><span style="font-family: 'Courier New'">Struts2 </span><span style="font-family: ?hu)?>标签使用</span></p> <p><strong><span style="font-family: 'Courier New'">property</span></strong><strong><span style="font-family: ?hu)?>标签使用</span></strong></p> <p><span style="font-family: 'Courier New'"><s:set name=”name” value=”kk” /></span></p> <p><span style="font-family: 'Courier New'"><s:property value=”#name” /></span></p> <p><span style="font-family: 'Courier New'">default:</span><span style="font-family: ?hu)?>可选属性,如果需要输出的属性gؓ(f)</span><span style="font-family: 'Courier New'">NULL</span><span style="font-family: ?hu)?>Q则昄该属性指定的?/span></p> <p><span style="font-family: 'Courier New'">escape:</span><span style="font-family: ?hu)?>可选属性,指定是否格式?/span><span style="font-family: 'Courier New'">HTML</span><span style="font-family: ?hu)?>代码?/span></p> <p><span style="font-family: 'Courier New'">value:</span><span style="font-family: ?hu)?>可选属性,指定需要输出的属性|如果没有指定该属性,则默认输?/span><span style="font-family: 'Courier New'">valueStack</span><span style="font-family: ?hu)?>栈顶的?/span></p> <p><span style="font-family: 'Courier New'">id:</span><span style="font-family: ?hu)?>可选属性,指定该元素的标识</span></p> <p><strong><span style="font-family: 'Courier New'">iterator </span></strong><strong><span style="font-family: ?hu)?>q代标签</span></strong></p> <p><span style="font-family: 'Courier New'">iterator</span><span style="font-family: ?hu)?>标签对于集合q行q代Q这里的集合包含</span><span style="font-family: 'Courier New'">List</span><span style="font-family: ?hu)?>?/span><span style="font-family: 'Courier New'">Set</span><span style="font-family: ?hu)?>和数l?/span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:set</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"list"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"{'zhangming','xiaoi','liming'}"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:iterator</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"#list"</span></em> <span style="color: #7f007f">status</span><span style="color: black">=</span><em><span style="color: #2a00ff">"st"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">font</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">color</span><span style="color: black">=</span><span style="color: teal"><</span><span style="color: #3f7f7f">s:if</span> <span style="color: #7f007f">test</span><span style="color: black">=</span><em><span style="color: #2a00ff">"#st.odd"</span></em><span style="color: teal">></span><span style="color: black">red</span><span style="color: teal"></</span><span style="color: #3f7f7f">s:if</span><span style="color: teal">><</span><span style="color: #3f7f7f">s:else</span><span style="color: teal">></span><span style="color: black">blue</span><span style="color: teal"></</span><span style="color: #3f7f7f">s:else</span><span style="color: teal">>></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:property</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: teal">/></</span><span style="color: #3f7f7f">font</span><span style="color: teal">></span><span style="color: black">/</span><span style="color: teal"><</span><span style="color: #3f7f7f">br</span><span style="color: teal">></span></span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:iterator</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><span style="font-family: 'Courier New'">value:</span><span style="font-family: ?hu)?>可选属性,指定被P代的集合Q如果没有设|该属性,则?/span><span style="font-family: 'Courier New'">ValueStack</span><span style="font-family: ?hu)?>栈顶的集?/span></p> <p><span style="font-family: 'Courier New'">id:</span><span style="font-family: ?hu)?>可选属性,指定集合里元素的</span><span style="font-family: 'Courier New'">id</span><span style="font-family: ?hu)?>Q已被标注ؓ(f)q时Q?/span></p> <p><span style="font-family: 'Courier New'">status:</span><span style="font-family: ?hu)?>可选属性,该属性指定P代时?/span><span style="font-family: 'Courier New'">iteratorStatus</span><span style="font-family: ?hu)?>实例Q该实例包含如下几个Ҏ(gu)Q?/span></p> <p><span style="font-family: 'Courier New'">    int getCount(),</span><span style="font-family: ?hu)?>q回当前q代?jin)几个元?/span></p> <p><span style="font-family: 'Courier New'">    int getIndex(),</span><span style="font-family: ?hu)?>q回当前q代元素的烦(ch)?/span></p> <p><span style="font-family: 'Courier New'">    Boolean isEven(),</span><span style="font-family: ?hu)?>q回当前被P代元素的索引是否是偶?/span></p> <p><span style="font-family: 'Courier New'">    Boolean isOdd(),</span><span style="font-family: ?hu)?>q回当前被P代元素的索引是否是奇?/span></p> <p><span style="font-family: 'Courier New'">    Boolean isFirst(),</span><span style="font-family: ?hu)?>q回当前被P代元素是否是W一个元?/span></p> <p><span style="font-family: 'Courier New'">    Boolean isLast(),</span><span style="font-family: ?hu)?>q回当前被P代元素是否是最后一个元?/span></p> <p><strong><span style="font-family: 'Courier New'">if/elseif/else </span></strong><strong><span style="font-family: ?hu)?>逻辑判断</span></strong></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:set</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"age"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"323"</span></em> <span style="color: #7f007f">scope</span><span style="color: black">=</span><em><span style="color: #2a00ff">"request"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:if</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">test</span><span style="color: black">=</span><em><span style="color: #2a00ff">"#request.age==23"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    23</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:if</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:elseif</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">test</span><span style="color: black">=</span><em><span style="color: #2a00ff">"#request.age==21"</span></em><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    21</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:elseif</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:else</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: black; font-family: ?hu)?>都不{?/span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:else</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p><strong><span style="font-family: 'Courier New'">url</span></strong><strong><span style="font-family: ?hu)?>标签</span></strong></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; background: silver; color: #3f7f7f; font-family: 'Courier New'">a</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">href</span><span style="color: black">=</span>"<span style="color: teal"><</span><span style="color: #3f7f7f">s:url</span> <span style="color: #7f007f">action</span><span style="color: black">=</span><em><span style="color: #2a00ff">"helloworld_add"</span></em> <span style="color: #7f007f">namespace</span><span style="color: black">=</span><em><span style="color: #2a00ff">"/test"</span></em><span style="color: teal">><</span><span style="color: #3f7f7f">s:param</span> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"personid"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"233"</span></em><span style="color: teal">/></</span><span style="color: #3f7f7f">s:url</span><span style="color: teal">></span>"<span style="color: teal">></span><u><span style="color: black">ssss</span></u><span style="color: teal"></</span><span style="background: silver; color: #3f7f7f">a</span><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:set</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"myurl"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"'http://www.foshanshop.net'"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:url</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"%{#myurl}"</span></em> <span style="color: teal">/><</span><span style="color: #3f7f7f">br</span><span style="color: teal">></span></span></p> <p><strong><span style="font-family: 'Courier New'">checkboxlist</span></strong><strong><span style="font-family: ?hu)?>复选框</span></strong><strong><span style="font-family: 'Courier New'">/radio </span></strong><strong><span style="font-family: ?hu)?>单选框</span></strong><strong><span style="font-family: 'Courier New'">/select</span></strong><strong><span style="font-family: ?hu)?>下拉列表?/span></strong></p> <p><span style="font-family: 'Courier New'">    </span><span style="font-family: ?hu)?>集合?/span><span style="font-family: 'Courier New'">list:</span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:checkboxlist</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"list"</span></em></span></p> <p style="margin-left: 47.25pt"><span style="font-size: 10pt; color: #7f007f; font-family: 'Courier New'">list</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">=</span><em><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"{'Java','.Net','RoR','PHP'}"</span></em><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"{'Java','.Net'}"</span></em><span style="color: teal">/><</span><span style="color: #3f7f7f">br</span><span style="color: teal">/></span></span></p> <p><span style="font-family: 'Courier New'">    </span><span style="font-family: ?hu)?>集合?/span><span style="font-family: 'Courier New'">map:</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:checkboxlist</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"map"</span></em> <span style="color: #7f007f">list</span><span style="color: black">=</span>"<span style="color: black">#{1:'</span></span><span style="font-size: 10pt; color: black; font-family: ?hu)?>瑜珈用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',2:'</span><span style="font-size: 10pt; color: black; font-family: ?hu)?>户外用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',3:'</span><span style="font-size: 10pt; color: black; font-family: ?hu)?>球类</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',4:'</span><span style="font-size: 10pt; color: black; font-family: ?hu)?>自行?/span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">'}</span><span style="font-size: 10pt; font-family: 'Courier New'">"</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">     <span style="color: #7f007f">listKey</span><span style="color: black">=</span><em><span style="color: #2a00ff">"key"</span></em> <span style="color: #7f007f">listValue</span><span style="color: black">=</span><em><span style="color: #2a00ff">"value"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"{1,2,3}"</span></em><span style="color: teal">/><</span><span style="color: #3f7f7f">br</span><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">     </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:radio</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"raido1"</span></em> <span style="color: #7f007f">list</span><span style="color: black">=</span>"<span style="color: black">#{1:'</span></span><span style="font-size: 10pt; color: black; font-family: ?hu)?>瑜珈用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',2:'</span><span style="font-size: 10pt; color: black; font-family: ?hu)?>户外用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',3:'</span><span style="font-size: 10pt; color: black; font-family: ?hu)?>球类</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',4:'</span><span style="font-size: 10pt; color: black; font-family: ?hu)?>自行?/span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">'}</span><span style="font-size: 10pt; font-family: 'Courier New'">" <span style="color: #7f007f">listKey</span><span style="color: black">=</span><em><span style="color: #2a00ff">"key"</span></em> <span style="color: #7f007f">listValue</span><span style="color: black">=</span><em><span style="color: #2a00ff">"value"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"1"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">     </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">br</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">/></span></p> <p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">     </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">s:select</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"se"</span></em> <span style="color: #7f007f">list</span><span style="color: black">=</span>"<span style="color: black">#{1:'</span></span><span style="font-size: 10pt; color: black; font-family: ?hu)?>瑜珈用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',2:'</span><span style="font-size: 10pt; color: black; font-family: ?hu)?>户外用品</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',3:'</span><span style="font-size: 10pt; color: black; font-family: ?hu)?>球类</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">',4:'</span><span style="font-size: 10pt; color: black; font-family: ?hu)?>自行?/span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">'}</span><span style="font-size: 10pt; font-family: 'Courier New'">" <span style="color: #7f007f">listKey</span><span style="color: black">=</span><em><span style="color: #2a00ff">"key"</span></em> <span style="color: #7f007f">listValue</span><span style="color: black">=</span><em><span style="color: #2a00ff">"value"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"1"</span></em><span style="color: teal">/></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> </span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'"><!-- </span><span style="font-size: 10pt; color: #3f5fbf; font-family: ?hu)?>默认的视图主?/span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">,</span><span style="font-size: 10pt; color: #3f5fbf; font-family: ?hu)?>即不需?/span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'">struts2</span><span style="font-size: 10pt; color: #3f5fbf; font-family: ?hu)?>在页面ؓ(f)我们输出一些代?/span><span style="font-size: 10pt; color: #3f5fbf; font-family: 'Courier New'"> --></span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">constant</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">name</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts.ui.theme"</span></em> <span style="color: #7f007f">value</span><span style="color: black">=</span><em><span style="color: #2a00ff">"simple"</span></em> <span style="color: teal">/><br /> <br /> <br />   </p> <p><span style="font-family: ?hu)?>二十五、国际化</span></p> <p><span style="font-family: ?hu)?>目前对笔者不适用Q由于时间紧q,不再记录</span></p> </span></span></span> <img src ="http://www.tkk7.com/jzone/aggbug/321315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-19 01:24 <a href="http://www.tkk7.com/jzone/articles/321315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点W记Q五Q?/title><link>http://www.tkk7.com/jzone/articles/321123.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 16 May 2010 16:22:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/321123.html</guid><description><![CDATA[     摘要: 二十一、Struts2对action中所有方法进行输入校?在Struts2中,我们可以实现对action的所有方法进行校验或者对action指定Ҏ(gu)q行校验 对于输入校验struts2提供?jin)两U实现方法:(x) 1Q采用手工编写代码实?重写validateҎ(gu)QvalidateҎ(gu)?x)校验action中所有与executeҎ(gu){֐相同的方法。当某个数据校验p|Ӟ我们应该调用addFieldE...  <a href='http://www.tkk7.com/jzone/articles/321123.html'>阅读全文</a><img src ="http://www.tkk7.com/jzone/aggbug/321123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-17 00:22 <a href="http://www.tkk7.com/jzone/articles/321123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点W记Q四Q?/title><link>http://www.tkk7.com/jzone/articles/321122.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 16 May 2010 16:14:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/321122.html</guid><description><![CDATA[     摘要: 十九(ji)、文件上传三部曲 W一步、jar文g的准?commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar W二步、把form表的enctype讄为:(x)multipart/form-data <%@ page language="java" import="java.util.*" pageEncodin...  <a href='http://www.tkk7.com/jzone/articles/321122.html'>阅读全文</a><img src ="http://www.tkk7.com/jzone/aggbug/321122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-17 00:14 <a href="http://www.tkk7.com/jzone/articles/321122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点W记Q三Q?/title><link>http://www.tkk7.com/jzone/articles/321073.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 15 May 2010 19:09:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/321073.html</guid><description><![CDATA[<span style="font-size: 10pt; font-family: ?hu)?>十三?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>的处理流E?/span> <p><span style="font-size: 10pt; font-family: 'Courier New'">request?gt;StrutsPrepareAndExecuteFilter</span><span style="font-size: 10pt; font-family: Wingdings">à</span><span style="font-size: 10pt; font-family: 'Courier New'">Interceptor(Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>内置的一些拦截器或用戯定义拦截?/span><span style="font-size: 10pt; font-family: 'Courier New'">)</span><span style="font-size: 10pt; font-family: Wingdings">à</span><span style="font-size: 10pt; font-family: 'Courier New'">Action(</span><span style="font-size: 10pt; font-family: ?hu)?>用户~写?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: ?hu)?>Q类?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts1</span><span style="font-size: 10pt; font-family: ?hu)?>中的</span><span style="font-size: 10pt; font-family: 'Courier New'">Action)</span><span style="font-size: 10pt; font-family: Wingdings">à</span><span style="font-size: 10pt; font-family: 'Courier New'">Result(</span><span style="font-size: 10pt; font-family: ?hu)?>cM</span><span style="font-size: 10pt; font-family: 'Courier New'">Struts1</span><span style="font-size: 10pt; font-family: ?hu)?>中的</span><span style="font-size: 10pt; font-family: 'Courier New'">forward)</span><span style="font-size: 10pt; font-family: Wingdings">à</span><span style="font-size: 10pt; font-family: 'Courier New'">Jsp/Html</span><span style="font-size: 10pt; font-family: Wingdings">à</span><span style="font-size: 10pt; font-family: 'Courier New'">response</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">StrutsPrepareAndExccuterFilter</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>框架的核?j)控制器Q它负责拦截?/span><span style="font-size: 10pt; font-family: 'Courier New'"><url-pattern>/*</url-pattern></span><span style="font-size: 10pt; font-family: ?hu)?>指定的所有用戯求,当用戯求到达时Q该</span><span style="font-size: 10pt; font-family: 'Courier New'">Filter</span><span style="font-size: 10pt; font-family: ?hu)?>?x)过滤用L(fng)h。默认情况下Q如果用戯求的路径不带后缀或者后~?/span><span style="font-size: 10pt; font-family: 'Courier New'">.action</span><span style="font-size: 10pt; font-family: ?hu)?>l尾Q这时请求将被{?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>框架处理Q否?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>框架过滤该h的处理。当h转入</span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>框架处理时会(x)l过一pd的拦截器Q然后再转到</span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: ?hu)?>?strong>?/strong></span><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts1</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>不同Q?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>对用h一ơ请求都?x)创Z?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Action</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>Q所?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Action</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>是线E安全的<br /> </span></strong></p> <p><span style="font-size: 10pt; font-family: ?hu)?><br /> <br /> 十四?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>指定多个配置文g</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>配|文件以模块q行划分Q然后通过</span><span style="font-size: 10pt; font-family: 'Courier New'">include</span><span style="font-size: 10pt; font-family: ?hu)?>导入</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><?</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">xml</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">version</span><span style="color: black">=</span><em><span style="color: #2a00ff">"1.0"</span></em> <span style="color: #7f007f">encoding</span><span style="color: black">=</span><em><span style="color: #2a00ff">"UTF-8"</span></em> <span style="color: teal">?></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><!</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">DOCTYPE</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: teal">struts</span> <span style="color: gray">PUBLIC</span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">    <span style="color: teal">"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"</span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">    <span style="color: #3f7f5f">"http://struts.apache.org/dtds/struts-2.0.dtd"</span><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">struts</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">include</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">file</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts-user.xml"</span></em><span style="color: teal">></</span><span style="color: #3f7f7f">include</span><span style="color: teal">></span></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">include</span><span style="font-size: 10pt; font-family: 'Courier New'"> <span style="color: #7f007f">file</span><span style="color: black">=</span><em><span style="color: #2a00ff">"struts-trade.xml"</span></em><span style="color: teal">></</span><span style="color: #3f7f7f">include</span><span style="color: teal">></span></span></p> <p><span style="font-size: 10pt; color: teal; font-family: 'Courier New'"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: 'Courier New'">struts</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New'">><br /> </span></p> <p><span style="font-size: 10pt; font-family: ?hu)?><br /> <br /> 十五?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>动态方法调?/span><span style="font-size: 10pt; font-family: 'Courier New'">(</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2.1</span><span style="font-size: 10pt; font-family: ?hu)?>版本文档中已l不推荐使用?/span><span style="font-size: 10pt; font-family: 'Courier New'">)</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>如果?/span><span style="font-size: 10pt; font-family: 'Courier New'">action</span><span style="font-size: 10pt; font-family: ?hu)?>中存在多个方法时Q我们可以?/span><span style="font-size: 10pt; font-family: 'Courier New'">!+</span><span style="font-size: 10pt; font-family: ?hu)?>Ҏ(gu)Ҏ(gu)名调用指定的Ҏ(gu)Q如下:(x)</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">public class HelloWorldAction{</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    private String message;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    public String getMessage(){</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       return message;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">public String execute() throws Exception{</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    this.message = “</span><span style="font-size: 10pt; font-family: ?hu)?>我是</span><span style="font-size: 10pt; font-family: 'Courier New'">execute</span><span style="font-size: 10pt; font-family: ?hu)?>Ҏ(gu)</span><span style="font-size: 10pt; font-family: 'Courier New'">”</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    return “success”;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">public String other() throw Exception{</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    this.message = “</span><span style="font-size: 10pt; font-family: ?hu)?>我是</span><span style="font-size: 10pt; font-family: 'Courier New'">other</span><span style="font-size: 10pt; font-family: ?hu)?>Ҏ(gu)</span><span style="font-size: 10pt; font-family: 'Courier New'">”;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>假设讉K上面?/span><span style="font-size: 10pt; font-family: 'Courier New'">action</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">URL</span><span style="font-size: 10pt; font-family: ?hu)?>路径为:(x)</span><span style="font-size: 10pt; font-family: 'Courier New'">/struts2/test/helloworld.action</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>要访?/span><span style="font-size: 10pt; font-family: 'Courier New'">action</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">other</span><span style="font-size: 10pt; font-family: ?hu)?>Ҏ(gu)Q我们可以这栯用:(x)</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">/struts2/test/helloworld!other.action</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>如果不想使用动态方法调用,我们可以通过帔R</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.enable.DynamicMethodInvocation</span><span style="font-size: 10pt; font-family: ?hu)?>关闭动态方法调?/span><span style="font-size: 10pt; font-family: 'Courier New'">.</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'"><constant name=”struts.enable.DynamicMethodInvocation” value=”false”/></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>使用通配W定?/span><span style="font-size: 10pt; font-family: 'Courier New'">action(</span><span style="font-size: 10pt; font-family: ?hu)?>官方推荐</span><span style="font-size: 10pt; font-family: 'Courier New'">) </span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'"><package name=”employee” </span></p> <p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">namespace=”/control/employee” extends=”struts-default”></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    <action name=”list_*” </span></p> <p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">class=”cn.itcast.action.HellWorldAction method=”{1}”></span></p> <p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'"><result name=”success”></span></p> <p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    /WEB-INF/page/message.jsp</span></p> <p style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'"></result></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    </action></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'"></package></span></p> <p><strong><span style="font-size: 10pt; font-family: ?hu)?>注:(x)</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">a). *</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>通配W可以添加多?/span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">: list_*_*_*</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">b). method=”{1}” </span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>表示取第一?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">*</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">c). </span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>通配W可以放|多个地?/span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'"> class</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">result</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>?/span></strong></p> <p><strong> <br /> </strong></p> <p><span style="font-size: 10pt; font-family: ?hu)?>十六?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2 </span><span style="font-size: 10pt; font-family: ?hu)?>h参数的接?/span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>以下两种Ҏ(gu)Q当参数比较多的时候,用第一U方法,会(x)发现</span><span style="font-size: 10pt; font-family: 'Courier New'">action</span><span style="font-size: 10pt; font-family: ?hu)?>中有很多</span><span style="font-size: 10pt; font-family: 'Courier New'">setter</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">getter</span><span style="font-size: 10pt; font-family: ?hu)?>Ҏ(gu)Q这样不利于阅读</span><span style="font-size: 10pt; font-family: 'Courier New'">action</span><span style="font-size: 10pt; font-family: ?hu)?>Q所以徏议用第二种?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">a). </span><span style="font-size: 10pt; font-family: ?hu)?>采用基本cd接收h参数</span><span style="font-size: 10pt; font-family: 'Courier New'">(get/post)</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: ?hu)?>cM定义与请求参数同名的属性,</span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>便能接受h参数q赋值给同名属性:(x)</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>如:(x)h路径Q?/span><span style="font-size: 10pt; font-family: 'Courier New'"><a href="http://localhost:8080/test/view.action?id=78">http://localhost:8080/test/view.action?id=78</a></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">public class ProductAction{</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    private Integer id;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    //struts2</span><span style="font-size: 10pt; font-family: ?hu)?>通过反射技术调用与h参数同名的属性的</span><span style="font-size: 10pt; font-family: 'Courier New'">setter</span><span style="font-size: 10pt; font-family: ?hu)?>Ҏ(gu)来获取请求参数?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    public void setId(Integer id) {</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       this.id = id;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">public Integer getId{</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    return id;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">b). </span><span style="font-size: 10pt; font-family: ?hu)?>采用W合cd接收h参数</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>如:(x)h路径Q?/span><span style="font-size: 10pt; font-family: 'Courier New'"><a href="http://localhost:8080/test/view.action?product.id=78">http://localhost:8080/test/view.action?product.id=78</a></span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">public class ProductAction{</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    private Product product;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    public void setProduct(Product product) {</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       this.product = product;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">public Product getProduct() {</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">    return product;</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">}</span></p> <p style="text-indent: 21pt"><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>首先通过反射技术调?/span><span style="font-size: 10pt; font-family: 'Courier New'">Product</span><span style="font-size: 10pt; font-family: ?hu)?>的默认构造器创徏</span><span style="font-size: 10pt; font-family: 'Courier New'">product</span><span style="font-size: 10pt; font-family: ?hu)?>对象然后在通过反射技术调?/span><span style="font-size: 10pt; font-family: 'Courier New'">product</span><span style="font-size: 10pt; font-family: ?hu)?>中与h参数同名的属性的</span><span style="font-size: 10pt; font-family: 'Courier New'">setter</span><span style="font-size: 10pt; font-family: ?hu)?>Ҏ(gu)来获取请求参?br /> </span></p> <p><span style="font-size: 10pt; font-family: ?hu)?><br /> <br /> 十七?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>有两U类型{换器</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>局部类型{换器</span><span style="font-size: 10pt; font-family: 'Courier New'">/</span><span style="font-size: 10pt; font-family: ?hu)?>全部cd转换?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">a). </span><span style="font-size: 10pt; font-family: ?hu)?>自定义{换类?/span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">package</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> <u>cn.itcast.type.converter</u>;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">import</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> java.text.ParseException;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">import</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> java.text.SimpleDateFormat;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">import</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> java.util.Date;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">import</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> java.util.Map;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">import</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;</span></p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">public</span></strong><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">class</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> <u>DateTypeConverter</u> </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">extends</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> DefaultTypeConverter {</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    <u>@</u></span><u><span style="font-size: 10pt; color: #646464; font-family: 'Courier New'">Override</span></u></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">public</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> Object convertValue(Map<<u>String, Object</u>> context, Object value, Class toType) {</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       SimpleDateFormat dateFormat = </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">new</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> SimpleDateFormat(</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"yyyyMMdd"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">try</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> { </span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">           </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">if</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">(toType == Date.</span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">class</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">){</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">//</span><span style="font-size: 10pt; color: #3f7f5f; font-family: ?hu)?>当字W串?/span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">Date</span><span style="font-size: 10pt; color: #3f7f5f; font-family: ?hu)?>cd转换?/span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">              String[] params = (String[]) value;</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">// request.getParameterValues() </span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">              </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">return</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> dateFormat.parse(params[0]);</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">           }</span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">else</span></strong><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">if</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">(toType == String.</span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">class</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">){</span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">//</span><span style="font-size: 10pt; color: #3f7f5f; font-family: ?hu)?>?/span><span style="font-size: 10pt; color: #3f7f5f; font-family: 'Courier New'">Date</span><span style="font-size: 10pt; color: #3f7f5f; font-family: ?hu)?>转换成字W串?/span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">              Date date = (Date) value;</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">              </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">return</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> dateFormat.format(date);</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">           }</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       } </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">catch</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> (ParseException e) {}</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">       </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">return</span></strong><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">null</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'">;</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">    }</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">}</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>完成具体的双向{化代码后Q需要将上面的类型注册ؓ(f)局部类型{换器Q?/span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: ?hu)?>cL有的包下攄</span><span style="font-size: 10pt; font-family: 'Courier New'">ActionClassName-conversion.properties</span><span style="font-size: 10pt; font-family: ?hu)?>文gQ?/span><span style="font-size: 10pt; font-family: 'Courier New'">ActionClassName</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: ?hu)?>的类名,后面?/span><span style="font-size: 10pt; font-family: 'Courier New'">-conversion.properties</span><span style="font-size: 10pt; font-family: ?hu)?>是固定写法,对于本例而言Q文件的名称应ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">HelloWroldAction-conversion.properties</span><span style="font-size: 10pt; font-family: ?hu)?>?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">properties</span><span style="font-size: 10pt; font-family: ?hu)?>文g中的内容为:(x)</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">birthday=cn.itcast.type.converter.DateTypeConverter</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">b).</span><span style="font-size: 10pt; font-family: ?hu)?>自定义全局cd转换?/span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>上面的局部类型{换器注册为全局cd转换器:(x)</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">WEB-INF/classes</span><span style="font-size: 10pt; font-family: ?hu)?>下放|?/span><span style="font-size: 10pt; font-family: 'Courier New'">xwork-conversion.properties</span><span style="font-size: 10pt; font-family: ?hu)?>文g。在</span><span style="font-size: 10pt; font-family: 'Courier New'">properties</span><span style="font-size: 10pt; font-family: ?hu)?>文g中的内容为:(x)</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>待{换的cd</span><span style="font-size: 10pt; font-family: 'Courier New'">=</span><span style="font-size: 10pt; font-family: ?hu)?>cd转换器的全类?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">java.util.Date=cn.itcast.conversion.DateConverter<br /> </span></p> <p><span style="font-size: 10pt; font-family: ?hu)?><br /> <br /> <br /> 十八、访问或d</span><span style="font-size: 10pt; font-family: 'Courier New'">request/session/application</span><span style="font-size: 10pt; font-family: ?hu)?>属?/p> <p><span style="font-size: 10pt; font-family: 'Courier New'">import java.util.Arrays;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">import javax.servlet.ServletContext;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">import javax.servlet.http.HttpServletRequest;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">import org.apache.struts2.ServletActionContext;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">import com.opensymphony.xwork2.ActionContext;</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">public class HelloWorldAction {</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    public String execute(){</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ActionContext ctx = ActionContext.getContext();</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ctx.getApplication().put("app", "</span><span style="font-size: 10pt; font-family: ?hu)?>应用范围</span><span style="font-size: 10pt; font-family: 'Courier New'">");//</span><span style="font-size: 10pt; font-family: ?hu)?>往</span><span style="font-size: 10pt; font-family: 'Courier New'">ServletContext</span><span style="font-size: 10pt; font-family: ?hu)?>里放?/span><span style="font-size: 10pt; font-family: 'Courier New'">app</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ctx.getSession().put("ses", "session</span><span style="font-size: 10pt; font-family: ?hu)?>范围</span><span style="font-size: 10pt; font-family: 'Courier New'">");//</span><span style="font-size: 10pt; font-family: ?hu)?>往</span><span style="font-size: 10pt; font-family: 'Courier New'">session</span><span style="font-size: 10pt; font-family: ?hu)?>里放?/span><span style="font-size: 10pt; font-family: 'Courier New'">ses</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ctx.put("req", "request</span><span style="font-size: 10pt; font-family: ?hu)?>范围</span><span style="font-size: 10pt; font-family: 'Courier New'">");//</span><span style="font-size: 10pt; font-family: ?hu)?>往</span><span style="font-size: 10pt; font-family: 'Courier New'">request</span><span style="font-size: 10pt; font-family: ?hu)?>里放?/span><span style="font-size: 10pt; font-family: 'Courier New'">req</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ctx.put("names", Arrays.asList("</span><span style="font-size: 10pt; font-family: ?hu)?>老张</span><span style="font-size: 10pt; font-family: 'Courier New'">", "</span><span style="font-size: 10pt; font-family: ?hu)?>老黎</span><span style="font-size: 10pt; font-family: 'Courier New'">", "</span><span style="font-size: 10pt; font-family: ?hu)?>老方</span><span style="font-size: 10pt; font-family: 'Courier New'">"));</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       return "message";</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    }</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    public String rsa() throws Exception{</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       HttpServletRequest request = ServletActionContext.getRequest();</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       ServletContext servletContext = ServletActionContext.getServletContext();</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       request.setAttribute("req", "</span><span style="font-size: 10pt; font-family: ?hu)?>h范围属?/span><span style="font-size: 10pt; font-family: 'Courier New'">");</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       request.getSession().setAttribute("ses", "</span><span style="font-size: 10pt; font-family: ?hu)?>?x)话范围属?/span><span style="font-size: 10pt; font-family: 'Courier New'">");</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       servletContext.setAttribute("app", "</span><span style="font-size: 10pt; font-family: ?hu)?>应用范围属?/span><span style="font-size: 10pt; font-family: 'Courier New'">");</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       //HttpServletResponse response = ServletActionContext.getResponse();</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">       return "message";</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">    }</span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">}</span><br /> </p> <p></span><span style="font-size: 10pt; font-family: ?hu)?>备注Q?/span><span style="font-size: 10pt; font-family: 'Courier New'">ognl</span><span style="font-size: 10pt; font-family: ?hu)?>表达式其实完全可以通过</span><span style="font-size: 10pt; font-family: 'Courier New'">JSTL</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">EL</span><span style="font-size: 10pt; font-family: ?hu)?>l合来代?/span><span style="font-size: 10pt; font-family: 'Courier New'">ognl</span></p> <img src ="http://www.tkk7.com/jzone/aggbug/321073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-16 03:09 <a href="http://www.tkk7.com/jzone/articles/321073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点W记Q二Q?/title><link>http://www.tkk7.com/jzone/articles/321072.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 15 May 2010 19:08:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/321072.html</guid><description><![CDATA[<span style="font-size: 10pt; font-family: ?hu)?>十二?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts2</span><span style="font-size: 10pt; font-family: ?hu)?>帔R一览(常用的以_体昄?jin)?j)</span> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.configuration </span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指定加?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>配置文g的配|文件管理器。该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">org.apache.Struts2.config.DefaultConfiguration</span><span style="font-size: 10pt; font-family: ?hu)?>Q这?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>默认的配|文件管理器。如果需要实现自q配置理器,开发者则可以实现一个实?/span><span style="font-size: 10pt; font-family: 'Courier New'">Configuration</span><span style="font-size: 10pt; font-family: ?hu)?>接口的类Q该cd以自己加?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>配置文g?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.locale</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>指定</span><span style="font-size: 10pt; font-family: 'Courier New'">Web</span><span style="font-size: 10pt; font-family: ?hu)?>应用的默?/span><span style="font-size: 10pt; font-family: 'Courier New'">Locale</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><strong> </strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.i18n.encoding</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: ?hu)?>指定</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Web</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>应用的默认编码集。该属性对于处理中文请求参数非常有用,对于获取中文h参数|应该该属性D|ؓ(f)</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">GBK</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>或?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">GB2312</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>?/span></strong></p> <p><strong><span style="font-size: 10pt; font-family: ?hu)?>提示Q当讄该参Cؓ(f)</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">GBK</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>Ӟ相当于调?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">HttpServletRequest</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">setCharacterEncoding</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>Ҏ(gu)?/span></strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.objectFactory</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: ?hu)?>指定</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>默认?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">ObjectFactory Bean</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>Q该属性默认值是</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">spring</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.objectFactory.spring.autoWrite</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>指定</span><span style="font-size: 10pt; font-family: 'Courier New'">Spring</span><span style="font-size: 10pt; font-family: ?hu)?>框架的自动装配模式,该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">name</span><span style="font-size: 10pt; font-family: ?hu)?>Q即默认Ҏ(gu)</span><span style="font-size: 10pt; font-family: 'Courier New'">Bean</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">name</span><span style="font-size: 10pt; font-family: ?hu)?>属性自动装配?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.objectFactory.spring.useClassCache</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指定整?/span><span style="font-size: 10pt; font-family: 'Courier New'">Spring</span><span style="font-size: 10pt; font-family: ?hu)?>框架Ӟ是否~存</span><span style="font-size: 10pt; font-family: 'Courier New'">Bean</span><span style="font-size: 10pt; font-family: ?hu)?>实例Q该属性只允许使用</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: ?hu)?>两个属性|它的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>。通常不徏议修改该属性倹{?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.objectTypeDeterminer</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>的类型检机Ӟ通常支持</span><span style="font-size: 10pt; font-family: 'Courier New'">tiger</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">notiger</span><span style="font-size: 10pt; font-family: ?hu)?>两个属性倹{?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.multipart.parser</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指定处?/span><span style="font-size: 10pt; font-family: 'Courier New'">multipart/form-data</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">MIME</span><span style="font-size: 10pt; font-family: ?hu)?>cdQ文件上传)(j)h的框Ӟ该属性支?/span><span style="font-size: 10pt; font-family: 'Courier New'">cos</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">pell</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">jakarta</span><span style="font-size: 10pt; font-family: ?hu)?>{属性|卛_别对应?/span><span style="font-size: 10pt; font-family: 'Courier New'">cos</span><span style="font-size: 10pt; font-family: ?hu)?>的文件上传框架?/span><span style="font-size: 10pt; font-family: 'Courier New'">pell</span><span style="font-size: 10pt; font-family: ?hu)?>上传?/span><span style="font-size: 10pt; font-family: 'Courier New'">common-fileupload</span><span style="font-size: 10pt; font-family: ?hu)?>文g上传框架。该属性的默认gؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">jakarta</span><span style="font-size: 10pt; font-family: ?hu)?>?/span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>注意</span><span style="font-size: 10pt; font-family: ?hu)?>如果需要?/span><span style="font-size: 10pt; font-family: 'Courier New'">cos</span><span style="font-size: 10pt; font-family: ?hu)?>或?/span><span style="font-size: 10pt; font-family: 'Courier New'">pell</span><span style="font-size: 10pt; font-family: ?hu)?>的文件上传方式,则应该将对应?/span><span style="font-size: 10pt; font-family: 'Courier New'">JAR</span><span style="font-size: 10pt; font-family: ?hu)?>文g复制?/span><span style="font-size: 10pt; font-family: 'Courier New'">Web</span><span style="font-size: 10pt; font-family: ?hu)?>应用中。例如,使用</span><span style="font-size: 10pt; font-family: 'Courier New'">cos</span><span style="font-size: 10pt; font-family: ?hu)?>上传方式Q则需要自׃?/span><span style="font-size: 10pt; font-family: 'Courier New'">cos</span><span style="font-size: 10pt; font-family: ?hu)?>框架?/span><span style="font-size: 10pt; font-family: 'Courier New'">JAR</span><span style="font-size: 10pt; font-family: ?hu)?>文gQƈ该文g攑֜</span><span style="font-size: 10pt; font-family: 'Courier New'">WEB-INF/lib</span><span style="font-size: 10pt; font-family: ?hu)?>路径下?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.multipart.saveDir</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指定上传文件的临时保存路径Q该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">javax.servlet.context.tempdir</span><span style="font-size: 10pt; font-family: ?hu)?>?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.multipart.maxSize</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>文g上传中整个请求内容允许的最大字节数?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.custom.properties</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>应用加蝲用户自定义的属性文Ӟ该自定义属性文件指定的属性不?x)覆?/span><span style="font-size: 10pt; font-family: 'Courier New'">struts.properties</span><span style="font-size: 10pt; font-family: ?hu)?>文g中指定的属性。如果需要加载多个自定义属性文Ӟ多个自定义属性文件的文g名以英文逗号Q?/span><span style="font-size: 10pt; font-family: 'Courier New'">,</span><span style="font-size: 10pt; font-family: ?hu)?>Q隔开?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.mapper.class</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>指定?/span><span style="font-size: 10pt; font-family: 'Courier New'">HTTP</span><span style="font-size: 10pt; font-family: ?hu)?>h映射到指?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: ?hu)?>的映器Q?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>提供?jin)默认的映射器?x)</span><span style="font-size: 10pt; font-family: 'Courier New'">org.apache.struts2.dispatcher.mapper.DefaultActionMapper</span><span style="font-size: 10pt; font-family: ?hu)?>。默认映器Ҏ(gu)h的前~?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">name</span><span style="font-size: 10pt; font-family: ?hu)?>属性完成映?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.action.extension</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: ?hu)?>该属性指定需?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>处理的请求后~Q该属性的默认值是</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">action</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>Q即所有匹?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">*.action</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>的请求都?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>处理。如果用户需要指定多个请求后~Q则多个后缀之间以英文逗号Q?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">,</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>Q隔开?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.serve.static</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性设|是否通过</span><span style="font-size: 10pt; font-family: 'Courier New'">JAR</span><span style="font-size: 10pt; font-family: ?hu)?>文g提供?rn)态内Ҏ(gu)务,该属性只支持</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: ?hu)?>属性|该属性的默认属性值是</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.serve.static.browserCache</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: ?hu)?>该属性设|浏览器是否~存?rn)态内宏V当应用处于开发阶D|Q我们希望每ơ请求都获得服务器的最新响应,则可讄该属性ؓ(f)</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">false</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>Q生产环境下可以~存?/span></strong><strong> </strong></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.enable.DynamicMethodInvocation</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: ?hu)?>该属性设|?/span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>是否支持动态方法调用,该属性的默认值是</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">true</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>。如果需要关闭动态方法调用,则可讄该属性ؓ(f)</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">false</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.enable.SlashesInActionNames</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性设|?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>是否允许?/span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: ?hu)?>名中使用斜线Q该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: ?hu)?>。如果开发者希望允许在</span><span style="font-size: 10pt; font-family: 'Courier New'">Action</span><span style="font-size: 10pt; font-family: ?hu)?>名中使用斜线Q则可设|该属性ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.tag.altSyntax</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指定是否允许在</span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>标签中用表辑ּ语法Q因为通常都需要在标签中用表辑ּ语法Q故此属性应该设|ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>Q该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.devMode</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性设|?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>应用是否使用开发模式。如果设|该属性ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>Q则可以在应用出错时昄更多、更友好的出错提C。该属性只接受</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">flase</span><span style="font-size: 10pt; font-family: ?hu)?>两个|该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: ?hu)?>。通常Q应用在开发阶D,该属性设|ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>Q当q入产品发布阶段后,则该属性设|ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: ?hu)?>?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.i18n.reload</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性设|是否每?/span><span style="font-size: 10pt; font-family: 'Courier New'">HTTP</span><span style="font-size: 10pt; font-family: ?hu)?>h到达Ӟpȝ都重新加载资源文件。该属性默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: ?hu)?>。在开发阶D将该属性设|ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>?x)更有利于开发,但在产品发布阶段应将该属性设|ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: ?hu)?>?/span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>提示Q开发阶D将该属性设|了(jin)</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>Q将可以在每ơ请求时都重新加载国际化资源文gQ从而可以让开发者看到实时开发效果;产品发布阶段应该该属性设|ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'"> false</span><span style="font-size: 10pt; font-family: ?hu)?>Q是Z(jin)提供响应性能Q每ơ请求都需要重新加载资源文件会(x)大大降低应用的性能?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.ui.theme</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: ?hu)?>该属性指定视图标{N认的视图主题Q该属性的默认值是</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">xhtml</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.ui.templateDir</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指定视图主题所需要模板文件的位置Q该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">template</span><span style="font-size: 10pt; font-family: ?hu)?>Q即默认加蝲</span><span style="font-size: 10pt; font-family: 'Courier New'">template</span><span style="font-size: 10pt; font-family: ?hu)?>路径下的模板文g?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.ui.templateSuffix</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指定模板文件的后缀Q该属性的默认属性值是</span><span style="font-size: 10pt; font-family: 'Courier New'">ftl</span><span style="font-size: 10pt; font-family: ?hu)?>。该属性还允许使用</span><span style="font-size: 10pt; font-family: 'Courier New'">ftl</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">vm</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">jsp</span><span style="font-size: 10pt; font-family: ?hu)?>Q分别对?/span><span style="font-size: 10pt; font-family: 'Courier New'">FreeMarker</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">Velocity</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">JSP</span><span style="font-size: 10pt; font-family: ?hu)?>模板?/span></p> <p><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.configuration.xml.reload</span></strong></p> <p><strong><span style="font-size: 10pt; font-family: ?hu)?>该属性设|当</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">struts.xml</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>文g改变后,pȝ是否自动重新加蝲该文件。该属性的默认值是</span></strong><strong><span style="font-size: 10pt; font-family: 'Courier New'">false</span></strong><strong><span style="font-size: 10pt; font-family: ?hu)?>Q开发阶D很实用?/span></strong></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.velocity.configfile</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span><span style="font-size: 10pt; font-family: 'Courier New'">Velocity</span><span style="font-size: 10pt; font-family: ?hu)?>框架所需?/span><span style="font-size: 10pt; font-family: 'Courier New'">velocity.properties</span><span style="font-size: 10pt; font-family: ?hu)?>文g的位|。该属性的默认gؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">velocity.properties</span><span style="font-size: 10pt; font-family: ?hu)?>?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.velocity.contexts</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span><span style="font-size: 10pt; font-family: 'Courier New'">Velocity</span><span style="font-size: 10pt; font-family: ?hu)?>框架?/span><span style="font-size: 10pt; font-family: 'Courier New'">Context</span><span style="font-size: 10pt; font-family: ?hu)?>位置Q如果该框架有多?/span><span style="font-size: 10pt; font-family: 'Courier New'">Context</span><span style="font-size: 10pt; font-family: ?hu)?>Q则多个</span><span style="font-size: 10pt; font-family: 'Courier New'">Context</span><span style="font-size: 10pt; font-family: ?hu)?>之间以英文逗号Q?/span><span style="font-size: 10pt; font-family: 'Courier New'">,</span><span style="font-size: 10pt; font-family: ?hu)?>Q隔开?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.velocity.toolboxlocation</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span><span style="font-size: 10pt; font-family: 'Courier New'">Velocity</span><span style="font-size: 10pt; font-family: ?hu)?>框架?/span><span style="font-size: 10pt; font-family: 'Courier New'">toolbox</span><span style="font-size: 10pt; font-family: ?hu)?>的位|?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.url.http.port</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span><span style="font-size: 10pt; font-family: 'Courier New'">Web</span><span style="font-size: 10pt; font-family: ?hu)?>应用所在的监听端口。该属性通常没有太大的用处,只是?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>需要生?/span><span style="font-size: 10pt; font-family: 'Courier New'">URL</span><span style="font-size: 10pt; font-family: ?hu)?>Ӟ例如</span><span style="font-size: 10pt; font-family: 'Courier New'">Url</span><span style="font-size: 10pt; font-family: ?hu)?>标签Q,该属性才提供</span><span style="font-size: 10pt; font-family: 'Courier New'">Web</span><span style="font-size: 10pt; font-family: ?hu)?>应用的默认端口?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.url.https.port</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性类g</span><span style="font-size: 10pt; font-family: 'Courier New'">struts.url.http.port</span><span style="font-size: 10pt; font-family: ?hu)?>属性的作用Q区别是该属性指定的?/span><span style="font-size: 10pt; font-family: 'Courier New'">Web</span><span style="font-size: 10pt; font-family: ?hu)?>应用的加密服务端口?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.url.includeParams</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>生成</span><span style="font-size: 10pt; font-family: 'Courier New'">URL</span><span style="font-size: 10pt; font-family: ?hu)?>时是否包含请求参数。该属性接?/span><span style="font-size: 10pt; font-family: 'Courier New'">none</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">get</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">all</span><span style="font-size: 10pt; font-family: ?hu)?>三个属性|分别对应于不包含、仅包含</span><span style="font-size: 10pt; font-family: 'Courier New'">GET</span><span style="font-size: 10pt; font-family: ?hu)?>cdh参数和包含全部请求参数?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.custom.i18n.resources</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>应用所需要的国际化资源文Ӟ如果有多份国际化资源文gQ则多个资源文g的文件名以英文逗号Q?/span><span style="font-size: 10pt; font-family: 'Courier New'">,</span><span style="font-size: 10pt; font-family: ?hu)?>Q隔开?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.dispatcher.parametersWorkaround</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>对于某些</span><span style="font-size: 10pt; font-family: 'Courier New'">Java EE</span><span style="font-size: 10pt; font-family: ?hu)?>服务器,不支?/span><span style="font-size: 10pt; font-family: 'Courier New'">HttpServlet Request</span><span style="font-size: 10pt; font-family: ?hu)?>调用</span><span style="font-size: 10pt; font-family: 'Courier New'">getParameterMap()</span><span style="font-size: 10pt; font-family: ?hu)?>Ҏ(gu)Q此时可以设|该属性gؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>来解册问题。该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: ?hu)?>。对?/span><span style="font-size: 10pt; font-family: 'Courier New'"> WebLogic</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">Orion</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">OC4J</span><span style="font-size: 10pt; font-family: ?hu)?>服务器,通常应该讄该属性ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.freemarker.manager.classname</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>使用?/span><span style="font-size: 10pt; font-family: 'Courier New'">FreeMarker</span><span style="font-size: 10pt; font-family: ?hu)?>理器。该属性的默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">org.apache.struts2.views.freemarker.FreemarkerManager</span><span style="font-size: 10pt; font-family: ?hu)?>Q这?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>内徏?/span><span style="font-size: 10pt; font-family: 'Courier New'">FreeMarker</span><span style="font-size: 10pt; font-family: ?hu)?>理器?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.freemarker.wrapper.altMap</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性只支持</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>?/span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: ?hu)?>两个属性|默认值是</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>。通常无需修改该属性倹{?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.xslt.nocache</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span><span style="font-size: 10pt; font-family: 'Courier New'">XSLT Result</span><span style="font-size: 10pt; font-family: ?hu)?>是否使用样式表缓存。当应用处于开发阶D|Q该属性通常被设|ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">true</span><span style="font-size: 10pt; font-family: ?hu)?>Q当应用处于产品使用阶段Ӟ该属性通常被设|ؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">false</span><span style="font-size: 10pt; font-family: ?hu)?>?/span></p> <p><span style="font-size: 10pt; font-family: 'Courier New'">struts.configuration.files</span></p> <p><span style="font-size: 10pt; font-family: ?hu)?>该属性指?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>框架默认加蝲的配|文Ӟ如果需要指定默认加载多个配|文Ӟ则多个配|文件的文g名之间以英文逗号Q?/span><span style="font-size: 10pt; font-family: 'Courier New'">,</span><span style="font-size: 10pt; font-family: ?hu)?>Q隔开。该属性的默认gؓ(f)</span><span style="font-size: 10pt; font-family: 'Courier New'">struts- default.xml,struts-plugin.xml,struts.xml</span><span style="font-size: 10pt; font-family: ?hu)?>Q看到该属性|读者应该明白ؓ(f)什?/span><span style="font-size: 10pt; font-family: 'Courier New'">Struts 2</span><span style="font-size: 10pt; font-family: ?hu)?>框架默认加蝲</span><span style="font-size: 10pt; font-family: 'Courier New'">struts.xml</span><span style="font-size: 10pt; font-family: ?hu)?>文g?jin)?/span></p> <img src ="http://www.tkk7.com/jzone/aggbug/321072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-16 03:08 <a href="http://www.tkk7.com/jzone/articles/321072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 要点W记Q一Q?/title><link>http://www.tkk7.com/jzone/articles/321071.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 15 May 2010 18:59:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/321071.html</guid><description><![CDATA[     摘要: 一、Struts2 主要几句话:(x) 1?Struts2 是由webwork2发展来的而非Struts1Q相比Struts1QStruts2~码规范跟类gwebwork2 2、Struts2 非R入式设计、Struts1属于侵入式设?3、Struts1与ServletAPI、strutsAPI紧密耦合QStruts1则不 4、Struts2 利用拦截器进行AOP~程Q实现如权限拦截功能 ...  <a href='http://www.tkk7.com/jzone/articles/321071.html'>阅读全文</a><img src ="http://www.tkk7.com/jzone/aggbug/321071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-05-16 02:59 <a href="http://www.tkk7.com/jzone/articles/321071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 转换?-Converterhttp://www.tkk7.com/jzone/articles/316885.htmlGavin.leeGavin.leeMon, 29 Mar 2010 17:06:00 GMThttp://www.tkk7.com/jzone/articles/316885.htmlhttp://www.tkk7.com/max/archive/2006/11/07/79602.html

Gavin.lee 2010-03-30 01:06 发表评论
]]>
Struts2 表单数据校验http://www.tkk7.com/jzone/articles/316881.htmlGavin.leeGavin.leeMon, 29 Mar 2010 16:43:00 GMThttp://www.tkk7.com/jzone/articles/316881.html阅读全文

Gavin.lee 2010-03-30 00:43 发表评论
]]>
Struts2 拦截?/title><link>http://www.tkk7.com/jzone/articles/316874.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Mon, 29 Mar 2010 15:17:00 GMT</pubDate><guid>http://www.tkk7.com/jzone/articles/316874.html</guid><description><![CDATA[     摘要: 一、拦截器定义 拦截器,在AOPQAspect-Oriented ProgrammingQ中用于在某个方法或字段被访问之前,q行拦截然后在之前或之后加入某些操作。拦截是AOP的一U实现策略?在Webwork的中文文的解释为——拦截器是动态拦截Action调用的对象。它提供?jin)一U机制可以开发者可以定义在一个action执行的前后执行的代码Q也可以在一个action执行前阻止其执行。同时也?..  <a href='http://www.tkk7.com/jzone/articles/316874.html'>阅读全文</a><img src ="http://www.tkk7.com/jzone/aggbug/316874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2010-03-29 23:17 <a href="http://www.tkk7.com/jzone/articles/316874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 标签功能详解 --- 无实例讲?http://www.tkk7.com/jzone/articles/316631.htmlGavin.leeGavin.leeFri, 26 Mar 2010 04:03:00 GMThttp://www.tkk7.com/jzone/articles/316631.htmlStruts 2 Tag Reference: http://struts.apache.org/2.x/docs/tag-reference.html

AQ?
<s:a xhref=""></s:a>-----链接,cM于html里的<a></a>
<s:action name=""></s:action>-----执行一个view里面的一个action
<s:actionerror/>-----如果action的errors有值那么显C出?
<s:actionmessage/>-----如果action的message有值那么显C出?
<s:append></s:append>-----d一个值到l(f)istQ类glist.add();
<s:autocompleter></s:autocompleter>-----自动完成<s:combobox>标签的内容,q个是ajax

BQ?
<s:bean name=""></s:bean>-----cM于struts1.x中的QJavaBean的?

CQ?
<s:checkbox></s:checkbox>-----复选框
<s:checkboxlist list=""></s:checkboxlist>-----多选框
<s:combobox list=""></s:combobox>-----下拉?
<s:component></s:component>-----囑փW号

DQ?
<s:date/>-----获取日期格式
<s:datetimepicker></s:datetimepicker>-----日期输入?
<s:debug></s:debug>-----昄错误信息
<s:div></s:div>-----表示一个块Q类ghtml?lt;div></div>
<s:doubleselect list="" doubleName="" doubleList=""></s:doubleselect>-----双下拉框

EQ?
<s:if test=""></s:if>
<s:elseif test=""></s:elseif>
<s:else></s:else>-----q?个标{一起用,表示条g判断

FQ?
<s:fielderror></s:fielderror>-----昄文g错误信息
<s:file></s:file>-----文g上传
<s:form action=""></s:form>-----获取相应form的?

GQ?
<s:generator separator="" val=""></s:generator>----?lt;s:iterator>标签一起?

HQ?
<s:head/>-----?lt;head></head>里用,表示头文件结?
<s:hidden></s:hidden>-----隐藏?

IQ?
<s:i18n name=""></s:i18n>-----加蝲资源包到值堆?
<s:include value=""></s:include>-----包含一个输出,servlet或jsp面
<s:inputtransferselect list=""></s:inputtransferselect>-----获取form的一个输?
<s:iterator></s:iterator>-----用于遍历集合

LQ?
<s:label></s:label>-----只读的标{?

MQ?
<s:merge></s:merge>-----合ƈ遍历集合出来的?

OQ?
<s:optgroup></s:optgroup>-----获取标签l?
<s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----左右选择?

PQ?
<s:param></s:param>-----为其他标{提供参?
<s:password></s:password>-----密码输入?
<s:property/>-----得到'value'的属?
<s:push value=""></s:push>-----value的值push到栈?从而property标签的能够获取value的属?

RQ?
<s:radio list=""></s:radio>-----单选按?
<s:reset></s:reset>-----重置按钮

SQ?
<s:select list=""></s:select>-----单选框
<s:set name=""></s:set>-----赋予变量一个特定范围内的?
<s:sort comparator=""></s:sort>-----通过属性给list分类
<s:submit></s:submit>-----提交按钮
<s:subset></s:subset>-----为遍历集合输出子?

TQ?
<s:tabbedPanel id=""></s:tabbedPanel>-----表格?
<s:table></s:table>-----表格
<s:text name=""></s:text>-----I18n文本信息
<s:textarea></s:textarea>-----文本域输入框
<s:textfield></s:textfield>-----文本输入?
<s:token></s:token>-----拦截?
<s:tree></s:tree>-----?
<s:treenode label=""></s:treenode>-----?wi)的l构

UQ?
<s:updownselect list=""></s:updownselect>-----多选择?
<s:url></s:url>-----创徏url 
 
 



Gavin.lee 2010-03-26 12:03 发表评论
]]>
JAVA WEB 由Model 1 向Model 2的过?之SSHhttp://www.tkk7.com/jzone/articles/316488.htmlGavin.leeGavin.leeWed, 24 Mar 2010 15:35:00 GMThttp://www.tkk7.com/jzone/articles/316488.html原文Qhttp://hi.baidu.com/%D0%C4%CB%E9%E5%D0%D2%A3/blog/item/e6ae7ed87146ac3232fa1c40.html
传统的java web应用E序是采用jsp+servlet+javabean来实现的Q这U模式实C(jin)最基本的MVC分层Q的程序结构分为几层,有负责显C的 jsp、负责流E逻辑控制的servlet、负责数据封装的javabean。但是这U结构仍然存在问题:(x)如jsp面中需要?lt;% %>W号嵌入很多的java代码Q造成面l构混ؕQservlet和javabean负责?jin)大量的跌{和运工作,耦合紧密Q程序复用度低等{?br />
于是先出C(jin)struts框架Q它是一个完的MVC实现Q它有一个中央控制类Q一个ServletQ,针对不同的业务,我们需要一个Actionc负? 面跌{和后台逻辑q算Q一个或几个jsp面负责数据的输入和输出昄Q还有一个Formc负责传递Action和jsp中间的数据。jsp中可以? struts框架提供的一l标{,像使用html标签一L(fng)单,但是可以完成非常复杂的逻辑。从此jsp面中不需要出C?lt;%%>包围 的java代码?jin)?br />
可是所有的q算逻辑都放在struts的Action里将使得Actioncd用度低和逻辑混ؕQ所以通常Z?x)把整个web应用E序分ؓ(f)三层Qstruts负责昄层,它调用业务层完成q算逻辑Q业务层再调用持久层完成数据库的d?br />
使用jdbcq接来读写数据库Q我们最常见的就是打开数据库连接、用复杂的sql语句q行d、关闭连接,获得的数据又需要{换或装后往外传Q这是一个非常烦(ch)琐的q程?br />
q时出现?jin)hibernate框架Q它需要你创徏一pd的持久化c,每个cȝ属性都可以单的看做和一张数据库表的属性一一对应Q当然也可以实现关系数据 库的各种表g兌的对应。然后我?***作时Q只需要去****作这些持久化c,而不用再x(chng)数据库表。我们不用再M行行的查询数据库Q只需? ****作持久化cd可以完成增删Ҏ(gu)的功能。我们的Y件开发真正面向对象,而不是面向؜q代码。我的感受是Q用hibernate比jdbc方式 减少?0Q的~程量?br />
现在我们有三个层?jin),可是每层之间的调用是怎样的呢Q比如显C层的struts需要调用一个业务类Q就需要new一个业务类出来Q然后用;业务层需要调 用持久层的类Q也需要new一个持久层cd来用。通过q种new的方式互相调用就是Y件开发中最p糕设计的体现。简单的_(d)是调用者依赖被调用者,它们 之间形成?jin)强耦合Q如果我惛_其他地方复用某个c,则这个类依赖的其他类也需要包含。程序就变得很؜乱,每个cM怾赖互相调用,复用度极低。如果一个类 做了(jin)修改Q则依赖它的很多c都?x)受到牵q?br />
为此Q出现spring框架Q它的作用就是完全解耦类之间的依赖关p,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,q都不重要了(jin)。只? 拿到一个实C(jin)q个接口的类Q就可以L的通过xml配置文g把实现类注射到调用接口的那个c里。所有类之间的这U依赖关pd完全通过配置文g的方式替? ?jin)。所以spring框架最核心(j)的就是所谓的依赖注射和控制反转?br />
现在的结构是Qstruts负责昄层,hibernate负责持久层,spring负责中间的业务层Q这个结构是目前国内最行的Java Web应用E序架构?jin)。另外,׃Spring使用的依赖注以?qing)AOPQ面向方面编E)(j)Q所以它的这U内部模式非怼UQ以至于Spring自己也实? ?jin)一个用依赖注的MVC框架Q叫做Spring MVCQ同时ؓ(f)?jin)很好的处理事物QSpring集成?jin)hibernateQ事物理从Hibernate的持久层提升C(jin)业务层,使用更加方便和强大?/span>

Gavin.lee 2010-03-24 23:35 发表评论
]]>
Struts1 初步认识http://www.tkk7.com/jzone/articles/290601.htmlGavin.leeGavin.leeMon, 10 Aug 2009 16:11:00 GMThttp://www.tkk7.com/jzone/articles/290601.html1.Z么要使用struts
a.struts建立在MVCq种公认的好的模式上的,Struts在M,V,C上都有涉?qing),但它主要提供一个好的控制器和一套定制的标签库上Q也是说它的着力点在C,V上,有MVC的一pd优点Q如Q结构层ơ分明,高可重用性,增加?jin)程序的健壮性呵可׾~性,便于开发与设计分工Q提供集中统一的权限控Ӟ校验Q国际化Q日志等{;
b.struts它是开源项目,得到?jin)包括它的发明者Craig R.McClanahan在内的一些程序大师和高手持箋(hu)而细?j)的呉|Qƈ且经受了(jin)实战的检验,使其功能来强大,体系也日益完善;
c.struts框架能和其他技术很好的融合Q如与SpringQHibernate{框架的整合Q大大加快了(jin)开发速度

2.Framework的概?br /> 框架是h们用于解决相同或者相似类型问题的Ҏ(gu)
特点Q可重用性,可扩展性,可收~性。基于请求响应(request-responseQ模式的应用Framework的逻辑l构
控制器:(x)Controller
业务逻辑层:(x)Business Logic
数据逻辑层:(x)Data Logic

3.Struts的概念和体系l构
Struts是Apachel织的一个开源项目,主要是采用Servlet和JSP技术来实现?br /> Struts是一个基于Sun JavaEEq_的MVC框架Q它采用MVC模式Q将MVC模式分离昄逻辑和业务逻辑的能力,发挥的淋漓尽?br /> (Struts is a flexible control layer based on standard technologies like Java Servlets,JavaBeans,ResourceBundles,and XML,as well as various Jakarta Commons packages,like BeanUtils and Chain of Responsibility.The frameword helps you create an extensible developmnt environment for your application,based on published standards and proven design patterns)

4.Struts的实跉|?br /> 步骤一Q搭建环?br />  a.导入jar包,使用其中的类
 b.建立一个配|文Ӟstruts=config.xml
        方便struts用户使用
        一般在WEB=INF?br />  c.修改web.xml
         注册struts中心(j)控制?--ActionServlet

<serlet>
    
<servlet-name></servlet-name>
    
<servlet-class></servlet-class>
    
<init-param> <!-- 初始化加载配|文?nbsp;-->
        
<param-name>config</param-name>
        
<param-value>/WEB-INF/struts-config.xml</param-value>
    
</init-param>
    
<load-on-startup>0</load-on-startup> <!-- web容器启动加载该servlet -->
</serlet>

<servlet-mapping> <!-- 该servlet对外调用的映?nbsp;-->
    
<servlet-name></servlet-name>
    
<url-pattern></url-pattern>
</servlet-mapping>

 
步骤二:(x)建立ActionForm
步骤三:(x)建立Action
 建立一个类Q承ActionQ覆盖executeҎ(gu)
 注册Q修攚w|文件struts-config.xml
  pathQ指明调用者(jspQ能通过中心(j)控制器ActionServlet扑ֈ该Action
  typeQ指明该actioncd?br />   nameQ该action引用的form的名U?/p>

步骤四:(x)面讉K


5.Struts的工作原?br /> 6.Struts的组?br /> 7.Struts的配|文件简?br /> 8.Struts标记?br /> 9.异常处理框架
10.校验框架
11.高Ҏ(gu)?br /> 12.Struts优缺?br /> 优点Q?br />   Struts跟Tomcat、Turbine{诸多Apache目一P是开源YӞq是它的一大优炏V开发者能更深入的?jin)解其内部实现机制。除此之外,Struts的优点主要集中体现在两个

斚wQTaglib和页面导航。Taglib是Struts的标记库Q灵zd用,能大大提高开发效率。另外,q前国内的JSP开发者而言Q除?jin)用JSP自带的常用标记外Q很开发自q?/p>

讎ͼ或许Struts是一个很好的L(fng)?br />   关于面DQ我们认为那是今后的一个发展方向,事实上,q样做,使系l的脉络更加清晰。通过一个配|文Ӟ卛_把握整个pȝ各部分之间的联系Q这对于后期的维

护有着莫大的好处。尤其是当另一批开发者接手这个项目时Q这U优势体现得更加明显?/p>

~点Q?br />   Taglib是Struts的一大优势,但对于初学者而言Q却需要一个持l学?fn)的q程Q甚臌?sh)(x)打乱我们网늼写的习(fn)惯Q但是,当我们习(fn)惯了(jin)它时Q我们会(x)觉得它真的很?/p>

StrutsMVC的Controller一分ؓ(f)三,在获得结构更加清晰的同时Q也增加?jin)系l的复杂度。毫无疑问,要理?Struts 必须接受一定的培训。随着变化的不断加入,q有时会(x)令h

很沮丧?br />   Struts从生到现在q(sh)q?-4q时_(d)已逐步来多q用于商业Y件。虽然它现在q有不少~点Q但它是一U非怼U的J2EE MVC实现方式Q如果我们的pȝ准备采用

J2EE MVC架构Q那么,不妨考虑一下Struts?br />   Struts 是一U基?Web ?MVC 解决Ҏ(gu)Q所以必ȝ HTML、JSP 文g?servlet 来实现它QStruts 需要支?JSP 1.1 ?Servlet 2.2 规范?servlet 容器。学?fn)、理

解和掌握Struts是我们每个基于J2EE软g开发h员(sh)门必修的评Q也是我们对企业J2EE技术应用的q一步深化?/p>

/************************************************************************************************/

Struts的基本组件包

org.apache.struts.action
 基本上,控制整个struts framework的运行的核心(j)cR组仉在这个包中,比如我们上面提到的控制器ActionServlet。已lAction,ActionForm,ActionMapping{等。struts1.1?.0多了(jin) DynaActionForm cR增加了(jin)动态扩展生成FormBean功能

org.apache.struts.actions
 q个包是主要作用是提供客L(fng)httph和业务逻辑处理之间的特定适配器{换功能,?.0版本中的部分动态增删FromBean的类Q也在struts1.1中被Action包的DynaActionFormlg所取代

org.apache.struts.config
 提供寚w|文件struts-config.xml元素的映。这也是sturts1.1中新增的功能

org.apache.struts.util
 StrtutsZ(jin)更好支持web application的应用,体统?jin)一个些常用服务的支持,比如Connection Pool和Message Source?br />
org.apache.struts.taglib
 q不是一个包Q而是是一个客h{的集合。下面包括Bean TagsQHTML TagsQLogic TagsQNested TagsQTemplate Tagsq几个用于构建用L(fng)面的标签cR?

org.apache.struts.validator
 Struts1.1 framework中增加了(jin)validator frameworkQ用于动态的配置from表单的验证?/p>

/************************************************************************************************/
核心(j)Struts cdMVC 的对?/p>

c?nbsp;                                                                          描述
ActionForward                                           用户指向或者视N择
ActionForm                                                状态改变的数据
ActionMapping                                           状态改变(sh)?
ActionServlet                                              控制器,接受用户h和状态改变,以及(qing)发出视图选择
Action                                                        控制器的一部分Q于模型交互Q执行状态改变或状态查询,
                                                                以及(qing)告诉ActionServlet 下一个选择的视?


/************************************************************************************************/
Struts 使用一些配|文件和视图助手Qview helpersQ来沟通控制器和模?br /> ApplicationResources.properties                                   存储本地化信息和标签Q以使应用可以国际化
struts-config.xml                                                            存储控制器对象的~省配置Q包括模型支持的用户指向Q状态改变,状态查?

标记库描q符                                                           目的
struts-html.tld                                               扩展HTML Form的JSP标记
struts-bean.tld                                              扩展处理JavaBean的JSP标记
struts-logic.tld                                              扩展试属性值的JSP标记

/************************************************************************************************/
控制器组件的配置框架中的控制器组件是有org.apache.struts.action.ActionServletcd现的Q这个类是javax.servlet.http.HttpServletcȝ扩展?br /> ActionServlet配置Q我们需要在web.xml中声明ActionServletQƈ且将它配|成启动时进行加载。以下ؓ(f)可以配置的初始化参数Q?br /> 参数                                                         默认?nbsp;                                                                       描述
application                                                    Null                                                                应用E序的资源集合的c?
bufferSize                                                     4096                                                                文g上传的缓冲区大小
config                                            /WEB-INF/struts-config.xml                                        配置文g的位|和名称
content                                                       Text/html                                                                     默认的内容类?
debug                                                              0                                                                          E序调试的?
detail                                                               0                                                                         E序调试l节的?
factory                                                         Null                                                 消息资源工厂Q用于国际化中解释消息资?
formBean                            org.apache.struts.action.ActionFormBean                         装ActionForm bean信息的类的名U?
forward                              Org.apache.struts.action.ActionForward                          装ActionForward对象信息的类的名U?
locale                                                          True                                                        为true,在用户?x)话中存储一个本地对?
mapping                            Org.apache.struts.action.ActionForward                              装ActionMapping信息的类的名U?
maxFileSize                                                250M                                                                 上传文g的最大尺?
multipartClass                   Org.apache.struts.action.ActionForward                                处理多部分请求的cȝ名称
noCache                                                      False                                                      HTTP标头是否要设|ؓ(f)止~寸
Null                                                             True                                                       讄为trueQ对于无效的信息关键字将q回null
tempDir                           作ؓ(f)一个servlet参数提供l程序的工作目录                        处理下蝲文g是用的临时工作目录
validate                                                        True                                                              是否使用新格式的配置文g
vallidating                                                     True                                                              是否寚w|文件进行有效性分?


 



Gavin.lee 2009-08-11 00:11 发表评论
]]>
վ֩ģ壺 ձһձ| ޾ƷAAƬ| һԻƬ| | Ļ뾫ƷԴþ| 99þþƷѾƷ| ޳aƬ777777| ëƬһƵѲ| ҹѸ| ޳aƬ߹ۿƷ| 3344ѲŹۿƵ| þ91ۿ| ۺ˾þۺ| VAѾƷ| JIZZJIZZйٸ| þav޾Ʒɫҹ| պƷƵ| ޾ƷVAƬ߲| ɫվav| ijվ| ëƬƵѹۿ| ޾߹ۿ| 2019Ļѿ| ޳aƬ߹ۿƷ| Ļavѷ| AVӰ߹ۿ| ˬˬˬƵ| ޺ݺݳۺ| wwwƵ| ޾ƷŮͬĻ| Ƭѿ| ҳڻӭ| Ļѵַ߹ۿ| ˾ѹۿ| ޾ƷһۺϾԴ| ѾþҹƷ| һƷ| ܳƵѹۿ| ޸һƷ| պѸƵ| ޴Ů߹ۿ|