动态FormBean实现文件上传(转)

 

主题: 使用动态的FormBean实现文件上传
开发环境: MyEclipse 5.03
运行环境: Tomcat 5.5.17

步骤:

1. 创建Web项目
uploadDemo,并在WebRoot中创建文件夹photo

2.创建JSP文件: registerUser.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<html:html lang="true">
<head>
    <html:base />
    <title>registerUser.jsp</title>
</head>

<body>
     <html:form action="/user.do?method=register" method="POST" enctype="multipart/form-data">
   userId : <html:text property="userId"/><br/>
   salary : <html:text property="salary"/><br/>
<html:multibox property="hob" value="Computer" />Computer
<html:multibox property="hob" value="Ball" />Ball
<html:multibox property="hob" value="Book" />Book<br>
<html:checkbox property="hob" value="talk">Talk</html:checkbox><br>
<html:file property="file"></html:file>
<br>
   <html:submit/><html:cancel/>
</html:form>
</body>
</html:html>


3. 创建动态FormBean:


<?xml version="1.0" encoding="UTF-8"?>
<!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>
<data-sources />
<form-beans >
    <form-bean name="userForm" type="org.apache.struts.validator.DynaValidatorForm">
      <form-property name="hob" type="java.lang.String[]" />
      <form-property name="userId" type="java.lang.String" />
      <form-property name="file" type="org.apache.struts.upload.FormFile" />
      <form-property name="salary" type="java.lang.Double" />
    </form-bean>
</form-beans>
<global-exceptions />
<global-forwards >
    <forward name="success" path="/success.jsp" />
    <forward name="failed" path="/failed.jsp" />

</global-forwards>

<action-mappings >
    <action
      attribute="userForm"
      input="/registerUser.jsp"
      name="userForm"
      parameter="method"
      path="/user"
      scope="request"
      type="com.sunfengwei.upload.struts.action.UserAction"
      validate="false" />
   
</action-mappings>

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

4. Action类 UserAction

package com.sunfengwei.upload.struts.action;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.upload.FormFile;
import org.apache.struts.util.ModuleException;
import org.apache.struts.validator.DynaValidatorForm;

/**
* MyEclipse Struts
* Creation date: 04-17-2007
*
* XDoclet definition:
* @struts.action path="/user" name="userForm" input="/registerUser.jsp" parameter="method" scope="request" validate="true"
*/
public class UserAction extends DispatchAction {
    /*
    * 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) {
        DynaValidatorForm userForm = (DynaValidatorForm) form;// TODO Auto-generated method stub
        String userId=userForm.getString("userId");
       
        double salary=Double.parseDouble(userForm.get("salary").toString());
        //由于动态FormBean中hob是数组,所以要使用getStrings()
        String []hob=userForm.getStrings("hob");
        
        //根据虚拟路径取服务器上的物理路径
        String dir=servlet.getServletContext().getRealPath("/photo");
       
       
        FormFile file=(FormFile)userForm.get("file");
        InputStream streamIn;
        try {
           streamIn = file.getInputStream();
           OutputStream streamOut=new FileOutputStream(dir+"/"+ userId+".jpg"); //file.getFileName());//
           int bytesRead=0;
           byte[] buffer=new byte[8192];
           while((bytesRead=streamIn.read(buffer,0,8192))!=-1)
           {
            streamOut.write(buffer,0,bytesRead);
           }
           streamOut.close();
           streamIn.close();
        } catch (FileNotFoundException e) {
       
        } catch (IOException e) {
           // TODO Auto-generated catch block
       
        }
        file.destroy();
        //System.out.println(userId);

        /**   此处可以调用相关的JavaBean将用户信息持久化          **/

        //假设上面的代码能够正确执行,在转到目标页是显示一个提示消息,
        ActionMessages msgs=new ActionMessages();
        msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("success.msg"));
        this.saveMessages(request,msgs);
        this.saveErrors(request,msgs);
        return mapping.findForward("success");
    }
}
5. JSP文件: success.jsp

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<html:html lang="true">
<head>
    <html:base />
     </head>

<body>
    This a struts page. <br>
    <html:errors/>
    <hr>
    <html:messages id="m" message="true">
        <bean:write name="m"/>
    </html:messages>
</body>
</html:html>

 

应用于:

http://hi.baidu.com/hhayy7758/blog/item/7dbfd60a756a5f38b1351d93.html

你可能感兴趣的:(html,bean,struts,MyEclipse,buffer,action)