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.文 ...
随机推荐
- mybatis-plus的集成与使用
Mybatis-Plus: Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 官方网站:http://m ...
- 去除底部“自豪地采用 WordPress”版权信息----最后附最新版的删除方法!!
footer.php get_template_part( 'template-parts/footer/site', 'info' );
- 第二十天- 多继承 经典MRO 新式MRO super()
# 多继承:# 在继承关系中.⼦类自动拥有⽗类中除私有属性外其他所有内容.python⽀持多继承.子类可拥有多⽗类. class ShenXian: # 神仙 def fei(self): print ...
- margin相关基本知识
什么是 margin ? CSS 边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时改变所有的外边距.——W3School 边界,元素 ...
- div实现返回符,倒三角,椭圆+小知识收集
收集: 1,返回符(伪类元素): .back:before {content: "";width: .3rem;height: .3rem;border-left: .04rem ...
- 使用iview-admin2构建的项目,热更新无法启动
原因:@vue/cli-service版本是3.0.1解决:升级@vue/cli-service到最新版本
- check选择样式
样式一(H5): <form action="#"> <div class="wrapper"> <div class=& ...
- JQuer.HoverDir的基本使用方法
首先引入JQ和HoverDir库 HTML部分: <ul id="da-thumbs" class="da-thumbs"> <li> ...
- echarts隐藏之后的显示问题
好久没有更新博客了,今天搞了快一天的网页自适应,头晕...因为最近开始做项目,项目中需要用到图表方面的知识,于是乎接触到了echarts,所以其实我也算是新手了.只是近几天弄了很久的关于图表隐藏之后再 ...
- maven 生命周期、生命周期阶段、插件、目标
生命周期maven的生命周期是抽象的,它本身不做任何实际的工作.实际的工作都由插件来完成.生命周期好比接口,插件好比实现类.maven 有三个独立的生命周期,clean.default.site. 生 ...