简单的Sturts上传文件实现

开发工具Eclipse3.20+MyEclipse

struts-config.xml内容如下:

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd" >

< struts-config >
  
< data-sources  />
  
< form-beans  >
    
< form-bean  name ="upfileForm"  type ="com.form.UpfileForm"   />
    
  
</ form-beans >

  
< global-exceptions  />
  
< global-forwards  />
  
  
< action-mappings  >
    
< action
      
attribute ="upfileForm"    //不清楚作用??
      input
="/upfile.jsp"
      name
="upfileForm"
      path
="/upfile"
      scope
="request"
      type
="com.action.UpfileAction" >
      
< forward  name ="success"  path ="/upfileSuccess.jsp"   />
      
< forward  name ="failure"  path ="/upfile.jsp"   />
    
</ action >
    

  
</ action-mappings >

  
< message-resources  parameter ="com.ApplicationResources"   />
</ struts-config >

 形成图像如下:

意义如下:
上传成功---------com.action.UpfileFileAction------------------->upfileSuccess.jsp
上传失败----------------------------->upfile.jsp(即返回上传页面)

 其中com.action.UpfileFileAction代码如下:

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 
*/

package  com.action;

import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
import  org.apache.struts.action.Action;
import  org.apache.struts.action.ActionForm;
import  org.apache.struts.action.ActionForward;
import  org.apache.struts.action.ActionMapping;
import  com.form.UpfileForm;

//手动添加包
import  org.apache.struts.upload.FormFile;
import  java.io. * ;

/**
 * MyEclipse Struts Creation date: 05-11-2007
 * 
 * XDoclet definition:
 * 
 * @struts.action path="/upfile" name="upfileForm" input="/upfile.jsp"
 *                scope="request" validate="true"
 
*/

public   class  UpfileAction  extends  Action  {
    
/*
     * Generated Methods
     
*/


    
/**
     * Method execute
     * 
     * 
@param mapping
     * 
@param form
     * 
@param request
     * 
@param response
     * 
@return ActionForward
     
*/

    
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
{

        UpfileForm upfileForm 
= (UpfileForm) form;
        
// TODO Auto-generated
        
//
        FormFile file1 = upfileForm.getTheFile1();// 取得上传的文件
        

        
// 上传
        try {

            
// 文件大小
            String fileSize = Integer.toString(file1.getFileSize()) + "字节";
            upfileForm.setFileSize(fileSize);
            
            
/*
             * 取当前系统路径(其中S_Upfile为当前context)
             
*/

            String filePath 
= this.getServlet().getServletContext()
                    .getRealPath(
"/");
            System.out.print(
"当前系统路径"+filePath);//D:/tomcat5/webapps/S_Upfile
            
            
// 上传文件1
            InputStream stream = file1.getInputStream();// 把文件读入

            
/*
             * 建立一个上传文件的输出流 如果是linux系统请把UploadFiles后的"//"换成"/",应该有更通用的方法,请大家帮忙啊
             
*/

            
//D:/Tomcat5/webapps/S_Upfile/UploadFiles/XX.JPG
            String fileName = filePath + "UploadFiles/" + file1.getFileName();
            upfileForm.setFileName(fileName);
// 这里曾经出现过莫名奇妙的错误,出现“UploadFiles访问被拒绝”

            OutputStream bos 
= new FileOutputStream(fileName);

            
int bytesRead = 0;
            
byte[] buffer = new byte[8192];
            
while ((bytesRead = stream.read(buffer, 08192)) != -1{
                bos.write(buffer, 
0, bytesRead);// 将文件写入服务器
            }

            bos.close();
            stream.close();

        }
 catch (Exception e) {
            System.err.print(e);
// 输出至控制台
            
// throw new RuntimeException(e.getMessage());
            return mapping.findForward("failure");
        }

        
return mapping.findForward("success");

    }


}

上传页面upfile.jsp如下(注意:要有enctype="multipart/form-data" 

<% @ page language="java" pageEncoding="gb2312" %>
<% @ taglib uri="http://jakarta.apache.org/struts/tags-bean"   prefix="bean" %>
<% @ taglib uri="http://jakarta.apache.org/struts/tags-html"    prefix="html" %>

< html >
    
< head >
        
< title > 用Struts上传文件 </ title >
    
</ head >
    
< body >
        
< h1 >
            用Struts上传文件
        
</ h1 >
        
< html:errors  />
        
< html:form  action ="/upfile"  enctype ="multipart/form-data"     method ="post" >
            文件1 : 
< html:file  property ="theFile1"   />
            
< html:errors  property ="theFile1"   />
            
< br  />



            
< html:submit  />
            
< html:cancel  />
        
</ html:form >
    
</ body >
</ html >

与其相关的bean,UpfileForm为:

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 
*/

package  com.form;

import  javax.servlet.http.HttpServletRequest;

import  org.apache.struts.action.ActionForm;
import  org.apache.struts.action.ActionMapping;
//
import  org.apache.struts.action.ActionMessage;
import  org.apache.struts.action.ActionError;
import  org.apache.struts.action.ActionMessages;
import  org.apache.struts.action.ActionErrors;
//
import  org.apache.struts.upload.FormFile;
import  org.apache.struts.upload.MultipartRequestHandler;

/**
 * MyEclipse Struts Creation date: 05-11-2007
 * 
 * XDoclet definition:
 * 
 * @struts.form name="upfileForm"
 
*/

public   class  UpfileForm  extends  ActionForm  {
    
/*
     * Generated fields
     
*/


    
/** theFile1 property */
    
private FormFile theFile1=null;

    
/** theFile2 property */
    

    
private String fileName;// 用来存储上传文件所在的目录
    private String fileSize;

    
/*
     * Generated Methods
     
*/

    
public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) 
{
        
        
// 初始化一个ActionErrors对象        
        ActionErrors errors = new ActionErrors();

        
if(theFile1==null){     //本意是防止未有添加任何文件就上传,但似乎没有用,希望高手来解决
            errors.add(ActionMessages.GLOBAL_MESSAGE, 
new ActionError(
            
"theFile1"));
        }

        
        
//可能是防止路径太深(来源与http://dev.csdn.net/article/50/50395.shtm
        Boolean maxLengthExceeded = (Boolean) request
                .getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);        
        
if ((maxLengthExceeded != null&& (maxLengthExceeded.booleanValue()))
        

             
//向errors添加第1个错误
            errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionError(
                    
"maxLengthExceeded"));
        }

        
//errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionError("error.null"));
        return errors;// 如果errors不为空,Struts框架就会将请求发会页面

    }


    
    
