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

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

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

    eric-1001c

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      3 隨筆 :: 45 文章 :: 12 評論 :: 0 Trackbacks

    在god老大的激勵之下,我開始著手做這個上傳下載了,由于它只是個作業,所以我能做的就是完成它,完美和時間的權衡下,時間最重要,我花了一個星期使用不熟練的struts來寫程序,對于struts的精神理解已經很透徹了,只是struts標簽庫里的東西,各種form還沒有完全熟悉,呵呵,反正god老大的東西不要struts開發,這也為程序留下缺陷埋下伏筆。下面列出我的代碼:

    上傳:

    selfile.jsp

    <%@ page language="java"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
    <html:html>
    <html:form action="/upload.do" enctype="multipart/form-data">
    <html:file property="theFile"/>
    <html:submit/>
    </html:form>
    </html:html>

    ------------------------------------------------------------------------------------

    UploadForm.java

    package com.vv.struts.form;

    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.*;
    import org.apache.struts.upload.*;

    /**
    * <p>Title:UpLoadForm</p>
    * <p>Description: QRRSMMS </p>
    * <p>Copyright: Copyright (c) 2004 jiahansoft</p>
    * <p>Company: jiahansoft</p>
    * @author wanghw
    * @version 1.0
    */

    public class UploadForm extends ActionForm {

     public static final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED = "org.apache.struts.webapp.upload.MaxLengthExceeded";

     protected FormFile theFile;
     public FormFile getTheFile() {
      return theFile;
     }
     public void setTheFile(FormFile theFile) {
      this.theFile = theFile;
     }
     public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
     {
      ActionErrors errors = null;
      //has the maximum length been exceeded?
      Boolean maxLengthExceeded = (Boolean)
      request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
      if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue()))
      {
       errors = new ActionErrors();
       errors.add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED, new ActionError("maxLengthExceeded"));
      }
      return errors;

     }
    }

    -------------------------------------------------------------------------------------

    UploadAction.java

    package com.vv.struts.action;

    import java.io.*;
    import javax.servlet.http.*;
    import org.apache.struts.action.*;
    import org.apache.struts.upload.FormFile;
    import com.vv.struts.form.UploadForm;

    /**
    * <p>Title:UpLoadAction</p>
    * <p>Description: QRRSMMS </p>
    * <p>Copyright: Copyright (c) 2004 jiahansoft</p>
    * <p>Company: jiahansoft</p>
    * @author wanghw
    * @version 1.0
    */

    public class UploadAction extends Action {
     
    public ActionForward execute(ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response)
    throws Exception {
     if(form==null) System.out.println("null");
     if (form instanceof UploadForm) {//如果form是uploadsForm
      String encoding = request.getCharacterEncoding();
      if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8")))
      {
       response.setContentType("text/html; charset=gb2312");//如果沒有指定編碼,編碼格式為gb2312
      }
      UploadForm theForm = (UploadForm ) form;
      FormFile file = theForm.getTheFile();//取得上傳的文件
      try {
       InputStream stream = file.getInputStream();//把文件讀入
       String filePath = request.getRealPath("/");//取當前系統路徑
       ByteArrayOutputStream baos = new ByteArrayOutputStream();
       OutputStream bos = new FileOutputStream(filePath + "/file/" +
         file.getFileName());//建立一個上傳文件的輸出流
       //System.out.println(filePath+"/"+file.getFileName());
       int bytesRead = 0;
       byte[] buffer = new byte[8192];
       while ( (bytesRead = stream.read(buffer, 0, 8192)) != -1) {
        bos.write(buffer, 0, bytesRead);//將文件寫入服務器
       }
       bos.close();
       stream.close();
      }catch(Exception e){
       System.err.print(e);
      }
      //request.setAttribute("dat",file.getFileName());
      return mapping.findForward("success");
     }
     return null;
    }
    }
    其它的都是幾個次要的頁面,老實這部分基本上就是我抄的,雖然我也能寫,但是他確實比我寫的好,特別是對struts的字段的使用,這些都是我不知道的,我做的只是修改成我要的程序,唯一不好的就是它使用request.getRealPath("/"),這個方法很危險,可是一時間我沒有找到更好的方法代替它,這些是可以避免的,為什么使用它和后面的下載有關系,呵呵。

    下載:

    test.jsp


    <%@ page language="java"%>

    <a href="/other/download.do">here</a>

    ---------------------------------------------------------------------------

    download.jsp


    <%@ page language="java" contentType="text/html;charset=UTF-8"%>

    <%@ 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" %>

    <html xmlns:o="urn:schemas-microsoft-com:office:office"
    xmlns:w="urn:schemas-microsoft-com:office:word"
    xmlns="http://www.w3.org/TR/REC-html40">

    <head>
    <style>
    </style>
    </head>
    <body>

     <bean:write name="DownWordForm" property="name" />
     <logic:notEmpty name="list" >
      <logic:iterate id="row" name="list">
       <p><html:link page="/loaded.do" paramId="name" paramName="row">
       <bean:write name="row"/>
       </html:link>
       </p>
      </logic:iterate>
      </logic:notEmpty>
    </body>

    </html>

    對于struts的標簽一直不是很理解,在做這個的時候受了不少的苦呀,原來iterate里的row可以作為html:link的屬性值,我一直都不知道怎么來動態生成需要的鏈接,看了好多的例子,甚至在action里要輸出到jsp的字符串上再加入字符串“<html:link.......>”,然后用<bean:write>來輸出,可惜struts似乎使用了回壓字符流的,這個方案失敗了,看了動態生成復選框的例子后明白了,修改了后就能用了,中間有個小插曲,我把paramName改為list,然后把<bean:write name="list">,結果把list里的所有值作為一個單獨的鏈接重復list.size()次輸出,而不是把list的每個值重復輸出list.size()次,原理其實很簡單,只是感嘆struts的作者寫這個好像廢了不少的心呀。

    DownloadAction.java

    package com.vv.struts.action;

    import org.apache.struts.action.*;
    import javax.servlet.http.*;

    import java.io.File;
    import java.util.*;
    /**
     * <p>Title:DownloadWordAction </p>
     * <p>Description: QRRSMMS </p>
     * <p>Copyright: Copyright (c) 2004 jiahansoft</p>
     * <p>Company: jiahansoft</p>
     * @author wanghw
     * @version 1.0
     */

    public class DownloadAction extends Action {
     
     File myDir;
     File[] contents;

      public ActionForward execute(ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
          throws Exception {
        DynaActionForm testForm = (DynaActionForm)form;
        testForm.set("name","a test word");
       
        ArrayList list = new ArrayList();
        String path=request.getRealPath("/")+"file";
        String FullPath;
       System.out.println(path);
     myDir=new File(path);
     list.clear();
     contents=myDir.listFiles();
     //HashMap row = new HashMap();
     //System.out.println(contents.length);
     for(int i=0;i<contents.length;i++){
      FullPath=contents[i].getName();
      //row.put("1",FullPath);
      list.add(FullPath);
      System.out.println(FullPath);
     }
        request.setAttribute("list",list);
       
        return mapping.findForward("display");
    }
    }

    又用了限制級的方法,我也不想的我已用相對路徑它就報錯,我必須承認,這個寫的不夠標準,應該用資源文件存儲文件路徑,而不是反復列舉,為什么我不用呢?我當時忘了可以用資源文件了。。。。。。。

    LoadedForm.java

    package com.vv.struts.form;

    import org.apache.struts.action.ActionForm;

    /**
     * MyEclipse Struts
     * Creation date: 05-18-2006
     *
     * XDoclet definition:
     * @struts:form name="loadedForm"
     */
    public class LoadedForm extends ActionForm {

     // --------------------------------------------------------- Instance Variables

     /** name property */
     private String name;

     /**
      * Returns the name.
      * @return String
      */
     public String getName() {
      return name;
     }

     /**
      * Set the name.
      * @param name The name to set
      */
     public void setName(String name) {
      this.name = name;
     }

    }

    ---------------------------------------------------------------------------------

    LoadedAction.java

    package com.vv.struts.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 java.io.*;
    import com.vv.struts.form.LoadedForm;
    /**
     * MyEclipse Struts
     * Creation date: 05-17-2006
     *
     * XDoclet definition:
     * @struts:action validate="true"
     */
    public class LoadedAction extends Action {

     // --------------------------------------------------------- Instance Variables

     // --------------------------------------------------------- Methods

     /**
      * Method execute
      * @param mapping
      * @param form
      * @param request
      * @param response
      * @return ActionForward
      */
     public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response) throws Exception{
     
      LoadedForm doc=(LoadedForm)form;
      //if(form==null) System.out.println("null");
      String docName = doc.getName();
      File f;
      if(docName!=""){
      String docFullPath=request.getRealPath("/");
      //System.out.println(docFullPath);
     
      String Name = docName.substring(0,docName.lastIndexOf("."));
            String prefix = docName.substring(docName.lastIndexOf("."));
            //byte[] dn=Name.getBytes("UTF-8");
            //Name =new String(dn,"ISO-8859-1");
          //Name=java.net.URLEncoder.encode(Name,"GBK");
            docName = Name +prefix;
         
          System.out.println();
          System.out.println(docName);
        
          f = new File(docFullPath+"file\\"+docName);
         if (!f.exists())
         {
                return (mapping.findForward("nofile"));
         }
        
         BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
         byte[] buf = new byte[1024];
         int len = 0;
         response.reset();       
        
        
         response.setContentType("application/x-msdownload;charset=UTF-8");
         response.setHeader("Content-Disposition", "attachment; filename=" +docName);


          OutputStream out = response.getOutputStream();
          while((len = br.read(buf)) >0)
          out.write(buf,0,len);
          br.close();
          out.close();
          return mapping.findForward("download");
     }
      return mapping.findForward("nofile");
     }
     }

    我還是不幸運的遇見中文亂碼問題,如果下載的是中文文件的話,那么name的值就是亂碼,雖然我用了轉換字符的代碼,可惜事實上它沒有用,在:http://www.mx68.com/WebDeveloper/Print.asp?ArticleID=41762&Page=1中的三個方法我都使用了,可是都沒什么太大的變化,只是顯示不同的亂碼而已,郁悶。實在不行了,只能把這篇不怎么樣的作業上交god了。作為個程序員來說,它應該是追求完美的,但是我認為效率和時間是個凸函數,并不是但方面的極致就是最好,兩者的最佳切合點才是最好。

    posted on 2008-03-12 23:08 Eric-1001c 閱讀(144) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 野花香高清视频在线观看免费| 亚洲国产精品ⅴa在线观看| 一级中文字幕免费乱码专区| 国产美女无遮挡免费视频| 亚洲午夜电影在线观看| 国产成人精品免费直播| 亚洲中文字幕久久久一区| 无遮挡a级毛片免费看| 午夜国产大片免费观看| 最新亚洲人成无码网www电影| 免费v片在线观看无遮挡| 无码日韩人妻AV一区免费l| 亚洲精品视频免费观看| 国产精品亚洲片夜色在线| 国产高清免费视频| 久久精品国产亚洲7777| 中国国产高清免费av片| 亚洲国产天堂在线观看| 特级做a爰片毛片免费看| 久久乐国产精品亚洲综合| 成人久久免费网站| 亚洲成AV人在线观看网址| 国产成人精品免费视频大全| 国产高清在线免费视频| 成人福利在线观看免费视频| 久久精品夜色国产亚洲av| 午夜性色一区二区三区免费不卡视频| 久久亚洲av无码精品浪潮| 美女视频黄的免费视频网页 | 亚洲欧美在线x视频| 亚洲欧洲日产国码高潮αv| 久久久久国产精品免费网站| 亚洲日本国产综合高清| 国产国产人免费视频成69堂| 日本亚洲高清乱码中文在线观看| 亚洲日产韩国一二三四区| 黄色网址免费观看| 无码人妻一区二区三区免费视频| 亚洲视频一区二区三区| 无码人妻丰满熟妇区免费| 亚洲精品色播一区二区 |