Servlet 过滤器、拦截器、监听器以及文件上传下载
在学习之初,总是对过滤器、拦截器、监听器这三个搞不清楚,现在进行一些记录,方便大家交流,也为了提高自身的学习能力!
如果想要了解这三个的作用,首先对servlet流程进行熟悉了解,servlet是客户端(浏览器)与服务器之间的沟通桥梁,可以简单的理解为我们手机想要和电脑之间进行传输数据的USB。
<servlet>
<servlet-name>Web</servlet-name>
<servlet-class>com.Web</servlet-class>
<multipart-config>
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>Web</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这是servlet重要的配置文件,当然里边涉及到通配符。
<filter>
<filter-name>Test</filter-name>
<filter-class>com.Test</filter-class>
</filter>
<filter-mapping>
<filter-name>Test</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这是过滤器的配置文件,当把Web项目发布到服务器以后,项目进行加载,会调用过滤器com.Test类中(该类实现HttpServlet)的init方法,当访问的Url符合过滤器的url,会调用doFile()方法。过滤器的作用是进行权限分配以及设置编码格式,需要注意在doFile方法中必须进行chain.doFile(request,response),进行该操作是为了进行下一个过滤器,这就要说一下过滤器链,所谓过滤器链就是多个过滤器组成的,它们的执行顺序是按照web.xml文件中配置的先后顺序进行执行。
<filter>
<filter-name>Test</filter-name>
<filter-class>com.Test</filter-class>
<init-param>
<param-name>number</param-name>
<param-value>0</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Test</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上边配置的过滤器中添加了初始参数,在执行的过程中可以通过request.getParameter("name")获取初始参数,用该方法可以统计浏览网页人数。
try {
//获取上传的文件
Part part=request.getPart("file");
//获取请求的信息
String name=part.getHeader("content-disposition");
//System.out.println(name);//测试使用
//System.out.println(desc);//
//获取上传文件的目录
String root=request.getServletContext().getRealPath("/upload");
System.out.println("测试上传文件的路径:"+root);
//获取文件的后缀
String str=name.substring(name.lastIndexOf("."), name.length()-1);
System.out.println("测试获取文件的后缀:"+str);
//生成一个新的文件名,不重复,数据库存储的就是这个文件名,不重复的
String filename=root+"\\"+ UUID.randomUUID().toString()+str;
System.out.println("测试产生新的文件名:"+filename);
//上传文件到指定目录,不想上传文件就不调用这个
part.write(filename);
request.setAttribute("info", "上传文件成功");
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("info", "上传文件失败");
}
request.getRequestDispatcher("/success.jsp").forward(request, response);
这是文件上传的操作。
String fileName = "我的.txt";
OutputStream out = null;
FileInputStream fis = null;
// 1.获取资源文件的路径,当文件名是中文的时候出现不正常的情况,所以需要进行url编码
String path = "C:\\Users\\admin\\Desktop\\我的.txt";
try {
// 2.根据获取到的路径,构建文件流对象
fis = new FileInputStream(path);
out = response.getOutputStream();
// 5.设置http响应头,告诉浏览器以下载的方式处理我们的响应信息
response.setCharacterEncoding("utf-8");
response.setHeader("content-disposition", "attachment;filename=" + fileName);
// 6.开始写文件
byte[] buf = new byte[1024];
int len = 0;
while ((len = fis.read(buf)) != -1) {
out.write(buf, 0, len);
}
} finally {
if (fis != null) {
fis.close();
} }
这是下载的操作,需要注意的是该操作需要对中文进行编码,要不然不能进行下载,还有就是必须进行该操作:response.setHeader("content-disposition", "attachment;filename=" + fileName);,这个主要是告诉浏览器进行下载操作,要不然页面会显示你文件的内容。
Servlet 过滤器、拦截器、监听器以及文件上传下载的更多相关文章
- SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)
SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...
- 转:【专题十一】实现一个基于FTP协议的程序——文件上传下载器
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
- 专题十一:实现一个基于FTP协议的程序——文件上传下载器
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
- jsp+servlet实现文件上传下载
相关素材下载 01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- Servlet文件上传下载
今天我们来学习Servlet文件上传下载 Servlet文件上传主要是使用了ServletInputStream读取流的方法,其读取方法与普通的文件流相同. 一.文件上传相关原理 第一步,构建一个up ...
- Java中实现文件上传下载的三种解决方案
第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...
- JavaWeb 文件上传下载
1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...
- javaEE(14)_文件上传下载
一.文件上传概述 1.实现web开发中的文件上传功能,需完成如下二步操作: •在web页面中添加上传输入项•在servlet中读取上传文件的数据,并保存到本地硬盘中. 2.如何在web页面中添加上传输 ...
- 转载:JavaWeb 文件上传下载
转自:https://www.cnblogs.com/aaron911/p/7797877.html 1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端 ...
随机推荐
- HP中spl_autoload_register函数的用法
spl_autoload_register(PHP 5 >= 5.1.2) spl_autoload_register - 注册__autoload()函数 说明bool spl_autoloa ...
- Asp.net Core 微信公众号开发系列
参考:http://www.cnblogs.com/zskbll/p/4074855.html 一.微信公众平台操作流程 1.先到微信公众平台注册账号 2.登录成功后找到开发-->开发者工具-- ...
- php提供的sapi有哪些?CGI、FastCGI、php-fpm、php-cgi解释
一.前言 一直对PHP的sapi是什么东西好奇,在网上一查都是各种说fpm cgi fastcgi php-cgi 直到看了鸟哥的这篇文章介绍戳这里,看到源码下的sapi目录才有所了解. 二.sapi ...
- 第二十二章 Django会话与表单验证
第二十二章 Django会话与表单验证 第一课 模板回顾 1.基本操作 def func(req): return render(req,'index.html',{'val':[1,2,3...]} ...
- JS中的Undefined和Null的区别
Undefined ①在声明变量时,如果没有给变量赋值,则这个变量就是undefined类型: ②访问未声明的变量会报错误消息,但这样的变量使用 typeof 测试,返回的值为Undefined. 即 ...
- 剑指offer随练
合并两个排序的链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路:使用递归的方法,合并头节点,然后对剩下的链表接着合并头节点,直到合并完 ...
- nyoj61 传纸条(一) dp
思路:两人一个从左上角出发只能向右和向下,另一人从右下角出发只能向左和向上,可以看做两人都是从右下角出发,且只能向左和向上传纸条,并且两条路径不会相交,因为一个人只会传一次,那么随便画一个图就能知道两 ...
- URAL - 1153 Supercomputer 大数开方
题意:给定m,m = n * (n+1) / 2,计算n值. 思路:n = SQRT(m*2) 注意m很大,需要自己实现大数开方.我用的是自己写的大数模板:大数模板 AC代码 #include < ...
- SpringBoot实战 之 异常处理篇
在互联网时代,我们所开发的应用大多是直面用户的,程序中的任何一点小疏忽都可能导致用户的流失,而程序出现异常往往又是不可避免的,那该如何减少程序异常对用户体验的影响呢?其实方法很简单,对异常进行捕获,然 ...
- 转 Caffe学习系列(2):数据层及参数
http://www.cnblogs.com/denny402/p/5070928.html 要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个 ...