﻿<?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-微蓝领域-文章分类-Struts</title><link>http://www.blogjava.net/hilor/category/25278.html</link><description>我的学习档案馆</description><language>zh-cn</language><lastBuildDate>Sun, 26 Aug 2007 22:25:20 GMT</lastBuildDate><pubDate>Sun, 26 Aug 2007 22:25:20 GMT</pubDate><ttl>60</ttl><item><title>Struts中上传文件-formfile的应用</title><link>http://www.blogjava.net/hilor/articles/139546.html</link><dc:creator>hilor</dc:creator><author>hilor</author><pubDate>Sun, 26 Aug 2007 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/hilor/articles/139546.html</guid><wfw:comment>http://www.blogjava.net/hilor/comments/139546.html</wfw:comment><comments>http://www.blogjava.net/hilor/articles/139546.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hilor/comments/commentRss/139546.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hilor/services/trackbacks/139546.html</trackback:ping><description><![CDATA[今天花了点时间学习了一下struts的commons-fileupload.jar,在网上找了个例子,用MyEclipse重新开发了一个,大约用时两个小时,算是ok了!下面是系统应用的部分代码:<br>UploadsActionAction.java<br><br>&nbsp;&nbsp;</font><font color=#0000aa size=2><em>//Created by MyEclipse Struts</font></em><font color=black size=2><br></font><font color=#0000aa size=2><em>// XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_4.1.1/xslt/JavaClass.xsl</font></em><font color=black size=2><br><br><font color=blue size=2>package</font> struts.action;<br><br><font color=blue size=2>import</font> javax.servlet.http.HttpServletRequest;<br><font color=blue size=2>import</font> javax.servlet.http.HttpServletResponse;<br><br><font color=blue size=2>import</font> org.apache.struts.action.Action;<br><font color=blue size=2>import</font> org.apache.struts.action.ActionForm;<br><font color=blue size=2>import</font> org.apache.struts.action.ActionForward;<br><font color=blue size=2>import</font> org.apache.struts.action.ActionMapping;<br><br><font color=blue size=2>import</font> struts.form.UploadsActionForm;<br><font color=blue size=2>import</font> org.apache.struts.upload.FormFile;<br><font color=blue size=2>import</font> java.io.*;<br></font><font color=#0000aa size=2><em>/** <br>* MyEclipse Struts<br>* Creation date: 06-11-2006<br>* <br>* XDoclet definition:<br>* @struts.action path="/uploadsAction" name="uploadsActionForm" input="/form/uploadsAction.jsp" scope="request" validate="true"<br>*/</font></em><font color=black size=2><br><font color=blue size=2>public</font> <font color=blue size=2>class</font> UploadsActionAction <font color=blue size=2>extends</font> Action {<br><br></font><font color=#0000aa size=2><em>// --------------------------------------------------------- Instance Variables</font></em><font color=black size=2><br><br></font><font color=#0000aa size=2><em>// --------------------------------------------------------- Methods</font></em><font color=black size=2><br><br></font><font color=#0000aa size=2><em>/** <br>* Method execute<br>* @param mapping<br>* @param form<br>* @param request<br>* @param response<br>* @return ActionForward<br>*/</font></em><font color=black size=2><br></font><font color=#0000aa size=2><em>//UploadsActionForm uploadsActionForm = (UploadsActionForm) form;</font></em><font color=black size=2><br><font color=blue size=2>public</font> ActionForward execute(ActionMapping mapping,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionForm form,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest request,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse response)<br><font color=red size=2>throws</font> Exception {<br><br><font color=red size=2>String</font> encoding = request.getCharacterEncoding();<br><font color=blue size=2>if</font> ((encoding != <font color=blue size=2>null</font>) &amp;&amp; (encoding.equalsIgnoreCase(</font><font color=#00bb00 size=2>"utf-8"</font><font color=black size=2>)))<br>{<br>response.setContentType(</font><font color=#00bb00 size=2>"text/html; charset=gb2312"</font><font color=black size=2>);</font><font color=#0000aa size=2><em>//如果没有指定编码，编码格式为gb2312</font></em><font color=black size=2><br>}<br>UploadsActionForm theForm = (UploadsActionForm ) form;<br>FormFile file = theForm.getFiles();</font><font color=#0000aa size=2><em>//取得上传的文件</font></em><font color=black size=2><br><font color=blue size=2>try</font> {<br>InputStream stream = file.getInputStream();</font><font color=#0000aa size=2><em>//把文件读入</font></em><font color=black size=2><br><font color=red size=2>String</font> filePath = request.getRealPath(</font><font color=#00bb00 size=2>"/upload"</font><font color=black size=2>);</font><font color=#0000aa size=2><em>//上传到指定的upload包中</font></em><font color=black size=2><br>ByteArrayOutputStream baos = <font color=blue size=2>new</font> ByteArrayOutputStream();<br>OutputStream bos = <font color=blue size=2>new</font> FileOutputStream(filePath + </font><font color=#00bb00 size=2>"/"</font><font color=black size=2> +<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file.getFileName());</font><font color=#0000aa size=2><em>//建立一个上传文件的输出流</font></em><font color=black size=2><br></font><font color=#0000aa size=2><em>//System.out.println(filePath+"/"+file.getFileName());</font></em><font color=black size=2><br><font color=blue size=2>int</font> bytesRead = 0;<br>byte[] buffer = <font color=blue size=2>new</font> byte[8192];<br><font color=blue size=2>while</font> ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) {<br>bos.write(buffer, 0, bytesRead);</font><font color=#0000aa size=2><em>//将文件写入服务器</font></em><font color=black size=2><br>}<br>bos.close();<br>stream.close();<br>}<font color=blue size=2>catch</font>(Exception e){<br>System.err.print(e);<br>}<br></font><font color=#0000aa size=2><em>//request.setAttribute("dat",file.getFileName());</font></em><font color=black size=2><br><font color=blue size=2>return</font> mapping.findForward(</font><font color=#00bb00 size=2>"display"</font><font color=black size=2>);<br><br>}<br><br>}<br><br>UploadsActionForm.java<br><br></font><font color=#0000aa size=2><em>//Created by MyEclipse Struts</font></em><font color=black size=2><br></font><font color=#0000aa size=2><em>// XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_4.1.1/xslt/JavaClass.xsl</font></em><font color=black size=2><br><br><font color=blue size=2>package</font> struts.form;<br><br><font color=blue size=2>import</font> org.apache.struts.action.ActionForm;<br><font color=blue size=2>import</font> org.apache.struts.upload.FormFile;<br><br></font><font color=#0000aa size=2><em>/** <br>* MyEclipse Struts<br>* Creation date: 06-11-2006<br>* <br>* XDoclet definition:<br>* @struts.form name="uploadsActionForm"<br>*/</font></em><font color=black size=2><br><font color=blue size=2>public</font> <font color=blue size=2>class</font> UploadsActionForm <font color=blue size=2>extends</font> ActionForm {<br>&nbsp;&nbsp;</font><font color=#0000aa size=2><em>//public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED = "org.apache.struts.webapp.upload.MaxLengthExceeded";</font></em><font color=black size=2><br><br></font><font color=#0000aa size=2><em>// --------------------------------------------------------- Instance Variables</font></em><font color=black size=2><br><br></font><font color=#0000aa size=2><em>/** theFile property */</font></em><font color=black size=2><br><font color=blue size=2>protected</font> FormFile files;<br><br></font><font color=#0000aa size=2><em>// --------------------------------------------------------- </font></em><font color=black size=2><br><br></font><font color=#0000aa size=2><em>/** <br>* Returns files.<br>* @return FormFile<br>*/</font></em><font color=black size=2><br><font color=blue size=2>public</font> FormFile getFiles() {<br><font color=blue size=2>return</font> files;<br>}<br><br></font><font color=#0000aa size=2><em>/** <br>* Set the files.<br>* @param files The files to set<br>*/</font></em><font color=black size=2><br><font color=blue size=2>public</font> <font color=blue size=2>void</font> setFiles(FormFile file) {<br><font color=blue size=2>this</font>.files = file;<br>}<br><br>}<br><br>上传用的页面:uploadFile.jsp<br><br>&lt;%@ page language=</font><font color=#00bb00 size=2>"java"</font><font color=black size=2>%&gt;<br>&lt;%@ taglib uri=</font><font color=#00bb00 size=2>"/WEB-INF/struts-html.tld"</font><font color=black size=2> prefix=</font><font color=#00bb00 size=2>"html"</font><font color=black size=2>%&gt;<br><br>&lt;html&gt; <br>&lt;head&gt;<br>&lt;title&gt;JSP <font color=blue size=2>for</font> uploadsActionForm <font color=blue size=2>for</font>m&lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;html:form action=</font><font color=#00bb00 size=2>"/uploadsAction"</font><font color=black size=2> enctype=</font><font color=#00bb00 size=2>"multipart/form-data"</font><font color=black size=2>&gt; &lt;1&gt;<br>theFile : &lt;html:file property=</font><font color=#00bb00 size=2>"files"</font><font color=black size=2>/&gt;&lt;br/&gt;<br>&lt;html:submit/&gt;&lt;html:cancel/&gt;<br>&lt;/html:form&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br>刚开始&lt;1&gt;处落下了</font><font color=#00bb00 size=2>"enctype="</font><font color=black size=2>multipart/form-data</font><font color=#00bb00 size=2>" 费了我不少时间才搞定<br>--------------------------------------------------------------------------------------------------------------<br><br><br><br><font color=#000000 size=3>FormBean:<br>package onlyfun.caterpillar; <br><br>import javax.servlet.http.*; <br>import org.apache.struts.action.*; <br>import org.apache.struts.upload.*; <br><br>public class UploadForm extends ActionForm { <br>private FormFile file; <br><br>public void setFile(FormFile file) { <br>this.file = file; <br>} <br><br>public FormFile getFile() { <br>return file; <br>} <br><br>public void reset(ActionMapping mapping, HttpServletRequest req) { <br>file = null; <br>} <br>}<br><br>JSP:<br>&lt;html:form action="/Upload" method="post" enctype="multipart/form-data"&gt; <br>選擇檔案:&lt;html:file property="file" /&gt; <br>&lt;html:submit&gt;上傳&lt;/html:submit&gt; <br>&lt;/html:form&gt;<br><br>Action:<br>package onlyfun.caterpillar; <br><br>import java.io.*; <br>import javax.servlet.http.*; <br>import org.apache.struts.action.*; <br>import org.apache.struts.upload.*; <br><br>public class UploadAction extends Action { <br>public ActionForward execute(ActionMapping mapping, <br>ActionForm form, <br>HttpServletRequest request, <br>HttpServletResponse response) <br>throws Exception { <br>UploadForm fileForm = (UploadForm) form; <br>FormFile file = fileForm.getFile(); <br>FileOutputStream fileOutput = new FileOutputStream("/home/caterpillar/files/" + file.getFileName()); <br><br>fileOutput.write(file.getFileData()); <br>fileOutput.flush(); <br>fileOutput.close(); <br><br>return mapping.findForward("success"); <br>} <br>}</font><br><br><br>
<script src="http://sc.qihoo.com/ad_bcast/spider_search_zhongxin.js?ID=7730&amp;site=bbs1.softhouse.com.cn&amp;type=topic&amp;title=Re: [struts]如何生成Formfile对象?&amp;key=fc1f900cfd735ad459d3cd438106e180&amp;page_code=gb2312&amp;m=161072&amp;p=2002&amp;a=3001"></script>
<br><br></font>
<img src ="http://www.blogjava.net/hilor/aggbug/139546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hilor/" target="_blank">hilor</a> 2007-08-26 18:26 <a href="http://www.blogjava.net/hilor/articles/139546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Struts里提交中文表单到ActionForm后的乱码问题</title><link>http://www.blogjava.net/hilor/articles/139442.html</link><dc:creator>hilor</dc:creator><author>hilor</author><pubDate>Sun, 26 Aug 2007 04:33:00 GMT</pubDate><guid>http://www.blogjava.net/hilor/articles/139442.html</guid><wfw:comment>http://www.blogjava.net/hilor/comments/139442.html</wfw:comment><comments>http://www.blogjava.net/hilor/articles/139442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hilor/comments/commentRss/139442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hilor/services/trackbacks/139442.html</trackback:ping><description><![CDATA[<div class=postTitle>由于Struts框架直接把表单数据发送给了ActionForm，所以这里面没有对HttpRequestServlet进行SetCharacterEncoding,所以默认是按照ISO-8859-1(参见Tomcat 源代码中的org.apache.catalina.connector.HttpRequestBase中的protected void parseParameters()方法)，</div>
<div class=postText>
<p>解决的方法，就是在表单提交到ActionForm之前对request进行编码。<br>第一种方法，就是写一个过滤器，对所有请求进行过滤<br></p>
<hr>
过滤器代码：<br>package jp.co.ricoh.gtis.others.profile.filters;
<p>&nbsp;</p>
<p>import java.io.IOException;</p>
<p>import javax.servlet.Filter;<br>import javax.servlet.FilterChain;<br>import javax.servlet.FilterConfig;<br>import javax.servlet.ServletException;<br>import javax.servlet.ServletRequest;<br>import javax.servlet.ServletResponse;</p>
<p>public class SetCharacterEncodingFilter implements Filter {<br>&nbsp;private String encoding;<br>&nbsp;public void init(FilterConfig filterConfig) throws ServletException {<br>&nbsp;&nbsp;// TODO Auto-generated method stub<br>&nbsp;&nbsp;this.encoding=filterConfig.getInitParameter("encoding");<br>&nbsp;}</p>
<p>&nbsp;public void doFilter(ServletRequest request, ServletResponse response,<br>&nbsp;&nbsp;&nbsp;FilterChain chain) throws IOException, ServletException {<br>&nbsp;&nbsp;// TODO Auto-generated method stub<br>&nbsp;&nbsp;request.setCharacterEncoding(this.encoding);<br>&nbsp;&nbsp;chain.doFilter(request,response);<br>&nbsp;}</p>
<p>&nbsp;public void destroy() {<br>&nbsp;&nbsp;// TODO Auto-generated method stub</p>
<p>&nbsp;}</p>
<p>}<br></p>
<hr>
<p>&nbsp;</p>
<p>配置文件web.xml<br>&nbsp; &lt;filter&gt;<br>&nbsp;&nbsp; &lt;filter-name&gt;SetCharacterEncodingFilter&lt;/filter-name&gt;<br>&nbsp;&nbsp; &lt;filter-class&gt;jp.co.ricoh.gtis.others.profile.filters.SetCharacterEncodingFilter&lt;/filter-class&gt;<br>&nbsp;&nbsp; &lt;init-param&gt;<br>&nbsp;&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;param-value&gt;UTF-8&lt;/param-value&gt;<br>&nbsp;&nbsp; &lt;/init-param&gt;<br>&nbsp; &lt;/filter&gt;<br><br>&nbsp;&nbsp; &lt;filter-mapping&gt;<br>&nbsp;&nbsp; &lt;filter-name&gt;SetCharacterEncodingFilter&lt;/filter-name&gt;<br>&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&nbsp; <br>&nbsp; &lt;/filter-mapping&gt;<br></p>
<hr>
<p>&nbsp;</p>
<p>第二种方法是替换默认的控制器org.apache.struts.action.ActionServlet</p>
<p>&nbsp;</p>
<hr>
子类代码：<br>package jp.co.ricoh.gtis.others.profile.controllers;
<p>&nbsp;</p>
<p>import java.io.IOException;</p>
<p>import javax.servlet.ServletException;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;</p>
<p>import org.apache.struts.action.ActionServlet;</p>
<p>public class SetEncodingActionServlet extends ActionServlet {</p>
<p>&nbsp;protected void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {<br>&nbsp;&nbsp;// TODO Auto-generated method stub<br>&nbsp;&nbsp;String encoding = getInitParameter("encoding");<br>&nbsp;&nbsp;request.setCharacterEncoding(encoding);<br>&nbsp;&nbsp;super.process(request, response);<br>&nbsp;}</p>
<p>}<br></p>
<hr>
<p>&nbsp;</p>
<p>配置文件web.xml<br>&nbsp; &lt;servlet&gt;<br>&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;testAction&lt;/servlet-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;jp.co.ricoh.gtis.others.profile.controllers.SetEncodingActionServlet&lt;/servlet-class&gt;<br>&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br>&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;UTF-8&lt;/param-value&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br>&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br>&nbsp; &lt;/servlet&gt;<br><br>&nbsp; &lt;servlet-mapping&gt;<br>&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;testAction&lt;/servlet-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.testdo&lt;/url-pattern&gt;<br>&nbsp; &lt;/servlet-mapping&gt;<br><br>此例，凡是通过*.testdo来请求的数据，都会经过参数encoding设定的值来编码。</p>
</div>
<img src ="http://www.blogjava.net/hilor/aggbug/139442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hilor/" target="_blank">hilor</a> 2007-08-26 12:33 <a href="http://www.blogjava.net/hilor/articles/139442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>