﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-java 学习-随笔分类-struts</title><link>http://www.blogjava.net/zxfahjz/category/10440.html</link><description>软件开发相关方面的学习</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:23:57 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:23:57 GMT</pubDate><ttl>60</ttl><item><title>logic</title><link>http://www.blogjava.net/zxfahjz/archive/2006/08/14/63510.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Mon, 14 Aug 2006 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/zxfahjz/archive/2006/08/14/63510.html</guid><wfw:comment>http://www.blogjava.net/zxfahjz/comments/63510.html</wfw:comment><comments>http://www.blogjava.net/zxfahjz/archive/2006/08/14/63510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zxfahjz/comments/commentRss/63510.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zxfahjz/services/trackbacks/63510.html</trackback:ping><description><![CDATA[在本页ActionForm中有showGreen属性<br />&lt;logic:equal parameter="showGreen" value="true"&gt;<br />true<br />&lt;/logic:equal&gt;<img src ="http://www.blogjava.net/zxfahjz/aggbug/63510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zxfahjz/" target="_blank">zxf</a> 2006-08-14 17:05 <a href="http://www.blogjava.net/zxfahjz/archive/2006/08/14/63510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>消息(错误)显示 </title><link>http://www.blogjava.net/zxfahjz/archive/2006/06/12/52129.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Mon, 12 Jun 2006 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/zxfahjz/archive/2006/06/12/52129.html</guid><wfw:comment>http://www.blogjava.net/zxfahjz/comments/52129.html</wfw:comment><comments>http://www.blogjava.net/zxfahjz/archive/2006/06/12/52129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zxfahjz/comments/commentRss/52129.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zxfahjz/services/trackbacks/52129.html</trackback:ping><description><![CDATA[消息(错误)显示 <br /><br />ActionMessages messages = new ActionMessages(); <br />messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("userForm.insert", info.getUserName()); <br />messages.add("activationDate", new ActionMessage("userForm.active", info.getDateLength()); <br /><br />如下可以显示<font color="#ff0000">所有</font>消息，并用&lt;li&gt;将它们放入一个list，再加上可定制的header/footer <br />&lt;html:messages id="message" header="errors.header" footer="errors.footer"&gt; <br />&lt;li&gt;&lt;bean:write name="message"/&gt;&lt;/li&gt; <br />&lt;/html:messages&gt; <br /><br />如下可以指定只显示<font color="#ff0000">某种</font>message <br />&lt;html:messages id="message" property="&lt;%= org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE %&gt;"&gt; <br />&lt;li&gt;&lt;bean:write name="message"/&gt;&lt;/li&gt; <br />&lt;/html:messages&gt; <br /><br />&lt;html:messages id="message" property="activationDate"&gt; <br />&lt;li&gt;&lt;bean:write name="message"/&gt;&lt;/li&gt; <br />&lt;/html:messages&gt; <br /><br />把Messages换成Errors就是错误显示，为了简便，经常一个&lt;html:errors/&gt;了事<img src ="http://www.blogjava.net/zxfahjz/aggbug/52129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zxfahjz/" target="_blank">zxf</a> 2006-06-12 10:07 <a href="http://www.blogjava.net/zxfahjz/archive/2006/06/12/52129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web.xml元素介绍</title><link>http://www.blogjava.net/zxfahjz/archive/2006/04/27/43478.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Thu, 27 Apr 2006 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/zxfahjz/archive/2006/04/27/43478.html</guid><wfw:comment>http://www.blogjava.net/zxfahjz/comments/43478.html</wfw:comment><comments>http://www.blogjava.net/zxfahjz/archive/2006/04/27/43478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zxfahjz/comments/commentRss/43478.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zxfahjz/services/trackbacks/43478.html</trackback:ping><description><![CDATA[web.xml<br /><br />&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee"<br />    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"<br />    version="2.4"&gt;<br /><br />&lt;/web-app&gt;<br /><br />其它的元素都放在&lt;web-app&gt;&lt;/web-app&gt;之中。<br /><br />&lt;discription&gt;&lt;/discription&gt; 是对站台的描述<br />&lt;display-name&gt;&lt;/display-name&gt; 定义站台的名称<br />&lt;distributable/&gt; 是指定该站台是否可分布式处理<br /><br />&lt;context-param&gt;&lt;/context-param&gt; 用来设定web站台的环境参数，它包含两个子元素：<br />    &lt;param-name&gt;&lt;/param-name&gt; 用来指定参数的名称<br />    &lt;param-value&gt;&lt;/param-value&gt; 用来设定参数值<br /><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">比如：</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;context-param&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">    &lt;param-name&gt;my_param&lt;/param-name&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">    &lt;param-value&gt;hello&lt;/param-value&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;/context-param&gt;<br /><br />在此设定的参数，可以在servlet中用 getServletContext().getInitParameter("my_param") 来取得<br /></span><br />&lt;filter&gt;&lt;/filter&gt; 是用来声明filter的相关设定，它包含以下子元素：<br />    &lt;filter-name&gt;&lt;/filter-name&gt; 这当然就是指定filter的名字<br />    &lt;filter-class&gt;&lt;/filter-class&gt; 这是用来定义filter的类的名称<br />    &lt;init-param&gt;&lt;/init-param&gt; 用来定义参数，它有两个子元素：<br />        &lt;param-name&gt;&lt;/param-name&gt; 用来指定参数的名称<br />        &lt;param-value&gt;&lt;/param-value&gt; 用来设定参数值<br /><br /><span style="COLOR: rgb(0,102,0)">比如：</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;filter&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;filter-name&gt;setCharacterEncoding&lt;/filter-name&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;filter-class&gt;com.myTest.setCharacterEncodingFilter&lt;/filter-class&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;init-param&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">            &lt;param-name&gt;encoding&lt;/param-name&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">            &lt;param-value&gt;GB2312&lt;/param-value&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;/init-param&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;/filter&gt;<br /><br /><span style="COLOR: rgb(0,0,0)">与</span></span>&lt;filter&gt;&lt;/filter&gt;同时使用的是&lt;filter-mapping&gt;&lt;/filter-mapping&gt; 用来定义filter所对应的URL，它有两个子元素：<br />    &lt;filter-name&gt;&lt;/filter-name&gt; 指定filter的名字<br />    &lt;url-pattern&gt;&lt;/url-pattern&gt; 指定filter所对应的URL<br /><br /><span style="COLOR: rgb(0,102,0)">比如：</span><br /><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)"></span>&lt;filter-mapping&gt;<br />        &lt;filter-name&gt;setCharacterEncoding&lt;/filter-name&gt;<br />        &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br /><br /><br /><span style="COLOR: rgb(0,0,0)">&lt;listener&gt;&lt;/listener&gt; 用来设定Listener接口，它的主要子元素为<br />    &lt;listener-class&gt;&lt;/listener-class&gt; 定义Listener的类名称<br /><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">比如：</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;listener&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">    </span></span>&lt;listener-class&gt;com.myTest.ContextListener&lt;/listener-class&gt; </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,102,0)">&lt;/listener&gt;<br /><span style="COLOR: rgb(0,0,0)"><br />&lt;servlet&gt;&lt;/servlet&gt; 用来声明一个servlet的数据，主要有以下子元素：<br />    &lt;servlet-name&gt;</span></span></span></span><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)">&lt;/servlet-name&gt;</span></span></span></span> 指定servlet的名称<br />    <span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)">&lt;servlet-class&gt;</span></span></span></span><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)">&lt;/servlet-class&gt;</span></span></span></span> 指定servlet的类名称<br />    &lt;jsp-file&gt;&lt;/jsp-file&gt; 指定web站台中的某个JSP网页的完整路径<br />    &lt;init-param&gt;&lt;/init-param&gt; 用来定义参数，和前面的&lt;init-param&gt;差不多<br /><br />同样，与<span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)">&lt;servlet&gt;&lt;/servlet&gt;一起使用的是&lt;servlet-mapping&gt;&lt;/servlet-mapping&gt; 用来定义servlet所对应的URL，包含两个子元素：<br />    </span></span></span></span><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)">&lt;servlet-name&gt;</span></span></span></span><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)">&lt;/servlet-name&gt;</span></span></span></span> 指定servlet的名称<br />    &lt;url-pattern&gt;&lt;/url-pattern&gt; 指定servlet所对应的URL<br /><br /><span style="COLOR: rgb(0,102,0)">比如：</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;servlet&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;servlet-name&gt;ShoppingServlet&lt;/servlet-name&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;servlet-class&gt;com.myTest.ShoppingServlet&lt;/servlet-class&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;/servlet&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">    </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;servlet-mapping&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;servlet-name&gt;ShoppingServlet&lt;/servlet-name&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;url-pattern&gt;/shop/ShoppingServlet&lt;/url-pattern&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;/servlet-mapping&gt;<br /><br /><span style="COLOR: rgb(0,0,0)">&lt;session-config&gt;&lt;/session-config&gt; 用来定义web站台中的session参数，包含一个子元素：</span><br style="COLOR: rgb(0,0,0)" /><span style="COLOR: rgb(0,0,0)">    &lt;session-timeout&gt;&lt;/session-timeout&gt; 用来定义这个web站台所有session的有效期限，单位为分钟</span><br style="COLOR: rgb(0,0,0)" /><br style="COLOR: rgb(0,0,0)" /><span style="COLOR: rgb(0,0,0)">&lt;mime-mapping&gt;&lt;/mime-mapping&gt; 定义某一个扩展名和某一个MIME Type做对映，包含两个子元素：</span><br style="COLOR: rgb(0,0,0)" /><span style="COLOR: rgb(0,0,0)">    &lt;extension&gt;&lt;/extension&gt; 扩展名的名称</span><br style="COLOR: rgb(0,0,0)" /><span style="COLOR: rgb(0,0,0)">    &lt;mime-type&gt;&lt;/mime-type&gt; MIME格式</span><br /><br />比如：<br />&lt;mime-mapping&gt;<br />    &lt;extension&gt;doc&lt;/extension&gt;<br />    &lt;mime-type&gt;application/vnd.ms-word&lt;/mime-type&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;/mime-mapping&gt; <br />&lt;mime-mapping&gt;<br />    &lt;extension&gt;xls&lt;/extension&gt;<br />    &lt;mime-type&gt;application/vnd.ms-excel&lt;/mime-type&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;/mime-mapping&gt; <br /><br /><span style="COLOR: rgb(0,0,0)">&lt;welcome-file-list&gt;&lt;/welcom-file-list&gt; 用来定义首页的列单，包含一个子元素：</span><br style="COLOR: rgb(0,0,0)" /><span style="COLOR: rgb(0,0,0)">    &lt;welcome-file&gt;&lt;/welcome-file&gt; 指定首页的文件名称</span><br /><br />比如：<br />&lt;welcome-file-list&gt;<br />    &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />    &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;/welcom-file-list&gt;<br /><br /><span style="COLOR: rgb(0,0,0)">&lt;error-page&gt;&lt;/error-page&gt; 用来处理错误代码或异常的页面，有三个子元素：</span><br style="COLOR: rgb(0,0,0)" /><span style="COLOR: rgb(0,0,0)">    &lt;error-code&gt;&lt;/error-code&gt; 指定错误代码</span><br style="COLOR: rgb(0,0,0)" /><span style="COLOR: rgb(0,0,0)">    &lt;exception-type&gt;&lt;/exception-type&gt; 指定一个JAVA异常类型</span><br style="COLOR: rgb(0,0,0)" /><span style="COLOR: rgb(0,0,0)">    &lt;location&gt;&lt;/location&gt; 指定在web站台内的相关资源路径</span><br style="COLOR: rgb(0,0,0)" /><br />比如：<br />&lt;error-page&gt;<br />    &lt;error-code&gt;404&lt;/error-code&gt;<br />    &lt;location&gt;/error404.jsp&lt;/location&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;/error-page&gt;<br />&lt;error-page&gt;<br />    &lt;exception-type&gt;java.lang.Exception&lt;/exception-type&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">    &lt;location&gt;/exception.jsp&lt;/location&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;/error-page&gt;<br /><br /><span style="COLOR: rgb(0,0,0)">&lt;taglib&gt;&lt;/taglib&gt; 用来设定JSP网页所用到的Tag Library路径，有两个子元素：<br />    &lt;taglib-uri&gt;&lt;/taglib-uri&gt; 定义TLD文件的URI，在JSP网页中用taglib指令便可取得该URI的TLD文件<br />    &lt;taglib-location&gt;&lt;/taglib-location&gt; 指定TLD文件相对于web站台的存放位置<br /><br /><span style="COLOR: rgb(0,102,0)">比如：</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;taglib&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">      &lt;taglib-uri&gt;myTaglib&lt;/taglib-uri&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">      &lt;taglib-location&gt;/WEB-INF/tlds/MyTaglib.tld&lt;/taglib-location&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;/taglib&gt;<br /><br /><br /><span style="COLOR: rgb(0,0,0)">&lt;resource-ref&gt;&lt;/resource-ref&gt; 定义利用JNDI取得站台可利用的资源，有五个子元素：<br />    &lt;description&gt;&lt;/description&gt; 资源说明<br />    &lt;rec-ref-name&gt;&lt;/rec-ref-name&gt; 资源名称<br />    &lt;res-type&gt;&lt;/res-type&gt; 资源种类<br />    &lt;res-auth&gt;&lt;/res-auth&gt; 资源经由Application或Container来许可<br />    &lt;res-sharing-scope&gt;&lt;/res-sharing-scope&gt; 资源是否可以共享，有Shareable和Unshareable两个值，默认为</span></span></span></span><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)"><span style="COLOR: rgb(0,102,0)"><span style="COLOR: rgb(0,0,0)">Shareable<br /><br /><span style="COLOR: rgb(0,102,0)">比如，配置数据库连接池就可在此配置：</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;resource-ref&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;description&gt;JNDI JDBC DataSource of shop&lt;/description&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;res-ref-name&gt;jdbc/sample_db&lt;/res-ref-name&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">        &lt;res-auth&gt;Container&lt;/res-auth&gt;</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)">&lt;/resource-ref&gt;</span></span></span></span></span><img src ="http://www.blogjava.net/zxfahjz/aggbug/43478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zxfahjz/" target="_blank">zxf</a> 2006-04-27 09:49 <a href="http://www.blogjava.net/zxfahjz/archive/2006/04/27/43478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STRUTS 获取网页的根目录实际地址</title><link>http://www.blogjava.net/zxfahjz/archive/2006/04/20/42089.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Thu, 20 Apr 2006 01:40:00 GMT</pubDate><guid>http://www.blogjava.net/zxfahjz/archive/2006/04/20/42089.html</guid><wfw:comment>http://www.blogjava.net/zxfahjz/comments/42089.html</wfw:comment><comments>http://www.blogjava.net/zxfahjz/archive/2006/04/20/42089.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zxfahjz/comments/commentRss/42089.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zxfahjz/services/trackbacks/42089.html</trackback:ping><description><![CDATA[String realpath = request.getRealPath("/");<br />String realpath = this.servlet.getServletContext().getRealPath("/");<img src ="http://www.blogjava.net/zxfahjz/aggbug/42089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zxfahjz/" target="_blank">zxf</a> 2006-04-20 09:40 <a href="http://www.blogjava.net/zxfahjz/archive/2006/04/20/42089.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts select选择框</title><link>http://www.blogjava.net/zxfahjz/archive/2006/04/19/41829.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Wed, 19 Apr 2006 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/zxfahjz/archive/2006/04/19/41829.html</guid><wfw:comment>http://www.blogjava.net/zxfahjz/comments/41829.html</wfw:comment><comments>http://www.blogjava.net/zxfahjz/archive/2006/04/19/41829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zxfahjz/comments/commentRss/41829.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zxfahjz/services/trackbacks/41829.html</trackback:ping><description><![CDATA[&lt;html:optionsCollection name="xxxActionForm" property="xxxVector"/&gt;<br />xxxActionForm.getXxxVector();xxxActionForm.setXxxVector()<br />Vector xxxVector = new Vector();<br />xxxVector.add(new LabelValueBean(label,value));<img src ="http://www.blogjava.net/zxfahjz/aggbug/41829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zxfahjz/" target="_blank">zxf</a> 2006-04-19 10:33 <a href="http://www.blogjava.net/zxfahjz/archive/2006/04/19/41829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Token机制解决重复重复提交问题</title><link>http://www.blogjava.net/zxfahjz/archive/2006/04/12/40686.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Wed, 12 Apr 2006 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/zxfahjz/archive/2006/04/12/40686.html</guid><wfw:comment>http://www.blogjava.net/zxfahjz/comments/40686.html</wfw:comment><comments>http://www.blogjava.net/zxfahjz/archive/2006/04/12/40686.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zxfahjz/comments/commentRss/40686.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zxfahjz/services/trackbacks/40686.html</trackback:ping><description><![CDATA[
		<div class="postTitle">
				<a class="postTitle2" id="viewpost1_TitleUrl" href="/eamoi/archive/2005/04/18/3395.html">
						<font color="#1a8bc8">利用Token机制解决重复重复提交问题</font>
				</a>
		</div>
		<p>利用Token解决重复重复提交:<br />Struts利用同步令牌(Token)的方式来解决Web应用中重复提交的问题,其机制是在form表单中增加一个隐藏的域,保存当前令牌值,然后在程序中判断此令牌值是否合法.<br />org.apache.struts.action.Action类提供了相关操作Token的方法:<br />1、isTokenValie方法:<br />判断存储在当前用户会话中的令牌值和请求参数中的令牌值是否匹配.如果匹配,返回true,反之返回false.只要符合下列情况之一的,就会返回false:<br />不存在HttpSession对象;<br />在session范围内没有保存令牌值;<br />在请求参数中没有令牌值;<br />存储在当前用户session范围内的令牌值和请求参数中的令牌值不匹配.<br />2、resetToken方法:<br />从当前session范围内删除令牌属性.<br />3、saveToken方法:<br />创建一个新的令牌,并把它保存在当前session范围内.如果HttpSession不存在,就首先创建一个HttpSession对象.<br /><br />如何利用上述方法应用令牌机制解决重复提交问题:<br />以用户注册为例:<br />在用户请求newUser.jsp之前,首先把请求转发到PrepareAction,PrepareAction 调用saveToken方法,创建一个新的令牌,并将令牌值保存在当前HttpSession中(新创建的),PrepareAction接着把请求转发给newUser.jsp.<br /><br />newUser.jsp中的&lt;html:form&gt;标签自动判断在session范围内是否存在Token,如果存在,就自动在表单中生成一个包含Token信息的隐藏字段,例如: <br />&lt;input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="...."&gt;<br /><br />在用户提交表单后,由InsertUserAction处理请求.在InsertUserAction中,调用isTokenValid方法,判断当前用户会话中的令牌值和请求参数中的令牌值是否匹配.如果匹配,就调用resetToken方法,删除Token,然后执行插入数据操作.如果不匹配,返回相关错误提示,进行相关操作.<br /><br />OK.酱紫就可以有效放置重复提交了.<br /><br />如何在不使用Struts的前提下利用令牌机制解决重复提交问题:<br />Struts的令牌机制有几个要点可以让我们在普通的JSP/Servlet中解决重复提交问题.<br />1、提供几个操作Token的相关方法:<br />关键有三个:<br />resetToken(HttpServletRequest request)--&gt;重置令牌值.<br />saveToken(HttpServletRequest request)--&gt;保存令牌值.<br />isTokenValid(HttpServletRequest request)--&gt;检测令牌是否合法.<br /><br />2、在form表单中增加隐藏域,保存当前令牌值.<br /><br />3、在执行持久性数据操作之前调用相关方法判断当前令牌是否合法,之后在进行相关操作.<br /><br />方法是相同的,只是实现的方式不太一样.<br /><br />truts1.1 API关于几个Token操作方法的说明:<br /><br />protected  boolean isTokenValid(javax.servlet.http.HttpServletRequest request) <br />          Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it. <br /><br />protected  boolean isTokenValid(javax.servlet.http.HttpServletRequest request, boolean reset) <br />          Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it. <br /><br />protected  void resetToken(javax.servlet.http.HttpServletRequest request) <br />          Reset the saved transaction token in the user's session. <br /><br />protected  void saveToken(javax.servlet.http.HttpServletRequest request) <br />          Save a new transaction token in the user's current session, creating a new session if necessary.</p>
