Servlet 过滤器、拦截器、监听器以及文件上传下载

时间:2021-12-20 11:56:02

在学习之初,总是对过滤器、拦截器、监听器这三个搞不清楚,现在进行一些记录,方便大家交流,也为了提高自身的学习能力!

如果想要了解这三个的作用,首先对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 过滤器、拦截器、监听器以及文件上传下载的更多相关文章

  1. 转:【专题十一】实现一个基于FTP协议的程序——文件上传下载器

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  2. 专题十一:实现一个基于FTP协议的程序——文件上传下载器

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  3. jsp&plus;servlet实现文件上传下载

    相关素材下载 01.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  4. Servlet文件上传下载

    今天我们来学习Servlet文件上传下载 Servlet文件上传主要是使用了ServletInputStream读取流的方法,其读取方法与普通的文件流相同. 一.文件上传相关原理 第一步,构建一个up ...

  5. Java中实现文件上传下载的三种解决方案

    第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...

  6. JavaWeb 文件上传下载

    1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...

  7. javaEE&lpar;14&rpar;&lowbar;文件上传下载

    一.文件上传概述 1.实现web开发中的文件上传功能,需完成如下二步操作: •在web页面中添加上传输入项•在servlet中读取上传文件的数据,并保存到本地硬盘中. 2.如何在web页面中添加上传输 ...

  8. 转载:JavaWeb 文件上传下载

    转自:https://www.cnblogs.com/aaron911/p/7797877.html 1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端 ...

  9. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=&quot ...

随机推荐

  1. GitLab版本管理

          GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览 ...

  2. PHP中判断字符串是否含有中文

    <?php /** * [1.测试一] * 当$str = '中文测试'; 时输出"全部是汉字";当$str = '中a文3测试'; 时输出"不全是汉字" ...

  3. 通过FTP将一个数据文件从A服务器下载到B服务器的整个过程

    现在的环境如下: 服务器A :192.168.1.104 服务器B:192.168.1.138 需要将A服务器上的某个数据文件下载到B服务器上,传输方式为:FTP 那么,要怎么去实现呢? 首先,需要添 ...

  4. LeetCode 232 Implement Queue using Stacks

    Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...

  5. matlab计算矩阵每列非0元素个数

    在统计分析中,有时候需要计算矩阵每列非0元素的个数,可以用以下方法: 先用find找到每列不为0的元素index,然后用count计数. 假设有矩阵A[M,N], 结果存在countZeros cou ...

  6. 接口中定义变量必须为public static final的原因

    在interface里面的变量默认都是public static final 的,原因如下: 1.   接口是一种高度抽象的"模版",,而接口中的属性也就是’模版’的成员,就应当是 ...

  7. Cassandra集群:一,搭建一个三节点的集群

    环境准备 JDK1.8 http://download.oracle.com/otn/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8 ...

  8. P3512 &lbrack;POI2010&rsqb;PIL-Pilots-洛谷luogu

    刚研究完单调队列和单调栈 于是就找题做了 发现了这道蓝题 以为很简单 就着手来写了 然而 并不是我想的那样 只是有一点点思路 无奈 还是看了题解 好吧题解是真的挺好的 ---------------- ...

  9. 【BZOJ 4503】4503&colon; 两个串 (FFT)

    4503: 两个串 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 497  Solved: 226 Description 兔子们在玩两个串的游戏.给 ...

  10. SPOJ CIRU SPOJ VCIRCLE 圆的面积并问题

    SPOJ VCIRCLE SPOJ CIRU 两道题都是给出若干圆 就面积并,数据规模和精度要求不同. 求圆面积并有两种常见的方法,一种是Simpson积分,另一种是几何法. 在这里给出几何方法. P ...