<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 825795
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

    在Struts2中實現(xiàn)文件上傳(一)

    轉(zhuǎn)自:http://www.mldn.cn/articleview/2007-8-22/article_view_2245.htm

    前一陣子有些朋友在電子郵件中問關(guān)于Struts 2實現(xiàn)文件上傳的問題, 所以今天我們就來討論一下這個問題。

    實現(xiàn)原理
    Struts 2是通過Commons FileUpload文件上傳。Commons FileUpload通過將HTTP的數(shù)據(jù)保存到臨時文件夾,然后Struts使用fileUpload攔截器將文件綁定到Action的實例中。從而我們就能夠以本地文件方式的操作瀏覽器上傳的文件。

    具體實現(xiàn)
    前段時間Apache發(fā)布了Struts 2.0.6 GA,所以本文的實現(xiàn)是以該版本的Struts作為框架的。以下是例子所依賴類包的列表:

    依賴類包的列表 
    清單1 依賴類包的列表

    首先,創(chuàng)建文件上傳頁面FileUpload.jsp,內(nèi)容如下:

    <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncoding = " utf-8 " %>
    <% @ taglib prefix = " s " uri = " /struts-tags " %>

    <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
    < html xmlns ="http://www.w3.org/1999/xhtml" >
    < head >
        < title > Struts 2 File Upload </ title >
    </ head >
    < body >
        < s:form action ="fileUpload" method ="POST" enctype ="multipart/form-data" >
            < s:file name ="myFile" label ="Image File" />
            < s:textfield name ="caption" label ="Caption" />       
            < s:submit />
        </ s:form >
    </ body >
    </ html > 清單2 FileUpload.jsp
    在FileUpload.jsp中,先將表單的提交方式設(shè)為POST,然后將enctype設(shè)為multipart/form-data,這并沒有什么特別之處。接下來,<s:file/>標志將文件上傳控件綁定到Action的myFile屬性。

    其次是FileUploadAction.java代碼:

     package tutorial;

     import java.io.BufferedInputStream;
     import java.io.BufferedOutputStream;
     import java.io.File;
     import java.io.FileInputStream;
     import java.io.FileOutputStream;
     import java.io.InputStream;
     import java.io.OutputStream;
     import java.util.Date;

     import org.apache.struts2.ServletActionContext;

     import com.opensymphony.xwork2.ActionSupport;

     public class FileUploadAction extends ActionSupport  {
         private static final long serialVersionUID = 572146812454l ;
         private static final int BUFFER_SIZE = 16 * 1024 ;
       
         private File myFile;
         private String contentType;
         private String fileName;
         private String imageFileName;
         private String caption;
       
         public void setMyFileContentType(String contentType)  {
             this .contentType = contentType;
        }
       
         public void setMyFileFileName(String fileName)  {
             this .fileName = fileName;
        }
           
         public void setMyFile(File myFile)  {
             this .myFile = myFile;
        }
       
         public String getImageFileName()  {
             return imageFileName;
        }
       
         public String getCaption()  {
             return caption;
        }
     
          public void setCaption(String caption)  {
             this .caption = caption;
        }
       
         private static void copy(File src, File dst)  {
             try  {
                InputStream in = null ;
                OutputStream out = null ;
                 try  {               
                    in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
                    out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
                     byte [] buffer = new byte [BUFFER_SIZE];
                     while (in.read(buffer) > 0 )  {
                        out.write(buffer);
                    }
                 } finally  {
                     if ( null != in)  {
                        in.close();
                    }
                      if ( null != out)  {
                        out.close();
                    }
                }
             } catch (Exception e)  {
                e.printStackTrace();
            }
        }
       
         private static String getExtention(String fileName)  {
             int pos = fileName.lastIndexOf( " . " );
             return fileName.substring(pos);
        }
     
        @Override
         public String execute()      {       
            imageFileName = new Date().getTime() + getExtention(fileName);
            File imageFile = new File(ServletActionContext.getServletContext().getRealPath( " /UploadImages " ) + " / " + imageFileName);
            copy(myFile, imageFile);
             return SUCCESS;
        }
       
    } 清單3 tutorial/FileUploadAction.java
    在FileUploadAction中我分別寫了setMyFileContentType、setMyFileFileName、setMyFile和setCaption四個Setter方法,后兩者很容易明白,分別對應(yīng)FileUpload.jsp中的<s:file/>和<s:textfield/>標志。但是前兩者并沒有顯式地與任何的頁面標志綁定,那么它們的值又是從何而來的呢?其實,<s:file/>標志不僅僅是綁定到myFile,還有myFileContentType(上傳文件的MIME類型)和myFileFileName(上傳文件的文件名,該文件名不包括文件的路徑)。因此,<s:file name="xxx" />對應(yīng)Action類里面的xxx、xxxContentType和xxxFileName三個屬性。

    FileUploadAction作用是將瀏覽器上傳的文件拷貝到WEB應(yīng)用程序的UploadImages文件夾下,新文件的名稱是由系統(tǒng)時間與上傳文件的后綴組成,該名稱將被賦給imageFileName屬性,以便上傳成功的跳轉(zhuǎn)頁面使用。

    下面我們就來看看上傳成功的頁面:

    <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncoding = " utf-8 " %>
    <% @ taglib prefix = " s " uri = " /struts-tags " %>

    <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
    < html xmlns ="http://www.w3.org/1999/xhtml" >
    < head >
        < title > Struts 2 File Upload </ title >
    </ head >
    < body >
        < div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" >
            < img src ='UploadImages/<s:property value ="imageFileName" /> ' />
            < br />
            < s:property value ="caption" />
        </ div >
    </ body >
    </ html > 清單4 ShowUpload.jsp
    ShowUpload.jsp獲得imageFileName,將其UploadImages組成URL,從而將上傳的圖像顯示出來。

    然后是Action的配置文件:

    <? xml version="1.0" encoding="UTF-8" ?>

    <! DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd" >

    < struts >
        < package name ="fileUploadDemo" extends ="struts-default" >
            < action name ="fileUpload" class ="tutorial.FileUploadAction" >
                < interceptor-ref name ="fileUploadStack" />
                < result name ="success" > /ShowUpload.jsp </ result >
            </ action >
        </ package >
    </ struts > 清單5 struts.xml
    fileUpload Action顯式地應(yīng)用fileUploadStack的攔截器。

    最后是web.xml配置文件:

    <? xml version="1.0" encoding="UTF-8" ?>
    < web-app id ="WebApp_9" version ="2.4"
        xmlns ="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

        < display-name > Struts 2 Fileupload </ display-name >

        < filter >
            < filter-name > struts-cleanup </ filter-name >
            < filter-class >
                org.apache.struts2.dispatcher.ActionContextCleanUp
            </ filter-class >
        </ filter >
       
        < filter >
            < filter-name > struts2 </ filter-name >
            < filter-class >
                org.apache.struts2.dispatcher.FilterDispatcher
            </ filter-class >
        </ filter >
       
        < filter-mapping >
            < filter-name > struts-cleanup </ filter-name >
            < url-pattern > /* </ url-pattern >
        </ filter-mapping >

        < filter-mapping >
            < filter-name > struts2 </ filter-name >
            < url-pattern > /* </ url-pattern >
        </ filter-mapping >

        < welcome-file-list >
            < welcome-file > index.html </ welcome-file >
        </ welcome-file-list >

    </ web-app >



    posted on 2007-09-19 22:11 Ke 閱讀(2042) 評論(0)  編輯  收藏 所屬分類: struts 2
    主站蜘蛛池模板: 日本亚洲欧洲免费天堂午夜看片女人员| 中文字幕无码不卡免费视频| 精品无码一区二区三区亚洲桃色| 曰批全过程免费视频网址| 亚洲熟妇AV一区二区三区宅男| 五月婷婷亚洲综合| 久久青草免费91线频观看站街| 亚洲精品久久无码av片俺去也| 国产亚洲AV手机在线观看| 亚洲免费视频播放| 一个人看的www免费在线视频| 亚洲韩国在线一卡二卡| 亚洲精品成人久久久| 国产精品成人观看视频免费| 日韩精品无码永久免费网站| 亚洲女人初试黑人巨高清| 亚洲国产精品成人久久蜜臀 | 成人在线视频免费| 中文字字幕在线高清免费电影| 国产精品亚洲片夜色在线| 国产亚洲色婷婷久久99精品91| 歪歪漫画在线观看官网免费阅读| 怡红院免费的全部视频| 亚洲av无码成人精品国产| 亚洲电影在线免费观看| 亚洲中文字幕无码久久2017 | 亚洲韩国—中文字幕| 亚洲不卡AV影片在线播放| 99精品国产免费久久久久久下载| 国产一区二区三区免费| 免费激情网站国产高清第一页| 亚洲1区1区3区4区产品乱码芒果| 国产亚洲精品无码成人| 亚洲精品综合久久| 日本媚薬痉挛在线观看免费| 国产h肉在线视频免费观看| 久久久久久久岛国免费播放| EEUSS影院WWW在线观看免费| 亚洲av日韩综合一区二区三区| 亚洲六月丁香六月婷婷色伊人 | 亚洲日本精品一区二区|