Struts2多文件上傳,比較簡(jiǎn)單的思想是,在Action中,通過依賴注入獲取上傳文件的相關(guān)屬性,再用 文件輸入流和文件輸出流來把文件存在服務(wù)器相關(guān)路徑中。當(dāng)然,由于是多文件上傳,文件的相關(guān)屬性是用數(shù)組或List來定義的。下面我給個(gè)用數(shù)組做多文件上傳的例子。
  (1)Struts2文件上傳首先是視圖層,用JSP。
頁面文件為: 
 upload.jsp< %@ page contentType="text/html;charset=gb2312" %> < A href="mailto:%@taglib">%@taglib< /A> prefix="s" uri="/struts-tags"%> < HTML xhtml? 1999 www.w3.org http: xmlns="< A href=">http://www.w3.org/1999/xhtml< /A>"> < HEAD>
 
 
 
  < ?xml:namespace prefix = s />< s:fielderror>< /s:fielderror>
 
  < FORM encType=multipart/form-data method=post action=upload.action> 文件標(biāo)題< INPUT name=title>
          第一個(gè)上傳文件:< INPUT type=file name=upload>
             第二個(gè)上傳文件:< INPUT type=file name=upload>
             第三個(gè)上傳文件:< I name="upload" type="file" NPUT>
  < INPUT value=上傳 type=submit> < /FORM>  | 
(2)控制器Action
package com.wing.study.upload;
import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.ServletActionContext; import java.io.File; import java.io.FileOutputStream; import java.io.FileInputStream; public class UploadAction extends ActionSupport {    private String title;    private File[] upload;    private String[] uploadContentType;    private String[] uploadFileName;    private String savePath;    public void setSavePath(String value)    {     this.savePath=value;    }    public String getSavePath()    {     return ServletActionContext.getRequest().getRealPath(savePath);    }    public void setUpload(File[] upload)    {     this.upload=upload;    }    public File[] getUpload()    {     return upload;    }    public void setTitle(String title)    {     this.title=title;    }    public String getTitle()    {     return title;    }    public void setUploadContentType(String[] uploadContentType)    {     this.uploadContentType=uploadContentType;    }    public String[] getUploadContentType()    {     return (this.uploadContentType);    }    public void setUploadFileName(String[] uploadFileName)    {     this.uploadFileName=uploadFileName;    }    public String[] getUploadFileName()    {     return (this.uploadFileName);    }    public String execute() throws Exception {     for(int i=0;i    {     FileOutputStream fos = new FileOutputStream(getSavePath()  + "\\" + getUploadFileName()[i]);    FileInputStream fis = new FileInputStream(getUpload()[i]);    byte[] buffer = new byte[1024];    int len = 0;    while ((len = fis.read(buffer)) > 0)    {     fos.write(buffer , 0 , len);    }     }        return SUCCESS; } }   | 
 
(3)struts.xml配置文件
這里需要控制文件類型和大小。也就是上傳文件過濾。
我在這里不采用手動(dòng)過濾,因?yàn)槭謩?dòng)過濾要書寫大量過濾代碼,開發(fā)復(fù)雜。
所以這里用上傳文件攔截器來控制。
< ?xml version="1.0" encoding="UTF-8"?>
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     "< A > 
< STRUTS>     < CONSTANT value="globalMessages" name="struts.custom.i18n.resources" /> < CONSTANT value="GBK" name="struts.i18n.encoding" /> 
< PACKAGE name="com" extends="struts-default"> 
   < ACTION class=com.wing.study.upload.UploadAction name="upload">    < INTERCEPTOR-REF name="fileUpload">     < PARAM name="allowedTypes">image/bmp,image/jpeg,image/gif,image/png< /PARAM>     < PARAM name="maximumSize">202400< /PARAM>     < /INTERCEPTOR-REF>     < INTERCEPTOR-REF name="defaultStack" />             < PARAM name="savePath">/upload< /PARAM>              < RESULT name="input">/upload.jsp< /RESULT>             < RESULT>/succ.jsp< /RESULT>     < /ACTION>   < /PACKAGE> < /STRUTS>   | 
