表單的action屬性值是Jsp1.jsp,這意味著請求(包括上載的文件)將發(fā)送給Jsp1.jsp文件。Jsp1.jsp簡單地調(diào)用名為SimpleBean的JavaBean。
<jsp:useBean id="TheBean" scope="page" class="SimpleBean " />
<%
TheBean.doUpload(request);
%>
![]()
下面是SimpleBean的實現(xiàn)代碼: import java.io.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletInputStream;
public class FileUploadBean {
public void doUpload(HttpServletRequest request) throws
IOException {
PRintWriter pw = new PrintWriter(
new BufferedWriter(new FileWriter("Demo.out")));
ServletInputStream in = request.getInputStream();
int i = in.read();
while (i != -1) {
pw.print((char) i);
i = in.read();
}
pw.close();
}
}
進入討論組討論。
這個JavaBean把HttpServletRequest對象的表單原始數(shù)據(jù)寫入Demo.out文件。應(yīng)用的用戶界面由main.html文件提供,如下圖所示。

我們選擇上載的文件是abisco.html。選擇上載HTML文件是為了便于觀察上載后的格式,因為HTML文件本質(zhì)上是文本文件,我們可以方便地瀏覽其內(nèi)容。abisco.html文件的內(nèi)容如下:
<html>
<head>
<title>Abisco</title>
</head>
</html>
點擊“上載”按鈕之后,表單就發(fā)送給了Jsp1.jsp文件,一起發(fā)送的還有abisco.html文件。Jsp1.jsp文件不會向瀏覽器發(fā)送任何應(yīng)答內(nèi)容,但它會生成一個Demo.out文件。
進入討論組討論。
打開Demo.out文件,我們可以看到如下內(nèi)容:
-----------------------------7d15340138
Content-Disposition: form-data; name="Author"
A. Christie
-----------------------------7d15340138
![]()
Content-Disposition: form-data; name="Company"
Abisco
-----------------------------7d15340138
Content-Disposition: form-data; name="Filename"; filename="C:/123data/abisco.html"
Content-Type: text/html
<html>
<head>
<title>Abisco</title>
</head>
</html>
-----------------------------7d15340138--
可以看到,HTTP請求體內(nèi)包含了所有的表單輸入,包括上載的文件。這些輸入數(shù)據(jù)的分隔由一個分隔符實現(xiàn)。分隔符由一系列的“-”字符和一個隨機數(shù)字構(gòu)成。在上面的例子中,分隔符為“-----------------------------7d15340138”。最后一個分隔符結(jié)束請求體,這個分隔符的后面多出兩個“-”符號。
進入討論組討論。
對于非文件類型的輸入數(shù)據(jù),分隔符后面跟著下面這行內(nèi)容:Content-Disposition: form-data; name=inputName。其中inputName是表單元素的名字。例如:Content-Disposition: form-data; name="Author"。在這行內(nèi)容的后面,緊跟著兩個連續(xù)的回車換行符和表單元素值。
![]()
而對于文件型輸入域,分隔符的后面有兩行內(nèi)容。第一行內(nèi)容包含輸入元素的名字以及上載文件在客戶端的完整路徑,如上例中這行內(nèi)容是“Content-Disposition: form-data; name="Filename"; filename="C:/123data/abisco.html"”。這行內(nèi)容指出文件輸入元素的名字是filename,文件的路徑是“C:/123data/abisco.html”。注重Windows瀏覽器會設(shè)置文件路徑,而Unix/
linux以及Mac瀏覽器只發(fā)送文件名字。
第二行包含了文件的內(nèi)容類型,因此它的具體內(nèi)容和上載的文件有關(guān)。本例中第二行的內(nèi)容是“Content-Type: text/html”。
和非文件輸入元素一樣,文件內(nèi)容在兩個連續(xù)的回車換行符之后正式開始。
進入討論組討論。