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

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

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

    我思故我強(qiáng)

    JSP中實現(xiàn)文件上載

    一、前言
    文件上載對于任何web應(yīng)用程序都是一個很有用處的功能。比如,在基于web的email中使用文件上載在消息中加入附件;在技術(shù)支持站點可以使用文件上載接收從用戶處發(fā)來的錯誤日志和缺陷報告文檔;在web應(yīng)用中使用文件上載,通過友好的web界面在用戶間共享文件。本文將對如何在JSP編程中上載文件進(jìn)行討論,并給出解決方法。
    二、文件上載的方式
    在TCP/IP中最早出現(xiàn)的文件上載機(jī)制是FTP,它是將文件由客戶端發(fā)送到服務(wù)器的標(biāo)準(zhǔn)機(jī)制。它很可靠,能夠考慮到跨平臺的文本和二進(jìn)制格式文件。但在JSP編程中不能使用FTP方法來上載文件,這是由JSP的運行機(jī)制所決定的。我們知道:JSP(JavaServer Pages)是由Sun MicroSystems公司倡導(dǎo)、許多公司參與,一起建立的一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。它在傳統(tǒng)的網(wǎng)頁HTML文件中加入JAVA程序片段和JSP標(biāo)記就構(gòu)成了JSP網(wǎng)頁。web服務(wù)器在遇到訪問JSP網(wǎng)頁請求時,首先執(zhí)行其中的程序片段,然后將執(zhí)行結(jié)果以HTML形式返回客戶。這種運行機(jī)制就要求客戶與服務(wù)器的聯(lián)系需要使用HTTP協(xié)議而不能是FTP協(xié)議。
    在HTTP協(xié)議中上載文件主要有兩種機(jī)制:
    1)RFC1867方式:RFC1867在作為標(biāo)準(zhǔn)發(fā)布之前首先被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">
    這種編碼方案在傳送大量數(shù)據(jù)時比缺省的"application/x-url-encoded"表單編碼方案要效率高得多。因為URL編碼只有很有限的字符集。當(dāng)使用任何超出字符集的字符時,必須用"%nn"代替(這里的nn表示相應(yīng)的兩個十進(jìn)制數(shù))。這樣即使是普通的空格字符也要用"%20"代替。那么,通過URL編碼方式上載的文件將會是原來的2-3倍大。而使用RFC1867編碼方式則只是在傳送數(shù)據(jù)的周圍加上很簡單的頭部來標(biāo)識文件內(nèi)容。
    2)put方式:在HTTP1.1中引入了一個新的HTTP動詞:put。當(dāng)web服務(wù)器收到一個HTTP的put請求和對象名字(如:"/myweb/images/x.gif")時,它會驗證用戶,接收HTTP流的內(nèi)容,并把它直接存入web服務(wù)器。由于這種方式可能會對一個web站點造成破壞,因而并不常用。而且它也失去了web服務(wù)器端的最大優(yōu)勢:服務(wù)器的可編程性。在使用put方式時,服務(wù)器自己處理客戶的請求,沒有空間讓JSP介入,因此,此方式對于JSP應(yīng)用開發(fā)都是毫無用處的。
    三、JSP中實現(xiàn)文件上載的方法
    從以上分析中我們可以得出結(jié)論:RFC1867是在JSP編寫的web應(yīng)用程序中實現(xiàn)文件上載的最好方法。它是如何在實際應(yīng)用的呢?
    這里將介紹一種簡單而實用的方法,只需要幾行代碼就可以在JSP程序中實現(xiàn)文件上載。這就是使用一個免費的JAVA組件JspSmartUpload(http://www.jspsmart.com)實現(xiàn)文件上載。
    1) JspSmartUpload的配置要求
    安裝JspSmartUpload組件需要如下的配置:
    a. web服務(wù)器(如IIS,apache等)
    b. JDK1.1.2以上的JAVA編譯器
    c. 支持JSP1.1及JavaServelet API 2.2的引擎。
    其中的JSP引擎有許多產(chǎn)品,如:
    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引擎安裝的根目錄),這樣就會形成如下的目錄結(jié)構(gòu)/tomcat/webapps/jspsmartupload/。所有必需的文件都在這個目錄下。
    其次,把如下內(nèi)容粘貼到/tomcat/conf/server.xml文件中。
    <Context path="/jspsmartupload" docBase="/tomcat/webapps/jspsmartupload"
    defaultSessionTimeOut="30" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false" />
    最后,把如下的內(nèi)容粘貼到/tomcat/conf/uniworkermap.properties文件中。
    /jspsmartupload/*.jsp=ajp12
    /jspsmartupload/servlet/*=ajp12
    至此,jspsmartupload在tomcat引擎中的安裝就完成了。
    3) 上載文件的HTML表單
    如前所述,在JSP中文件上載使用的是RFC1867標(biāo)準(zhǔn)。在其中也規(guī)定了上載文件所使用的HTML表單的格式。此表單的格式被Netscape 3和Microsoft IE3.02以上的瀏覽器所支持。上載文件的表單發(fā)布具備如下的格式:
    a) 單所使用的方法必須是post
    b) 在action屬性中的執(zhí)行程序必須能處理由客戶端返回的數(shù)據(jù)
    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處理表單
    當(dāng)客戶端submit表單以后,服務(wù)器將會調(diào)用表單action中的JSP程序處理客戶端的請求。在此JSP中就要調(diào)用JspSmartUpload來完成文件上載的請求。
    在JSP程序中,首先要在<%@ page import=my.class %>中聲明引入JspSmartUpload類。然后使用JavaBean來實例化一個JspSmartUpload類。如:<jsp:useBean id=”mybean” class=”my.class”>。在實例化后,要使用JSP引擎隱含的對象pageContext對JspSmartUpload JavaBean進(jìn)行初使化,這樣就把客戶端的請求傳給了JspSmartUpload組件。然后使用組件的upload()方法對客戶的請求進(jìn)行分析,最后把這些數(shù)據(jù)通過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);
    // 分析客戶數(shù)據(jù)
    myUpload.upload();
    //
    // 處理上載文件
    //
    out.println("<BR><STRONG>關(guān)于文件的信息</STRONG><BR>");
    out.println("上載文件的數(shù)量 = " + 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>顯示客戶表單數(shù)據(jù)</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啟動服務(wù)器。在IE或Netscape的地址欄中輸入:
    http://localhost:8080/jspsmartupload/jspupload.htm
    就可以看到運行結(jié)果了。
    四、結(jié)論
    JspSmartUpload組件不僅可以把客戶端的數(shù)據(jù)存入到文件中,也可以把它存入到數(shù)據(jù)庫中。而且,它的安裝及使用方法簡單易學(xué),是一個非常好的上傳組件,可以給JSP編制的web應(yīng)用程序提供更強(qiáng)大的功能。

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

    主站蜘蛛池模板: av电影在线免费看| 青草草色A免费观看在线| 久久精品亚洲日本佐佐木明希| 久久99青青精品免费观看| 亚洲五月丁香综合视频| 亚洲另类激情专区小说图片| 久久免费观看国产精品88av| 亚洲人成色777777精品| 国产亚洲精品观看91在线| 24小时免费直播在线观看| 精品国产福利尤物免费| 亚洲日本人成中文字幕| 亚洲小说区图片区另类春色| 福利免费观看午夜体检区| 国产精品玖玖美女张开腿让男人桶爽免费看| 91在线亚洲精品专区| 男人的天堂亚洲一区二区三区 | 亚洲成a人片7777| 国产美女精品视频免费观看| 国产精品免费观看调教网| 国产精品成人亚洲| 亚洲网址在线观看| 中文字幕中韩乱码亚洲大片 | 亚洲国产成人精品91久久久| 91高清免费国产自产| 国产又黄又爽又大的免费视频| 亚洲国产乱码最新视频| 亚洲尹人香蕉网在线视颅| 在线观看亚洲av每日更新| 国产免费131美女视频| 日韩在线播放全免费| 国产精品区免费视频| 精品久久久久久无码免费| 亚洲av无码一区二区三区天堂| 亚洲国色天香视频| 久久精品国产亚洲AV麻豆王友容| 亚洲国产精品成人| 在线视频免费国产成人| 在线精品免费视频| 无码国产精品久久一区免费| 久视频精品免费观看99|