上传

将本地文件传输到服务器

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 XMLAsynchronous 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 上传和下载的更多相关文章

  1. win7下利用ftp实现华为路由器的上传和下载

    win7下利用ftp实现华为路由器的上传和下载 1.  Win7下ftp的安装和配置 (1)开始->控制面板->程序->程序和功能->打开或关闭Windows功能 (2)在Wi ...

  2. Java实现FTP文件与文件夹的上传和下载

    Java实现FTP文件与文件夹的上传和下载 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制 ...

  3. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  4. Struts2入门(七)——Struts2的文件上传和下载

    一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST" ...

  5. php实现文件上传与下载(上)

    php实现文件的上传与下载是一个挺基本的功能,一般网站多多少少都会有这样的需求在内,当然不是说所有的文件都可以被上传,那这网络就太没有安全性可言了.因为接触php时间不长,今天写练练手,随笔也就是公开 ...

  6. SecureCRT上传和下载文件

    SecureCRT上传和下载文件(下载默认目录) SecureCR 下的文件传输协议有ASCII .Xmodem .Ymodem .Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. ...

  7. SpringMVC文件上传和下载

    上传与下载 1文件上传 1.1加入jar包 文件上传需要依赖的jar包 1.2配置部件解析器 解析二进制流数据. <?xml version="1.0" encoding=& ...

  8. 通读AFN②--AFN的上传和下载功能分析、SessionTask及相应的session代理方法的使用细节

    这一部分主要研究AFN的上传和下载功能,中间涉及到各种NSURLSessionTask的一些创建的解析和HTTPSessionManager对RESTful风格的web应用的支持,同时会穿插一点NSU ...

  9. 每天一个linux命令(26):用SecureCRT来上传和下载

    用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem.文 ...

随机推荐

  1. C# 实现寻峰算法的简单优化(包含边峰,最小峰值,峰距)

      核心寻峰算法的原理参考Ronny,链接:投影曲线的波峰查找, C#翻译原理代码参考sowhat4999,链接:C#翻译Matlab中findpeaks方法 前人种树,后人乘凉.感谢原作者详细的解释 ...

  2. Java基础-内部类介绍

    java内部类介绍 内部类一共分为4种 成员内部类 静态内部类 方法内部类 匿名内部类 下面我会为大家详细介绍每一个内部类!! 成员内部类 成员内部类就好像是外部类的一个成员属性,也是内部类中最常见的 ...

  3. UVA11624(KB1-J)

    Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the owner of ...

  4. 初学PS

    PS中的一些快捷键:新建:Ctrl+N 放大:Ctrl++ 缩小:Ctrl+- 首选项:Ctrl+K 标尺:Ctrl+R移动视图:空格键 绘制正圆:Shift 绘制鼠标落脚点为中心的正圆:Shift+ ...

  5. axTOCControl右键

    private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e) { if (e. ...

  6. Android设置日期DatePickerDialog

    设置日期DatePickerDialog package com.example.testview; import java.util.Calendar; import java.util.Date; ...

  7. Java 性能调优指南之 Java 集合概览

    [编者按]本文作者为拥有十年金融软件开发经验的 Mikhail Vorontsov,文章主要概览了所有标准 Java 集合类型.文章系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文: 本 ...

  8. shell_script2

    一.函数 1.简介 Shell函数类似于Shell脚本,里面存放了一系列的指令 不过,Shell的函数存在于内存,而不是硬盘文件,所以速度很快 另外,Shell还能对函数进行预处理,所以函数的启动比脚 ...

  9. LeetCode题解之Hamming Distance

    1.题目描述 2.问题分析 使用C++ 标准库中的 bitset 类,将整数转换为二进制形式,然后再将其转换为字符串,最后比较字符串. 3.代码 int hammingDistance(int x, ...

  10. Windows2003系统取消关机提示的方法

    方法有两种:1.编辑组策略 打开“开始”-“运行”,在“打开”一栏中输入“gpedit.msc”命令打开组策略编辑器,依次展开“计算机配置”→“管理模板”→“系统”,双击右侧窗口出现的“显示‘关闭事件 ...