国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

用JavaBean實現(xiàn)文件上載(一)請求分析

2019-11-17 05:55:12
字體:
供稿:網(wǎng)友
請求分析  要實現(xiàn)文件上載,我們必須先了解上載文件的HTTP請求。下面這個簡單的應(yīng)用示范了如何上載文件以及把HTTP請求的原始數(shù)據(jù)寫入文件。用文本編輯器查看該文件即可了解請求的格式,在此基礎(chǔ)上我們就可以提取出上載文件的名字、文件內(nèi)容以及原本混合在一起的其他信息。


  這個簡單的應(yīng)用是開發(fā)真正文件上載javaBean的預備工作。它由三個文件構(gòu)成:Html文件main.html,jsp頁面Jsp1.jsp,JavaBean文件SimpleBean.java。

  main.html提供一個表單,用戶從這里選擇文件并把文件上載到服務(wù)器。main.html的代碼如下:

<html>
<head>
<title>文件上載</title>
</head>
<body>
<form action="jsp1.jsp" enctype="MULT作者: <input type="text" name="author" />
<br />
公司: <input type="text" name="company" />
<br />
選擇要上載的文件 <input type="file" name="filename" />
<br />
<input type="submit" value="上載" />
</form>
</body>
</html>   可以看到,<form>標記有一個enctype屬性,屬性值是"MULTIPART/FORM-DATA"。包括提交按鈕在內(nèi),表單里面共有4個輸入元素。前面兩個輸入元素是普通的text元素,即author和company。第三個輸入元素的type屬性是file,這個輸入元素就是用來選擇文件的元素。
進入討論組討論。
  表單的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文件提供,如下圖所示。

用JavaBean實現(xiàn)文件上載(一)請求分析


  我們選擇上載的文件是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ù)的回車換行符之后正式開始。
進入討論組討論。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 贺州市| 剑阁县| 金塔县| 襄城县| 出国| 吉林市| 行唐县| 涟水县| 寻甸| 宝兴县| 金溪县| 溆浦县| 德惠市| 金门县| 堆龙德庆县| 宝鸡市| 大同县| 泰来县| 罗田县| 石景山区| 日照市| 永兴县| 宝兴县| 中牟县| 昭觉县| 凯里市| 盈江县| 资中县| 双城市| 夏邑县| 浮山县| 卓尼县| 五莲县| 灵台县| 应城市| 治多县| 松桃| 遵化市| 洱源县| 崇州市| 威远县|