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

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

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

    我思故我強

    JSP中實現文件上載

    一、前言
    文件上載對于任何web應用程序都是一個很有用處的功能。比如,在基于web的email中使用文件上載在消息中加入附件;在技術支持站點可以使用文件上載接收從用戶處發來的錯誤日志和缺陷報告文檔;在web應用中使用文件上載,通過友好的web界面在用戶間共享文件。本文將對如何在JSP編程中上載文件進行討論,并給出解決方法。
    二、文件上載的方式
    在TCP/IP中最早出現的文件上載機制是FTP,它是將文件由客戶端發送到服務器的標準機制。它很可靠,能夠考慮到跨平臺的文本和二進制格式文件。但在JSP編程中不能使用FTP方法來上載文件,這是由JSP的運行機制所決定的。我們知道:JSP(JavaServer Pages)是由Sun MicroSystems公司倡導、許多公司參與,一起建立的一種動態網頁技術標準。它在傳統的網頁HTML文件中加入JAVA程序片段和JSP標記就構成了JSP網頁。web服務器在遇到訪問JSP網頁請求時,首先執行其中的程序片段,然后將執行結果以HTML形式返回客戶。這種運行機制就要求客戶與服務器的聯系需要使用HTTP協議而不能是FTP協議。
    在HTTP協議中上載文件主要有兩種機制:
    1)RFC1867方式:RFC1867在作為標準發布之前首先被Netscape的Navigator 2.0中采用。隨后被Microsoft的IE3.0的附件和IE3.03的一部分使用。它是一種簡單實用的方法。只在表單字段中定義一個file類型的input:
    <input type="file">
    并且在表單本身中加入了不同的編碼方案,它不再使用典型的:
    <form action="test.jsp" method="post">
    而是使用
    <form action="test.jsp" method="post" enctype="multipart/form-data">
    這種編碼方案在傳送大量數據時比缺省的"application/x-url-encoded"表單編碼方案要效率高得多。因為URL編碼只有很有限的字符集。當使用任何超出字符集的字符時,必須用"%nn"代替(這里的nn表示相應的兩個十進制數)。這樣即使是普通的空格字符也要用"%20"代替。那么,通過URL編碼方式上載的文件將會是原來的2-3倍大。而使用RFC1867編碼方式則只是在傳送數據的周圍加上很簡單的頭部來標識文件內容。
    2)put方式:在HTTP1.1中引入了一個新的HTTP動詞:put。當web服務器收到一個HTTP的put請求和對象名字(如:"/myweb/images/x.gif")時,它會驗證用戶,接收HTTP流的內容,并把它直接存入web服務器。由于這種方式可能會對一個web站點造成破壞,因而并不常用。而且它也失去了web服務器端的最大優勢:服務器的可編程性。在使用put方式時,服務器自己處理客戶的請求,沒有空間讓JSP介入,因此,此方式對于JSP應用開發都是毫無用處的。
    三、JSP中實現文件上載的方法
    從以上分析中我們可以得出結論:RFC1867是在JSP編寫的web應用程序中實現文件上載的最好方法。它是如何在實際應用的呢?
    這里將介紹一種簡單而實用的方法,只需要幾行代碼就可以在JSP程序中實現文件上載。這就是使用一個免費的JAVA組件JspSmartUpload(http://www.jspsmart.com)實現文件上載。
    1) JspSmartUpload的配置要求
    安裝JspSmartUpload組件需要如下的配置:
    a. web服務器(如IIS,apache等)
    b. JDK1.1.2以上的JAVA編譯器
    c. 支持JSP1.1及JavaServelet API 2.2的引擎。
    其中的JSP引擎有許多產品,如:
    Tomcat: http://java.sun.com/products/jsp/tomcat
    Allaire Jrun: http://www.allaire.com/products/jrun
    JSWDK: http://java.sun.com/produces/jsp/
    IBM webSphere: http://www-4.ibm.com/software/webservers/
    Resin: http://www.caucho.com
    注意:本文將主要討論JspSmartUpload在Tomcat引擎中的安裝及使用。
    2) JspSmartUpload的安裝
    首先, 把下載的壓縮文件JspSmartUpload.zip解壓縮到/tomcat/webapps/ 目錄下(/tomcat目錄是你的tomcat引擎安裝的根目錄),這樣就會形成如下的目錄結構/tomcat/webapps/jspsmartupload/。所有必需的文件都在這個目錄下。
    其次,把如下內容粘貼到/tomcat/conf/server.xml文件中。
    <Context path="/jspsmartupload" docBase="/tomcat/webapps/jspsmartupload"
    defaultSessionTimeOut="30" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false" />
    最后,把如下的內容粘貼到/tomcat/conf/uniworkermap.properties文件中。
    /jspsmartupload/*.jsp=ajp12
    /jspsmartupload/servlet/*=ajp12
    至此,jspsmartupload在tomcat引擎中的安裝就完成了。
    3) 上載文件的HTML表單
    如前所述,在JSP中文件上載使用的是RFC1867標準。在其中也規定了上載文件所使用的HTML表單的格式。此表單的格式被Netscape 3和Microsoft IE3.02以上的瀏覽器所支持。上載文件的表單發布具備如下的格式:
    a) 單所使用的方法必須是post
    b) 在action屬性中的執行程序必須能處理由客戶端返回的數據
    c) 表單必須使用MIME類型:multipart/form-data
    d) 表單必須至少包含一個<input type=”file”>元素。與RFC1867兼容的瀏覽器將會在客戶端界面上顯示一個文本框和一個“游覽”按鈕,以方便客戶端選擇上載的文件。
    下面是使用此類型表單的HTML文件例子。
    upload.htm
    <HTML>
    <BODY BGCOLOR="white">
    <H1>jspUpload : Sample </H1>
    <HR>
    <form METHOD="POST" ACTION="/jspsmartupload/upload.jsp" NAME="PW" ENCTYPE="multipart/form-data">
    <table CELLSPACING="0" CELLPADDING="3" BORDER="1" WIDTH="474">
    <!-- FILE -->
    <tr>
    <td><small><font face="Verdana">
    Select a first file :
    </font></small></td>
    <td><small><font face="Verdana">
    <input TYPE="file" name="FILE1"></font></small></td>
    </tr>
    <tr>
    <td><small><font face="Verdana">Select a second file :?? </font></small></td>
    <td><small><font face="Verdana">
    <input TYPE="file" name="FILE2"></font></small></td>
    </tr>
    <!-- TEXT -->
    <tr>
    <td width="150"><div align="left"><p><small><font face="Verdana">Text :?? </font></small></td>
    <td width="324"><small><font face="Verdana"><input TYPE="TEXT" name="myText" value=""><br></font></small></td>
    </tr>
    <!-- SUBMIT -->
    <tr>
    <td colspan="2" width="474"><div align="center"><center><p><small><font face="Verdana"><input
    TYPE="Submit"> </font></small></td>
    </tr>
    </table>
    </form>
    </BODY>
    </HTML>
    4) 使用JspSmartUpload處理表單
    當客戶端submit表單以后,服務器將會調用表單action中的JSP程序處理客戶端的請求。在此JSP中就要調用JspSmartUpload來完成文件上載的請求。
    在JSP程序中,首先要在<%@ page import=my.class %>中聲明引入JspSmartUpload類。然后使用JavaBean來實例化一個JspSmartUpload類。如:<jsp:useBean id=”mybean” class=”my.class”>。在實例化后,要使用JSP引擎隱含的對象pageContext對JspSmartUpload JavaBean進行初使化,這樣就把客戶端的請求傳給了JspSmartUpload組件。然后使用組件的upload()方法對客戶的請求進行分析,最后把這些數據通過save()方法存入一個文件。
    下面是處理上一個HTML表單的JSP例程。
    upload.jsp
    <%@page language="java" import="com.jspsmart.upload.*"%>
    <jsp:useBean id="myUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
    <HTML>
    <BODY BGCOLOR="white">
    <H1>jspUpload : Sample</H1>
    <HR>
    <%
    // 初使化
    myUpload.initialize(pageContext);
    // 分析客戶數據
    myUpload.upload();
    //
    // 處理上載文件
    //
    out.println("<BR><STRONG>關于文件的信息</STRONG><BR>");
    out.println("上載文件的數量 = " + myUpload.getFiles().getCount() + "<BR>");
    //out.println("文件大小 (bytes) = " + myUpload.getFiles().getSize() +"<BR>");
    for (int i=0;i<myUpload.getFiles().getCount();i++){
    out.print(myUpload.getFiles().getFile(i).getFieldName());
    if (!myUpload.getFiles().getFile(i).isMissing())
    out.print(" = " + myUpload.getFiles().getFile(i).getFileName() + " (" + myUpload.getFiles().getFile(i).getSize() + ")");
    else
    out.print(" = 空");
    out.println("<BR>");
    }
    //
    // 處理客戶請求信息
    //
    out.println("<BR><BR><STRONG>顯示客戶表單數據</STRONG><BR>");
    // 顯示請求名
    java.util.Enumeration e = myUpload.getRequest().getParameterNames();
    // 得到請求的值
    while (e.hasMoreElements()) {
    String key = (String)e.nextElement();
    String[] values = myUpload.getRequest().getParameterValues(key);
    // 顯示請求的值
    for(int i = 0; i < values.length; i++) {
    out.print(key + " = ");
    out.print(values[i] + "<BR>");
    }
    }
    %>
    </BODY></HTML>
    5) 運行例程
    把上述的HTML表單例子及處理表單的JSP例程存到/tomcat/webapps/uspsmartupload/目錄下,然后運行/tomcat/bin/startup.bat啟動服務器。在IE或Netscape的地址欄中輸入:
    http://localhost:8080/jspsmartupload/jspupload.htm
    就可以看到運行結果了。
    四、結論
    JspSmartUpload組件不僅可以把客戶端的數據存入到文件中,也可以把它存入到數據庫中。而且,它的安裝及使用方法簡單易學,是一個非常好的上傳組件,可以給JSP編制的web應用程序提供更強大的功能。

    posted on 2007-11-02 10:44 李云澤 閱讀(432) 評論(0)  編輯  收藏 所屬分類: J2EE

    主站蜘蛛池模板: 亚洲五月综合缴情婷婷| 国产亚洲Av综合人人澡精品| 免费国产黄线在线观看| 亚洲精品国产suv一区88 | 一个人看www在线高清免费看| 亚洲码欧美码一区二区三区| 日韩亚洲国产二区| 国产精品免费观看调教网| 亚洲欧美中文日韩视频| 狠狠综合久久综合88亚洲| 99国产精品永久免费视频| 免费无码国产在线观国内自拍中文字幕| 国产aⅴ无码专区亚洲av| 免费av欧美国产在钱| 中文在线观看国语高清免费| 亚洲av一本岛在线播放| 亚洲国产理论片在线播放| 四虎永久免费地址在线观看| 西西人体免费视频| 亚洲av最新在线观看网址| 久久精品国产96精品亚洲| 国产美女做a免费视频软件| 日本卡1卡2卡三卡免费| 免费看内射乌克兰女| 亚洲精品中文字幕乱码| 亚洲日韩在线第一页| 成年女人免费碰碰视频| 全部免费毛片在线播放| g0g0人体全免费高清大胆视频| 亚洲宅男精品一区在线观看| 亚洲国产成人高清在线观看| 免费看国产曰批40分钟| 18勿入网站免费永久| 国内精品久久久久影院免费| 国产成人久久精品亚洲小说| 亚洲一级毛片免费观看| 亚洲情a成黄在线观看动漫尤物| 亚洲日韩在线观看| 一级毛片直播亚洲| 永久免费看mv网站入口| 日本三级2019在线观看免费|