注意 使用了上傳文件攔截器,必須顯示的調(diào)用默認(rèn)攔截器棧:defaultStack.
allowedTypes和maximumSize分別過濾文件的類型和大小。
當(dāng)上傳文件不符合定義的要求時(shí),會(huì)轉(zhuǎn)向邏輯視圖input,然后根據(jù)映射轉(zhuǎn)向物理視圖upload.jsp
然后根據(jù)Struts2標(biāo)簽s:fielderror輸出錯(cuò)誤信息。當(dāng)然這里的錯(cuò)誤信息你可能不知道是什么。不過可以在國(guó)際化資源中將錯(cuò)誤信息用中文替代。
當(dāng)上傳文件符合定義的要求時(shí),會(huì)轉(zhuǎn)向succ.jsp
這里給出succ.jsp代碼。
< %@ page language="java" contentType="text/html; charset=GBK"%> << A href="mailto:%@taglib">%@taglib< /A> prefix="s" uri="/struts-tags"%> < HTML>                                 上傳成功!
     文件標(biāo)題:< ?xml:namespace prefix = s />< s:property value=" + title">< /s:property>
                      第一個(gè)文件為: "/>
                       第二個(gè)文件為: "/>
                       第三個(gè)文件為: "/>
      
   | 
上傳成功后,會(huì)依次顯示你上傳的圖片。通過s:property標(biāo)簽來獲取圖片地址。
由上面可以看出,通過Struts2來實(shí)現(xiàn)文件的上傳甚至是多文件上傳,并不難。
 
PS:我做的手機(jī)帶BOSS射擊類游戲,目前已經(jīng)制作了240*320和128*160分辨率的。沒辦法,開發(fā)模擬器很少能找到128*160分辨率的,所以我先做的240*320的 然后給朋友測(cè)試。但是我的手機(jī)又是128*160分辨率的,不能在自己手機(jī)上用還是很不樂意的。。所以又用手機(jī)測(cè)試開發(fā)的128*160分辨率。
另外關(guān)于RPG游戲的戰(zhàn)斗系統(tǒng)和人物菜單系統(tǒng)基本完成。等我把對(duì)話系統(tǒng)弄好,就開始開發(fā)RPG游戲。
不久前用Swing做了一個(gè)類QQ聊天工具的客戶端和服務(wù)器端。在同學(xué)那里測(cè)試可以聊天。但是還是未完成版的。
還做了個(gè)簡(jiǎn)單的虛擬桌面,也是Swing做的,集成了我開發(fā)的一些小軟件在里面。
有人可能會(huì)覺得奇怪,為什么我會(huì)花時(shí)間做JAVA桌面應(yīng)用。
我只是不想像某些JAVA程序員一樣,聽說JAVA桌面不行,便不去學(xué)習(xí)。這也是我對(duì)中國(guó)程序員感到的一絲悲哀。你說JAVA不能開發(fā)游戲,但是偏偏國(guó)外就有那么多JAVA 3D的網(wǎng)絡(luò)游戲,并且在運(yùn)營(yíng)中。
每當(dāng)我聽見他們說不用學(xué)這個(gè)不用學(xué)那個(gè),就有點(diǎn)憤怒。也許正像大家說的,沒有最好的計(jì)算機(jī)語言,只有最好的程序員。即使是這樣,我想,優(yōu)秀的程序員,在中國(guó),可能絕無僅有了。
下面是截圖:
桌面圖標(biāo)可以隨意拖動(dòng),第一次使用的時(shí)候,會(huì)創(chuàng)建一個(gè)文件夾根目錄,用來保存一些信息。這只是非常簡(jiǎn)單的一個(gè)東西。因?yàn)槲疫€要花時(shí)間做Struts2,Java ME和Java FX.


【編輯推薦】
- 在Eclipse中開發(fā)struts應(yīng)用程序
 
- 手把手教你在Eclipse中配置開發(fā)Struts 
 
- Eclipse下開發(fā)struts完整解決亂碼問題 
- Struts相關(guān)背景介紹 
 
- 使用Easy Struts for Eclipse開發(fā)Struts