public FormFile getTheFile1() {
        
return theFile1;
    }


    
    
public void setTheFile1(FormFile theFile1) {
        
this.theFile1 = theFile1;
    }


    
    

    
// 这里必须是public否则将会出现“不可视”的错误
    public String getFileName() {
        
return fileName;
    }


    
public void setFileName(String fileName) {
        
this.fileName = fileName;
    }


    
public String getFileSize() {
        
return fileSize;
    }


    
public void setFileSize(String fileSize) {
        
this.fileSize = fileSize;
    }


}

上传成功后转入upfileSuccess.jsp的代码如下:

<% @ page language = " java "  pageEncoding = " gb2312 " %>

<% @ taglib uri = " http://jakarta.apache.org/struts/tags-bean "  prefix = " bean "   %>
<% @ taglib uri = " http://jakarta.apache.org/struts/tags-html "  prefix = " html "   %>
<% @ taglib uri = " http://jakarta.apache.org/struts/tags-logic "  prefix = " logic "   %>
<% @ taglib uri = " http://jakarta.apache.org/struts/tags-tiles "  prefix = " tiles "   %>
<% @ taglib uri = " http://jakarta.apache.org/struts/tags-template "  prefix = " template "   %>
<% @ taglib uri = " http://jakarta.apache.org/struts/tags-nested "  prefix = " nested "   %>

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html:html  locale ="true" >
  
< head >
    
< html:base  />
    
    
< title > 上传成功 </ title >

    
< meta  http-equiv ="pragma"  content ="no-cache" >
    
< meta  http-equiv ="cache-control"  content ="no-cache" >
    
< meta  http-equiv ="expires"  content ="0" >     
    
< meta  http-equiv ="keywords"  content ="keyword1,keyword2,keyword3" >
    
< meta  http-equiv ="description"  content ="This is my page" >
    
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    
-->

  
</ head >
  
  
< body > 文件已被上传至
  
< bean:write  name ="upfileForm"  property ="fileName" />< br >  //upfileForm不要写错,否则会出现“XXXBean不能找到”的错误
  
< bean:write  name ="upfileForm"  property ="fileSize" />< br >
  
</ body >
</ html:html >

 运行情况如下:


成功后界面:

还有资源文件ApplicationResources_zh.properties

theFile1=请选择上传内容<br>      #不知道为何不发挥作用
maxLengthExceeded=The path is too deep

 参考文献:
Struts Web设计与开发大全
Struts编程基础与实例详解
http://dev.csdn.net/article/50/50395.shtm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值