上传

将本地文件传输到服务器

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. Java 中 List 和 数组之间的转换

    前言:在 java 开发过程中,经常会遇到数组和 list 互转的情况,这里记录一下,免得以后又去到处百度. 一.数组转为 LIST 这里转自 https://www.cnblogs.com/lius ...

  2. Tomcat启动慢原因之二 he APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

    Tomcat启动时提示: 信息: The APR based Apache Tomcat Native library which allows optimal performance in prod ...

  3. 【Android】RxJava的使用(二)Action

    回顾 在上一节Android RxJava的使用(一)基本用法中,介绍了RxJava的基本用法.下面来回顾下实现一次RxJava的基本使用.例:分别打印"Hellow"." ...

  4. ios虚拟机安装(四)

    Virtual Machine Settings: Processors(Virtual Intel VT-X/EPT or AMD-V/RVI 一定要打勾) Floppy(软驱) (必须remove ...

  5. fuzz系列之afl

    afl 实战 前言 像 libFuzzer, afl 这类 fuzz 对于 从文件 或者 标准输入 获取输入的程序都能进行很好的 fuzz, 但是对于基于网络的程序来说就不是那么方便了. 这篇文章介绍 ...

  6. [WinCE] [Win10] Win10 Creator 升级后 Windows Mobile Device Center 不能打开

    运行 services.msc 找到 Windows Mobile 2003-based device connectivity服务,右键属性,Log On选项卡选择 Local System acc ...

  7. ASP.NET MVC 使用Remote特性实现远程属性验证

    RemoteAttribute是asp.net mvc 的一个验证特性,它位于System.Web.Mvc命名空间 下面通过例子来说明 很多系统中都有会员这个功能,会员在前台注册时,用户名不能与现有的 ...

  8. lambda 表达式的由来

    相关技术点:函数指针.C#委托.匿名方法.lambda表达式 谈到lambda表达式,首先从委托讲起, 委托是持有一个或者多个方法的对象,这个特性有点像C中的函数指针,可以指向不同的方法,下面的例子是 ...

  9. 使用AKLocationManager定位

    使用AKLocationManager定位 https://github.com/ideaismobile/AKLocationManager 以下是使用情况: 是不是很简单呢,我们可以将它的步骤进一 ...

  10. U盘安装win7系统

    windows 7安装 准备 1.iso系统镜像文件(我一般选用纯净版) 2.Windows7-USB-DVD-Download-Tool-Installer-en-US(启动盘制作) 3.准备4G以 ...