用JavaBean实现文件上载(一)请求分析

Waidaxi

Waidaxi

2016-02-19 20:04

最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有图老师给你解答,史上最全最棒的详细解说让你一看就懂。
请求分析  要实现文件上载,我们必须先了解上载文件的HTTP请求。下面这个简单的应用示范了如何上载文件以及把HTTP请求的原始数据写入文件。用文本编辑器查看该文件即可了解请求的格式,在此基础上我们就可以提取出上载文件的名字、文件内容以及原本混合在一起的其他信息。 !-- frame contents --!-- /frame contents --
  
  这个简单的应用是开发真正文件上载JavaBean的预备工作。它由三个文件构成:Html文件main.html,jsp页面Jsp1.jsp,JavaBean文件SimpleBean.java。
  
  main.html提供一个表单,用户从这里选择文件并把文件上载到服务器。main.html的代码如下:
  
  html
  head
  title文件上载/title
  /head
  body
  form action="jsp1.jsp" enctype="MULTIPART/FORM-DATA" method=post
  作者: 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"。包括提交按钮在内,表单里面共有4个输入元素。前面两个输入元素是普通的text元素,即author和company。第三个输入元素的type属性是file,这个输入元素就是用来选择文件的元素。
  进入讨论组讨论。   表单的action属性值是Jsp1.jsp,这意味着请求(包括上载的文件)将发送给Jsp1.jsp文件。Jsp1.jsp简单地调用名为SimpleBean的JavaBean。
  
  jsp:useBean id="TheBean" scope="page" class="SimpleBean " /
  %
  TheBean.doUpload(request);
  %
  
   !-- frame contents --!-- /frame contents --   下面是SimpleBean的实现代码: 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对象的表单原始数据写入Demo.out文件。应用的用户界面由main.html文件提供,如下图所示。
  
  
  
  我们选择上载的文件是abisco.html。选择上载HTML文件是为了便于观察上载后的格式,因为HTML文件本质上是文本文件,我们可以方便地浏览其内容。abisco.html文件的内容如下:
  
  
  html
  head
  titleAbisco/title
  /head
  /html
  
  点击“上载”按钮之后,表单就发送给了Jsp1.jsp文件,一起发送的还有abisco.html文件。Jsp1.jsp文件不会向浏览器发送任何应答内容,但它会生成一个Demo.out文件。
  进入讨论组讨论。   打开Demo.out文件,我们可以看到如下内容:
  
  
  -----------------------------7d15340138
  Content-Disposition: form-data; name="Author"
  
  A. Christie
  -----------------------------7d15340138
   !-- frame contents --!-- /frame contents -- Content-Disposition: form-data; name="Company"
  
  Abisco
  -----------------------------7d15340138
  Content-Disposition: form-data; name="Filename"; filename="C:123dataabisco.html"
  Content-Type: text/html
  
  html
  head
  titleAbisco/title
  /head
  /html
  
  -----------------------------7d15340138--
  
  
  可以看到,HTTP请求体内包含了所有的表单输入,包括上载的文件。这些输入数据的分隔由一个分隔符实现。分隔符由一系列的“-”字符和一个随机数字构成。在上面的例子中,分隔符为“-----------------------------7d15340138”。最后一个分隔符结束请求体,这个分隔符的后面多出两个“-”符号。
  进入讨论组讨论。   对于非文件类型的输入数据,分隔符后面跟着下面这行内容:Content-Disposition: form-data; name=inputName。其中inputName是表单元素的名字。例如:Content-Disposition: form-data; name="Author"。在这行内容的后面,紧跟着两个连续的回车换行符和表单元素值。
  
   !-- frame contents --!-- /frame contents --   而对于文件型输入域,分隔符的后面有两行内容。第一行内容包含输入元素的名字以及上载文件在客户端的完整路径,如上例中这行内容是“Content-Disposition: form-data; name="Filename"; filename="C:123dataabisco.html"”。这行内容指出文件输入元素的名字是filename,文件的路径是“C:123dataabisco.html”。注重Windows浏览器会设置文件路径,而Unix/Linux以及Mac浏览器只发送文件名字。
  
  第二行包含了文件的内容类型,因此它的具体内容和上载的文件有关。本例中第二行的内容是“Content-Type: text/html”。
  
  和非文件输入元素一样,文件内容在两个连续的回车换行符之后正式开始。
  进入讨论组讨论。
展开更多 50%)
分享

猜你喜欢

用JavaBean实现文件上载(一)请求分析

编程语言 网络编程
用JavaBean实现文件上载(一)请求分析

用Java Servlet实现文件上载

编程语言 网络编程
用Java Servlet实现文件上载

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用JSP文件上载轻松实现

Java JAVA基础
用JSP文件上载轻松实现

用PHP3实现文件上载

PHP
用PHP3实现文件上载

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

JavaBean实现多文件上传

Java JAVA基础
JavaBean实现多文件上传

用ASP和VBScript上载文件(一)

ASP
用ASP和VBScript上载文件(一)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Windows 8系统删除旧版应用/清理应用缓存的方法

Windows 8系统删除旧版应用/清理应用缓存的方法

Java精华积累:初学者都应该搞懂的问题

Java精华积累:初学者都应该搞懂的问题
下拉加载更多内容 ↓