<img src ="http://www.blogjava.net/zxfahjz/aggbug/40686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zxfahjz/" target="_blank">zxf</a> 2006-04-12 17:05 <a href="http://www.blogjava.net/zxfahjz/archive/2006/04/12/40686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>表单重复提交</title><link>http://www.blogjava.net/zxfahjz/archive/2006/04/11/40490.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Tue, 11 Apr 2006 08:52:00 GMT</pubDate><guid>http://www.blogjava.net/zxfahjz/archive/2006/04/11/40490.html</guid><wfw:comment>http://www.blogjava.net/zxfahjz/comments/40490.html</wfw:comment><comments>http://www.blogjava.net/zxfahjz/archive/2006/04/11/40490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zxfahjz/comments/commentRss/40490.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zxfahjz/services/trackbacks/40490.html</trackback:ping><description><![CDATA[在Action中的add方法中，我们需要将Token值明确的要求保存在页面中，只需增加一条语句：saveToken(request);，如下所示：<br />　　<br />　　public ActionForward add(ActionMapping mapping, ActionForm form,<br />　　<br />　　HttpServletRequest request, HttpServletResponse response)<br />　　<br />　　//前面的处理省略<br />　　<br />　　saveToken(request);<br />　　<br />　　return mapping.findForward("add");<br />　　<br />　　}在Action的insert方法中，我们根据表单中的Token值与服务器端的Token值比较，如下所示：<br />　　<br />　　public ActionForward insert(ActionMapping mapping, ActionForm form,<br />　　<br />　　HttpServletRequest request, HttpServletResponse response)<br />　　<br />　　if (isTokenValid(request, true)) {<br />　　<br />　　// 表单不是重复提交<br />　　<br />　　//这里是保存数据的代码<br />　　<br />　　} else {<br />　　<br />　　//表单重复提交<br />　　<br />　　saveToken(request);<br />　　<br />　　//其它的处理代码<br />　　<br />　　}<br />　　<br />　　}<img src ="http://www.blogjava.net/zxfahjz/aggbug/40490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zxfahjz/" target="_blank">zxf</a> 2006-04-11 16:52 <a href="http://www.blogjava.net/zxfahjz/archive/2006/04/11/40490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>html:messages 标签用法之一</title><link>http://www.blogjava.net/zxfahjz/archive/2006/04/07/39878.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Fri, 07 Apr 2006 09:26:00 GMT</pubDate><guid>http://www.blogjava.net/zxfahjz/archive/2006/04/07/39878.html</guid><wfw:comment>http://www.blogjava.net/zxfahjz/comments/39878.html</wfw:comment><comments>http://www.blogjava.net/zxfahjz/archive/2006/04/07/39878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zxfahjz/comments/commentRss/39878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zxfahjz/services/trackbacks/39878.html</trackback:ping><description><![CDATA[ActionMessages errors = new ActionMessages();<br />errors.add("ExistLoginName",new ActionMessage("admin.user.jsp.existlogin",this.loginName));<br /><br />&lt;html:messages id="ExistLoginName" property="ExistLoginName" message="true"&gt;<br />&lt;script language="javascript" type="text/javascript"&gt;<br />alert("&lt;bean:write name="ExistLoginName"/&gt;");<br />&lt;/script&gt;<br />&lt;/html:messages&gt;<img src ="http://www.blogjava.net/zxfahjz/aggbug/39878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zxfahjz/" target="_blank">zxf</a> 2006-04-07 17:26 <a href="http://www.blogjava.net/zxfahjz/archive/2006/04/07/39878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>