`

偶遇struts1.2文件上传

阅读更多

原文地址:http://www.java3z.com/cwbwebhome/article/article1a/168.html

 

这是学struts1.2.4自带的例子。所有文件及目录结构请在本站下载。


一、web.xml配置,这里将文件上传配置为upload模块。

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
 <display-name>Struts Blank Application</display-name>
  
  <!-- Standard Action Servlet Configuration (with debugging) -->
  <servlet>
    <servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>config/upload</param-name>
    <param-value>/WEB-INF/upload/struts-config.xml</param-value>
    </init-param>
<script type="text/javascript">&lt;!-- google_ad_client = &quot;pub-1832179689702023&quot;; google_ad_width = 336; google_ad_height = 280; google_ad_format = &quot;336x280_as&quot;; google_ad_type = &quot;text_image&quot;; //2007-01-10: 336_280 google_ad_channel = &quot;7111701428&quot;; google_color_border = &quot;FFFFFF&quot;; google_color_bg = &quot;FFFFFF&quot;; google_color_link = &quot;0000FF&quot;; google_color_text = &quot;000000&quot;; google_color_url = &quot;3D81EE&quot;; //--&gt;</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script><script>google_protectAndRun(&quot;ads_core.google_render_ad&quot;, google_handleError, google_render_ad);</script>


    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>


  <!-- Standard Action Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>


  <!-- The Usual Welcome File List -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>


  <!-- Struts Tag Library Descriptors -->
  <taglib>
    <taglib-uri>/tags/struts-bean</taglib-uri>
    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-html</taglib-uri>
    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-logic</taglib-uri>
    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-nested</taglib-uri>
    <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-tiles</taglib-uri>
    <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
  </taglib>

</web-app>

--------------------------------------------------------------------------------

二、struts-config.xml配置和资源文件

--------------------------------------------------------------------------------
<?xml version="1.0" encoding="iso-8859-1"?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
  <form-beans>
    <form-bean name="uploadForm" type="org.apache.struts.webapp.upload.UpLoadForm" />
  </form-beans>
  <action-mappings>
    <action path="/upload" forward="/selfile.jsp" />
    <!-- Upload Action -->
    <action path="/uploadsAction" 
            type="org.apache.struts.webapp.upload.UpLoadAction"   
            name="uploadForm" scope="request" input="input">
      <forward name="input" path="/selfile.jsp" />
      <forward name="display" path="/display.jsp" />
    </action>
  </action-mappings>
  <!-- 这里设置上传文件的最大值。 -1 不限制大小。缺省值:-1 -->
  <controller maxFileSize="2M" inputForward="true" />
  <message-resources parameter="org.apache.struts.webapp.upload.UploadResources"/>

</struts-config>

  资源文件:UploadResources_zh_CN.properties
maxLengthExceeded=已经超过了上传文件所允许的最大值。
maxLengthExplanation=注意:这个应用程序允许上传文件的最大值是2M。请看"/WEB-INF/upload/struts-config.xml" 文件更改这个值。

三、选择上传文件页面:selfile.jsp,如此访问此页面:
<html:link module="/upload" page="/upload.do"> 继续上传</html:link></h2>

--------------------------------------------------------------------------------
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="org.apache.struts.action.*,
                 java.util.Iterator,
                 org.apache.struts.Globals" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<logic:messagesPresent>
   <ul>
   <html:messages id="error">
      <li><bean:write name="error"/></li>
   </html:messages>
   </ul><hr />
</logic:messagesPresent>
<html:html>

<html:form action="uploadsAction.do" enctype="multipart/form-data">
<html:file property="theFile"/>
<html:submit/>
</html:form>
</html:html>

--------------------------------------------------------------------------------

四、表单bean:  UpLoadForm.java

--------------------------------------------------------------------------------
package org.apache.struts.webapp.upload;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;
import org.apache.struts.upload.*;

/**
 * <p>Title:UpLoadForm</p>
 * <p>Description: QRRSMMS </p>
 * <p>Copyright: Copyright (c) 2004 jiahansoft</p>
 * <p>Company: jiahansoft</p>
 * @author wanghw
 * @version 1.0
 */

public class UpLoadForm extends ActionForm {
  public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED = "org.apache.struts.webapp.upload.MaxLengthExceeded";
  protected FormFile theFile;
  public FormFile getTheFile() {
      return theFile;
  }
  public void setTheFile(FormFile theFile) {
      this.theFile = theFile;
  }
   public ActionErrors validate(
        ActionMapping mapping,
        HttpServletRequest request) {
            
        ActionErrors errors = null;
        //has the maximum length been exceeded?
        Boolean maxLengthExceeded =
            (Boolean) request.getAttribute(
                MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
                
        if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) {
            errors = new ActionErrors();
            errors.add(
                ActionMessages.GLOBAL_MESSAGE ,
                new ActionMessage("maxLengthExceeded"));
            errors.add(
                ActionMessages.GLOBAL_MESSAGE ,
                new ActionMessage("maxLengthExplanation"));
        }
        return errors;

    }

}


--------------------------------------------------------------------------------
五、处理上传的文件:UpLoadAction.java 
--------------------------------------------------------------------------------
package org.apache.struts.webapp.upload;
import java.io.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile; 

/**
 * <p>Title:UpLoadAction</p>
 * <p>Description: QRRSMMS </p>
 * <p>Copyright: Copyright (c) 2004 jiahansoft</p>
 * <p>Company: jiahansoft</p>
 * @author wanghw
 * @version 1.0
 */

public class UpLoadAction extends Action {
  public ActionForward execute(ActionMapping mapping,
                               ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response)
      throws Exception {
       if (form instanceof UpLoadForm) {//如果form是UpLoadsForm
           String encoding = request.getCharacterEncoding();

       if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8")))
        {
            response.setContentType("text/html; charset=gb2312");
        }
        UpLoadForm theForm = (UpLoadForm ) form;
        FormFile file = theForm.getTheFile();//取得上传的文件
        String contentType = file.getContentType();

        String size = (file.getFileSize() + " bytes");//文件大小
        String fileName= file.getFileName();//文件名
        try {
          InputStream stream = file.getInputStream();//把文件读入
          String filePath = request.getRealPath("/");//取当前系统路径
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          OutputStream bos = new FileOutputStream(filePath + "/" +
                                                  file.getFileName());
              //建立一个上传文件的输出流,将上传文件存入web应用的根目录。
          //System.out.println(filePath+"/"+file.getFileName());
          int bytesRead = 0;
          byte[] buffer = new byte[8192];
          while ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) {
            bos.write(buffer, 0, bytesRead);//将文件写入服务器
          }
          bos.close();
          stream.close();
        }catch(Exception e){
          System.err.print(e);
        }
        //request.setAttribute("dat",file.getFileName());
         request.setAttribute("contentType", contentType);
         request.setAttribute("size", size);
         request.setAttribute("fileName", fileName);

        return mapping.findForward("display");
    }
    return null;
  }
}
------------------------------------------------------------------------------------------

五、成功页display.jsp 
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="org.apache.struts.action.*,
                 java.util.Iterator,
                 org.apache.struts.Globals" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>


上传成功!上传信息如下:
<p>
<b>The File name:</b> <%= request.getAttribute("fileName") %>
</p>
<p>
<b>The File content type:</b> <%= request.getAttribute("contentType") %>
</p>
<p>
<b>The File size:</b> <%= request.getAttribute("size") %>
</p>
<hr />
<hr />
<html:link module="/upload" page="/upload.do"> 继续上传</html:link></h2>
 六、测试
 从本站下载整个目录结构TestStruts并放入tomcat的webapps目录下,在浏览器中输入:
http://127.0.0.1:8080/TestStruts/upload/upload.do

分享到:
评论

相关推荐

    文件生成工具,可生成大小、个数、内容随机的文件

    【文件生成工具】是一种实用程序,它允许用户创建指定大小和数量的文件,这些文件的内容是随机生成的字符串,而且确保在每个文件中都是唯一的。这个工具基于【Qt】框架和【C++】编程语言构建,它展示了这两种技术在...

    教育教学设计偶遇修班级的标准与发展途径.pdf-文档整理可

    【描述解析】:“教育教学设计偶遇修班级的标准与发展途径.pdf_文档整理可打印.zip”描述指出这是一个压缩文件,包含一个PDF文档,该文档经过整理,适合打印。这表明文档可能包含详细的理论分析、实例探讨或实践指南...

    初中语文文摘生活那些偶遇如此温暖

    这篇文章通过三个小故事,展现了生活中平凡而温暖的偶遇。第一个故事讲述了作者在幼儿园外等待女儿时,遇到一对农村老年夫妇在城里闲逛,老头耐心地为老伴解说,体现出夫妻间的温情与体贴。第二个故事是关于一位园艺...

    偶遇,徐志摩精选.doc

    2. 文学创作:徐志摩的诗歌风格唯美,情感深邃,如《偶遇》中的情感表达,展现了诗人对爱情的深刻理解。他的作品如《那一世》体现了对爱的执着和对人生的哲思。 3. 仓央嘉措:仓央嘉措是另一位著名诗人,他的诗作...

    一个好用的jquery多图片上传插件

    swfupload是比较著名的图片上传工具,可以多图片上传,在一次开发中偶遇uploadify,比swfupload还强大好用,选项也很丰富,功能也很强大,再配合ajax技术,可以把多图片上传发挥到极致,我曾用它做多图片上传,上传...

    当51单片机偶遇PPU

    当你想用51MCU做一台游戏机,你可能会想到FC。是的FC的图形芯片,用51完全可以连接上,资料中还包含了FC的完整原理图。51独有的并口时序,正好可以利用上,PPU也是用并口的。这里说的PPU,指FC用的图形处理器,国内...

    计划外的偶遇皇帝成长计划2安卓.doc

    6. 《一般》摄影集:江玥的摄影作品集《一般》展现了她对偶遇和日常瞬间的捕捉,设计简洁,通过24张照片传达了生活的具体和诗意。 7. 摄影理念:江玥认为摄影是一种减法艺术,能瞬间定格感觉,她喜欢自然、无修饰的...

    Qt基于http的全量升级程序,自动下载安装

    在提供的“TestForAutoUpdate”文件中,可能包含了实现上述功能的代码示例,包括网络请求、文件操作以及进程管理的细节。通过分析和学习这些代码,开发者可以更好地理解如何在实际项目中实施Qt的自动升级功能。 ...

    四次bezier曲线(直接法、分裂法、几何法)

    在"Draw1127"这个文件中,可能包含了用C++编写的一个MFC应用程序,用于演示如何绘制和操作四次Bezier曲线。这个程序可能涵盖了以上所述的直接法、分裂法和几何法,通过交互式的用户界面,用户可以直观地看到不同方法...

    基于quazip源码的压缩/解压Qt案例,实现了压缩及解压进度显示

    quazip下载不了,或者zip.lib无法下载,这里可以完美解决你的问题,此工程包含quazip、zip.c与unzip.c源码,此源码可以编译成lib库,也可以直接使用,基于quazip,新增了压缩与解压进度显示,Qt5.6.3+MSVC2013的demo...

    西厢记--------------------------.pdf

    很抱歉,您提供的文件内容为大量的感叹号和特殊字符,并没有实质性的文字内容。这使得无法从中提取出任何关于《西厢记》的知识点或相关信息。《西厢记》,又名《崔莺莺待月西厢记》,是元代王实甫创作的一部杂剧,...

    dtn.rar_Non real time dtn_dtn_延迟容忍网络_非实时

    在实际应用中,DTN通常会结合一些节能策略,比如机会路由(Opportunistic Routing),这种策略利用节点偶遇的机会进行数据交换,避免无效的能源消耗。同时,DTN还可以通过预测算法来优化存储和转发决策,减少不必要...

    我们还是好朋友.pdf

    6. **虚拟与现实的交融**:文档中的“再次偶遇”和“相聚”的场景,提示我们思考虚拟世界与现实生活的界限。在数字化社会,人们在网络中建立的联系可能会影响他们在现实生活中的交往模式。 7. **信息时代的伪装与...

    WebSec 1.0 For Php

    如果网站被挂马,WebSe可以自动恢复网站(恢复原理:安装时会又一次网站代码备份,挂马时解压这个备份并覆盖挂马文件)。 详尽的使用方法已经打包在程序里了。基本上一路下一步就行了。 本程序通过织梦,PHPwind等...

    基于java的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip

    生成的jar文件在\out\artifacts\PdfAutoRenameTools_jar\目录下,使用方法是: java -jar PdfAutoRenameTools.jar 目录名 注意需要Java环境的版本要至少是14,以下是我当前用的java版本信息: java version ...

    全能五笔 v2.2

    一款完全免费的软件,在不修改本软件中所有程序文件、说明文件等组件的前提下,您可以将它的拷贝任意分发、共享、传播、推荐给你的朋友使用。1、支持左SHIFT键进行中英文切换。可选择设置为右SHIFT键切换中英文。 2...

    [遗失的爱情美文摘抄]-摘抄师生之情美文.docx

    这篇文档实际上并不是关于IT行业的,而是关于情感表达和生活哲理的美文摘抄,主要描述了一段发生在月明沙滩上的师生之间的偶遇和对话,主题围绕着失恋、遗忘和重新开始。不过,我们可以尝试从中挖掘一些与IT行业相关...

    批量修改文件名后缀,并批量将本地图片保存到word中

    近日,偶遇某网站,寻得踪迹。不料,图以“.pdg”格式存在,遂写以代码,批量改得文件后缀,称只“.png”,此乃图片格式。俄而,又遇新问题,何以图片存于word,学须臾,著代码。 1、批量修改文件后缀 1)文件的原始...

Global site tag (gtag.js) - Google Analytics