<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

    搜索

    •  

    積分與排名

    • 積分 - 825932
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

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

    轉自:http://www.mldn.cn/articleview/2007-8-22/article_view_2245.htm

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

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

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

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

    首先,創建文件上傳頁面FileUpload.jsp,內容如下:

    <% @ 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中,先將表單的提交方式設為POST,然后將enctype設為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方法,后兩者很容易明白,分別對應FileUpload.jsp中的<s:file/>和<s:textfield/>標志。但是前兩者并沒有顯式地與任何的頁面標志綁定,那么它們的值又是從何而來的呢?其實,<s:file/>標志不僅僅是綁定到myFile,還有myFileContentType(上傳文件的MIME類型)和myFileFileName(上傳文件的文件名,該文件名不包括文件的路徑)。因此,<s:file name="xxx" />對應Action類里面的xxx、xxxContentType和xxxFileName三個屬性。

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

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

    <% @ 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顯式地應用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| 无码人妻精品一二三区免费| 伊人久久亚洲综合| 国产亚洲视频在线观看网址| 日本免费人成黄页网观看视频 | 亚洲精品私拍国产福利在线| 成全视频在线观看免费| 亚洲色成人WWW永久网站| 国产色爽免费无码视频| 久久亚洲高清观看| 青青草无码免费一二三区| 91亚洲一区二区在线观看不卡| 久久国产乱子伦免费精品| 亚洲伊人久久精品| 最近中文字幕无吗免费高清| 欧美亚洲精品一区二区| 久久久久亚洲精品无码网址| 中文字幕av免费专区| 亚洲一级二级三级不卡| 国产麻豆视频免费观看| WWW亚洲色大成网络.COM| 亚洲国产成人久久一区WWW| 99在线免费视频| 亚洲国产人成在线观看69网站| 精品国产无限资源免费观看| 亚洲AV噜噜一区二区三区| 久久久久亚洲AV成人网人人软件| 高清一区二区三区免费视频| 亚洲伊人久久大香线蕉结合| 国产做床爱无遮挡免费视频| 免费无码av片在线观看| 亚洲一级在线观看| 亚洲第一区精品日韩在线播放| 日韩av无码久久精品免费| 亚洲无码一区二区三区| 国产偷国产偷亚洲清高动态图 | 亚洲第一福利网站| 国内一级一级毛片a免费| aa级女人大片喷水视频免费| 亚洲精品第五页中文字幕| 免费A级毛片无码久久版|