"file-" + now + ".txt" ); file . createNewFile (); outputSt
前言:因本身卖力的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而本身对java文件上传这一块未接触过,且对 Http 协议较模糊,故此次给与渐进的方法来学习文件上传的道理与实践。该博客重在实践。
一. Http协议道理简介
HTTP是一个属于应用层的面向东西的协议,由于其简捷、快速的方法,适用于漫衍式超媒体信息系统。它于1990年提出,颠末几年的使用与成长,得到不停地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化事情正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
简单来说,就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范,,这个规范就是HTTP协议。
1.特点:
(1)撑持客户/处事器模式。
(2)简单快速:客户向处事器请求处事时,只需传送请求要领和路径。请求要领常用的有GET、HEAD、POST。每种方规则定了客户与处事器联系的类型差别。由于HTTP协议简单,使得HTTP处事器的措施规模小,因而通信速度很快。
(3)灵活:HTTP允许传输任意类型的数据东西。正在传输的类型由Content-Type加以符号。
(4)无连接:无连接的含义是限制每次连接只措置惩罚惩罚一个请求。处事器措置惩罚惩罚完客户的请求,并收到客户的应答后,即断开连接。给与这种方法可以节省传输时间。
(5)无状态:HTTP协议是无状态协议。无状态是指协议对付事务措置惩罚惩罚没有记忆能力。缺少状态意味着如果后续措置惩罚惩罚需要前面的信息,则它必需重传,这样可能导致每次连接传送的数据量增大。另一方面,在处事器不需要先前信息时它的应答就较快。
注意:此中(4)(5)是面试中常用的面试题。虽然HTTP协议(应用层)是无连接,无状态的,但其所依赖的TCP协议(传输层)倒是常连接、有状态的,而TCP协议(传输层)又依赖于IP协议(网络层)。
2.HTTP动静的布局
(1)Request 动静分为3部分,第一部分叫请求行, 第二部分叫http header动静头, 第三部分是body正文,header和body之间有个空行, 布局如下图
(2)Response动静的布局, 和Request动静的布局根基一样。 同样也分为三部分,第一部分叫request line状态行, 第二部分叫request header动静体,第三部分是body正文, header和body之间也有个空行, 布局如下图
下面是使用Fiddler捕捉请求baidu的Request动静机谈判Response动静机构:
因为没有输入任何表单信息,故request的动静正文为空,大家可以找一个登录的页面尝尝看。
先到这里,HTTP协议的常识网上很丰富,在这里就不再熬述了。
二. 文件上传的三种实现
1. Jsp/servlet 实现文件上传
这是最常见也是最简单的方法
(1)实现文件上传的Jsp页面
(2)卖力接文件的FileUploadServlet
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
// @WebServlet(name = "FileLoadServlet", urlPatterns = {"/fileload"})
public class FileLoadServlet extends HttpServlet {
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32427.html