Day10 上传和下载
上传
将本地文件传输到服务器
jsp:
文件上传的请求方式必须是post
input的type必须是file
enctype="multipart/form-data" <form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="upload"><br/>
<input type="submit" value="上传">
</form> servlet:
//1.设置编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//2.读(流)
InputStream is = request.getInputStream();//从请求中获取流
//3.写(写到upload的文件夹下)
//路径:在服务器中位置
String path = request.getServletContext().getRealPath("/upload");
OutputStream out = new FileOutputStream(new File(path,"a.txt")); byte[] buf = new byte[1024];
int data = -1;
while((data=is.read(buf)) != -1){
out.write(buf, 0, data);
}
//释放资源
out.close();
is.close();
System.out.println("上传完成"); 浏览器标志信息:
------WebKitFormBoundarytd2doI29GpOG23VA
Content-Disposition: form-data; name="upload"; filename="分包.txt"
Content-Type: text/plain
获取请求头信息比较麻烦 上传框架:
comms-upload.jar apache
comms-io.jar 1. 导入jar
2. 编写jsp表单
3. servlet
//fileItemFactory工厂:配置(缓冲区的大小,临时文件存放目录)
DiskFileItemFactory factory = new DiskFileItemFactory();
//临时文件存放目录
factory.setRepository(new File("c:/"));
//设置缓冲区大小
factory.setSizeThreshold(1024*1024); //解析请求(获取所有的表单元素(普通表单元素/文件表单元素))
//ServletFileUpload核心:将所有的表单元素解析为Fileitem
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
//获取文件目录
String path = request.getServletContext().getRealPath("/upload");
//遍历处理
for (FileItem fileItem : items) {
//判断类型
if(fileItem.isFormField()){//是否为普通表单元素
//获取普通
String name = fileItem.getFieldName();//表单元素name值
String value = fileItem.getString();//value值
System.out.println("name="+name+",value="+value);
}else{//文件
String name = fileItem.getName();//文件名称
fileItem.write(new File(path, name));
}
}
System.out.println("上传成功");
下载
将服务器的文件传输到本地。
//1.设置编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//2.获取参数的值 download?filename=xxx
String filename = request.getParameter("filename");
//3.获取文件的服务器路径(获取目录的路径)
String path = request.getServletContext().getRealPath("/res");
//4.读取文件
InputStream is = new FileInputStream(new File(path,filename));
//5.通过响应写文件到本地
//设置响应头
response.setHeader("Content-Disposition",
"attachment;filename="+URLEncoder.encode(filename, "utf-8"));
OutputStream out = response.getOutputStream();
byte[] buf = new byte[1024];
int data = -1;
while((data=is.read(buf)) != -1){
out.write(buf, 0, data);
}
out.close();
is.close();
过滤器(Filter)
过滤请求和响应。
当用户发出请求时,首先到达过滤器,过滤器如果”放行”,此时该请求就可以到达下一个过滤器或者servlet。当客户端响应时,也需要经过过滤器。
//初始化
@Override
public void init(FilterConfig filterConfig) throws ServletException { } //过滤请求和响应
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("filter 接收到请求");
//放行
chain.doFilter(request, response); System.out.println("filter 接收到响应");
} //销毁
@Override
public void destroy() { } <filter>
<filter-name>myfilter</filter-name>
<filter-class>filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> filter应用场景:
1) 全局的编码设置
2) 敏感字过滤
3) 权限管理
监听器(listener)
监听域的对象创建销毁。
HttpRequestListener
HttpSessionListener
ServletContextListener
监听域中数据的变化(添加,修改,删除)
ServletContextAttributeListener:监听application域中数据变化
ServletRequestAttributeListener:监听request域中数据的变化
HttpSessionActivationListener:监听session的状态(活化和钝化)
HttpSessionAttributeListener:监听session域中数据变化
HttpSessionBindingListener:实现session和对象的绑定
Ajax
同步请求:第二次请求需要等到第一次请求获取到响应之后才可以发送。
异步请求:请求之间没有依赖关系。
异步 JavaScript 及 XML(Asynchronous JavaScript And XML)。
模拟百度查询:
原生js:
var val = document.getElementById("content").value;
var oDiv = document.getElementById("div1");
//借助于Ajax
//1.创建xhr对象
var xhr = new XMLHttpRequest();
//2.打开连接
xhr.open("GET","test?key="+val); //请求方式 请求路径 是否异步
//3.发送请求 请求体
xhr.send(null);
//4.监听状态并且接收响应
xhr.onreadystatechange = function(){
//获取请求状态 0-4 请求正确时获取
if(xhr.readyState == 4 && xhr.status == 200){
oDiv.innerHTML = xhr.responseText;
}
} jQuery的Ajax:
$.ajax({
url:"test",
type:"get",
data:"key="+$("#content").val(),
dataType:"text",
success:function(data){
$("#div1").html(data);
}
});
url:请求路径
type:请求方式 get/post
data:传输的数据 字符串或者json {“key”:$(“#content”).val()}
dataType:服务器响应数据类型 (xml/html/json/script/text)
success:服务器响应正确时返回
Day10 上传和下载的更多相关文章
- win7下利用ftp实现华为路由器的上传和下载
win7下利用ftp实现华为路由器的上传和下载 1. Win7下ftp的安装和配置 (1)开始->控制面板->程序->程序和功能->打开或关闭Windows功能 (2)在Wi ...
- Java实现FTP文件与文件夹的上传和下载
Java实现FTP文件与文件夹的上传和下载 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制 ...
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- Struts2入门(七)——Struts2的文件上传和下载
一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST" ...
- php实现文件上传与下载(上)
php实现文件的上传与下载是一个挺基本的功能,一般网站多多少少都会有这样的需求在内,当然不是说所有的文件都可以被上传,那这网络就太没有安全性可言了.因为接触php时间不长,今天写练练手,随笔也就是公开 ...
- SecureCRT上传和下载文件
SecureCRT上传和下载文件(下载默认目录) SecureCR 下的文件传输协议有ASCII .Xmodem .Ymodem .Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. ...
- SpringMVC文件上传和下载
上传与下载 1文件上传 1.1加入jar包 文件上传需要依赖的jar包 1.2配置部件解析器 解析二进制流数据. <?xml version="1.0" encoding=& ...
- 通读AFN②--AFN的上传和下载功能分析、SessionTask及相应的session代理方法的使用细节
这一部分主要研究AFN的上传和下载功能,中间涉及到各种NSURLSessionTask的一些创建的解析和HTTPSessionManager对RESTful风格的web应用的支持,同时会穿插一点NSU ...
- 每天一个linux命令(26):用SecureCRT来上传和下载
用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem.文 ...
随机推荐
- C#跨窗体传值
果然C#的跨窗体传值比vb难得多,vb就定义一个全局变量就ok,但是C#还要考虑到命名空间的问题 frmMain要调用LoginUI的两个值,但是在此同时,frmMain又要引用LoginUI,所以说 ...
- System.Collections空间下的Hashtable类与System.Collections.Specialized下的StringDictionary的一点小区别
哎.有一周没有写自己的博客. 最近在做一个调用web服务的小程序,没有使用c#自动生成的代理类,而是使用http-get.post.以及soap的方式去请求的,使用这http请求这种方式需要自己去拼参 ...
- [WEB面试题] web前端面试题HTML+CSS第一弹,个人整理部分面试题汇总
以下内容仅供参考,网络整理而来 1.XHTML和HTML是什么有什么不同的区别 HTML是一种基本的WEB网页设计语言 XHTML可扩展超文本标记语言,是一种置标语言,表现方式与超文本标记语言(HTM ...
- vue组件 订单支付15分钟倒计时
//支付倒计时 ComputetTime(data) { let st = data.currentTime.replace(/\-/g, "/"),//当前服务器时间 ct = ...
- get_digits
# coding=utf-8# 一.def digits(n): list1 = [] for each in n: list1.append(each) return list1print(digi ...
- spring <context:annotation-config/> 注解作用
<context:component-scan>包含<context:annotation-config/>的作用 <context:annotation-config/ ...
- 搭建Kafka开发环境
Kafka版本是:kafka_2.10-0.8.2.1 1.maven工程方式 在pom.xml中配置kafka依赖 1 2 3 4 5 <dependency> <grou ...
- Ubuntu 安装python
1. wget http://mirrors.sohu.com/python/3.6.0/Python-3.6.0.tar.xz wget https://www.python.org/ftp/pyt ...
- jenkins集成caliper"
1.jenkins安装caliper-ci插件(Caliper CI Plugin) 2.编写microbench 最简便的办法就是作为单元测试来跑(这样就不用在jenkins里配置跑microben ...
- apache url rewrite及正则表达式笔记
什么是mod_rewrite? mod_rewrite是apache一个允许服务器端对请求url做修改的模块.入端url将和一系列的rule来比对.这些rule包含一个正则表达式以便检测每个特别的模式 ...