1.监听:

  index.jsp:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
  5. + path + "/";
  6. %>
  7.  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12.  
  13. <title>My JSP 'index.jsp' starting page</title>
  14. </head>
  15.  
  16. <body>
  17.  
  18. <%
  19. session.setAttribute("username", "zhangsan");// attributeAdded
  20. session.setAttribute("pwd", "123456");// attributeAdded
  21. session.setAttribute("username", "lisi");// attributeReplaced
  22. session.removeAttribute("username");// attributeRemoved
  23. %>
  24.  
  25. <h1>监听器</h1>
  26. <pre>
  27.  
  28. 在web项目中,监听器也是监听比较重要的事件或者对象
  29. 监听作用域
  30. 1.监听作用域的生命周期
  31. 2.监听作用域的值传递
  32.  
  33. **当监听器开始监听的时候,绝对是监听已经被创建后
  34.  
  35. 监听的原则:
  36. **作用一定要单一
  37.  
  38. 三个作用域两个监听:每一个作用域都会有两个监听,一共有三个作用域,就会有六个监听
  39. request:请求和所有请求转发的跳转的页面
  40. ServletRequestListener:sre.getServletRequest();
  41. ServletContextAttributeListener:
  42. srae.getName();
  43. srae.getValue();
  44. srae.getServletRequest();
  45. session:一次会话
  46. HttpSessionListener:se.getSession();
  47. HttpSessionAttributeListener:
  48. event.getName();
  49. event.getValue();
  50. event.getSession();
  51. application:作用于整个项目
  52. ServletContextListener:sce.getServletContext()
  53. ServletContextAttributeListener:
  54. event.getName();
  55. event.getValue();
  56. event.getServletContext();
  57.  
  58. pageContext:虽然是作用域,但是作用范围很小,只作用于当前页面,所有两个servlet之间的值传递会失效,没有必要监听
  59. 四大作用域中,唯一一个没有监听的作用域
  60.  
  61. </pre>
  62.  
  63. </body>
  64. </html>

  web.xml:

  

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  5. id="WebApp_ID" version="3.0">
  6. <display-name>20170807_listener</display-name>
  7.  
  8. <listener>
  9. <listener-class>cn.zzsxt.lee.web.listener.HelloListener</listener-class>
  10. </listener>
  11.  
  12. <listener>
  13. <listener-class>cn.zzsxt.lee.web.listener.HiListener</listener-class>
  14. </listener>
  15.  
  16. <welcome-file-list>
  17. <welcome-file>index.jsp</welcome-file>
  18. </welcome-file-list>
  19. </web-app>

  HelloListener:

  1. import javax.servlet.ServletContextEvent;
  2. import javax.servlet.ServletContextListener;
  3.  
  4. public class HelloListener implements ServletContextListener {
  5.  
  6. @Override
  7. public void contextInitialized(ServletContextEvent sce) {
  8. // 系统默认加载的数据
  9. System.out.println("我是初始化方法,我被调用了");
  10. }
  11.  
  12. @Override
  13. public void contextDestroyed(ServletContextEvent sce) {
  14. System.out.println("我是销毁方法,我被调用了");
  15. }
  16.  
  17. }

  HiListener:

  1. import javax.servlet.http.HttpSessionAttributeListener;
  2. import javax.servlet.http.HttpSessionBindingEvent;
  3.  
  4. public class HiListener implements HttpSessionAttributeListener {
  5.  
  6. @Override
  7. public void attributeAdded(HttpSessionBindingEvent event) {
  8. System.out.println("添加会被调用");
  9. }
  10.  
  11. @Override
  12. public void attributeRemoved(HttpSessionBindingEvent event) {
  13. System.out.println("移除时会被调用");
  14. }
  15.  
  16. @Override
  17. public void attributeReplaced(HttpSessionBindingEvent event) {
  18. System.out.println("替换时会被调用");
  19. }
  20.  
  21. }

  ManyListener:

  

  1. import javax.servlet.ServletContextAttributeEvent;
  2. import javax.servlet.ServletContextAttributeListener;
  3. import javax.servlet.ServletContextEvent;
  4. import javax.servlet.ServletContextListener;
  5. import javax.servlet.ServletRequestAttributeEvent;
  6. import javax.servlet.ServletRequestAttributeListener;
  7. import javax.servlet.ServletRequestEvent;
  8. import javax.servlet.ServletRequestListener;
  9. import javax.servlet.http.HttpSessionAttributeListener;
  10. import javax.servlet.http.HttpSessionBindingEvent;
  11. import javax.servlet.http.HttpSessionEvent;
  12. import javax.servlet.http.HttpSessionListener;
  13.  
  14. public class ManyListener implements ServletContextListener, ServletContextAttributeListener, HttpSessionListener, HttpSessionAttributeListener, ServletRequestListener, ServletRequestAttributeListener {
  15.  
  16. @Override
  17. public void attributeAdded(ServletRequestAttributeEvent srae) {
  18. srae.getServletRequest().getAttribute("username");
  19. // TODO Auto-generated method stub
  20.  
  21. }
  22.  
  23. @Override
  24. public void attributeRemoved(ServletRequestAttributeEvent srae) {
  25. // TODO Auto-generated method stub
  26.  
  27. }
  28.  
  29. @Override
  30. public void attributeReplaced(ServletRequestAttributeEvent srae) {
  31.  
  32. }
  33.  
  34. @Override
  35. public void requestDestroyed(ServletRequestEvent sre) {
  36. // TODO Auto-generated method stub
  37.  
  38. }
  39.  
  40. @Override
  41. public void requestInitialized(ServletRequestEvent sre) {
  42. // TODO Auto-generated method stub
  43.  
  44. }
  45.  
  46. @Override
  47. public void attributeAdded(HttpSessionBindingEvent event) {
  48. // TODO Auto-generated method stub
  49.  
  50. }
  51.  
  52. @Override
  53. public void attributeRemoved(HttpSessionBindingEvent event) {
  54. // TODO Auto-generated method stub
  55.  
  56. }
  57.  
  58. @Override
  59. public void attributeReplaced(HttpSessionBindingEvent event) {
  60. // TODO Auto-generated method stub
  61.  
  62. }
  63.  
  64. @Override
  65. public void sessionCreated(HttpSessionEvent se) {
  66. // TODO Auto-generated method stub
  67.  
  68. }
  69.  
  70. @Override
  71. public void sessionDestroyed(HttpSessionEvent se) {
  72. // TODO Auto-generated method stub
  73.  
  74. }
  75.  
  76. @Override
  77. public void attributeAdded(ServletContextAttributeEvent arg0) {
  78. // TODO Auto-generated method stub
  79.  
  80. }
  81.  
  82. @Override
  83. public void attributeRemoved(ServletContextAttributeEvent arg0) {
  84. // TODO Auto-generated method stub
  85.  
  86. }
  87.  
  88. @Override
  89. public void attributeReplaced(ServletContextAttributeEvent event) {
  90. // TODO Auto-generated method stub
  91.  
  92. }
  93.  
  94. @Override
  95. public void contextDestroyed(ServletContextEvent event) {
  96. // TODO Auto-generated method stub
  97.  
  98. }
  99.  
  100. @Override
  101. public void contextInitialized(ServletContextEvent event) {
  102. // TODO Auto-generated method stub
  103.  
  104. }
  105.  
  106. }

2.上传:

  jar:

  index.jsp:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
  5. + path + "/";
  6. %>
  7.  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12.  
  13. <title>My JSP 'index.jsp' starting page</title>
  14. </head>
  15.  
  16. <body>
  17.  
  18. <form action="upload.sxt" enctype="multipart/form-data" method="post">
  19. 上传头像:
  20. <input type="file" name="headPhoto" />
  21. 用户名:<input type="text" name="username" />
  22. <input type="submit" value="提交" />
  23. </form>
  24.  
  25. <!--
  26.  
  27. 上传必须遵循以下规则:
  28. 文件的上传需要在form表单添加enctype属性,值必须为multipart/form-data
  29. 请求方式一定要是post,不能使用get
  30. enctype="multipart/form-data" method="post"
  31. 会把需要上传的文件转换为字节流
  32. 所以在servlet中无法使用request.getParameter()获取
  33.  
  34. 在上传成功后,文件头部会出现:
  35. ------WebKitFormBoundaryG5qMELzS6gD7bSK6
  36. Content-Disposition: form-data; name="headPhoto"; filename="meinv.jpg"
  37. Content-Type: image/jpeg
  38.  
  39. 上传流程:
  40. 1.首先把需要上传的图片转换为字节流enctype="multipart/form-data" method="post"
  41. 2.在servlet接收:request.getInputStream();字节流
  42. 3.客户端向服务器端上传相对于服务器来说是输入流
  43. 4.服务器要把字节流转换为文件格式
  44. 5.关闭资源(为空判定)
  45.  
  46. -->
  47.  
  48. </body>
  49. </html>

  UploadServlet:

  1. package cn.zzsxt.lee.web.servlet;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. import java.util.Date;
  9. import java.util.Iterator;
  10. import java.util.List;
  11. import java.util.UUID;
  12.  
  13. import javax.servlet.ServletContext;
  14. import javax.servlet.ServletException;
  15. import javax.servlet.annotation.WebServlet;
  16. import javax.servlet.http.HttpServlet;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpServletResponse;
  19.  
  20. import org.apache.commons.fileupload.FileItem;
  21. import org.apache.commons.fileupload.FileItemFactory;
  22. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  23. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  24.  
  25. @WebServlet("/upload.sxt")
  26. public class UploadServlet extends HttpServlet {
  27.  
  28. @Override
  29. protected void service(HttpServletRequest request, HttpServletResponse response)
  30. throws ServletException, IOException {
  31. // File.separator:/
  32. // 在windows中E:\\,但是在mac中/Desctop/,在linux中也是
  33. // 获取项目全局作用域:application
  34. ServletContext context = this.getServletContext();// ServletContext就是application
  35. // context.getRealPath:zzsxt/
  36. // tempDirectory:zzsxt/temp
  37. // fileDirectory:zzsxt/upload
  38. // 满64K写入的路径
  39. String tempDirectory = context.getRealPath(File.separator + "temp");
  40. // 最终上传到服务器上的路径
  41. String fileDirectory = context.getRealPath(File.separator + "picture");
  42.  
  43. try {
  44. // 写满该大小的缓存后,存入硬盘中。
  45. int sizeThreshold = 1024 * 64;// 设置每几K写入一次
  46. // 创建临时文件夹目录
  47. File repositoryFile = new File(tempDirectory);// 创建临时文件夹
  48. // 首先创建一个文件工厂:每64k就往临时文件夹写入一次数据
  49. FileItemFactory factory = new DiskFileItemFactory(sizeThreshold, repositoryFile);
  50. // jar给创建好了一个servlet来处理上传功能-->需要传入一个参数:factory
  51. ServletFileUpload upload = new ServletFileUpload(factory);
  52. // 设置上传文件的大小限制
  53. upload.setSizeMax(500 * 1024 * 1024);// 文件最大上传大小,文件最大上传500M,多于500M就报错给你看
  54. // 开始解析请求数据,将输入写到临时文件夹(一个表单域就是list的一个对象)
  55. List items = upload.parseRequest(request);//request也就是相当于request.getInputStream();
  56. // 开始遍历获取数据
  57. Iterator iter = items.iterator();// 遍历list集合(客户端上传的字节流)
  58. while (iter.hasNext()) {
  59. // 获取一个表单域资源
  60. FileItem item = (FileItem) iter.next(); // FileItem就是表示一个表单域:所谓表单域就是<form></form>标签面的东西
  61. // 判断当前资源是否是一个文件(isFormField方法用于判断FileItem是否代表一个普通表单域(即非file表单域))
  62. if (item.isFormField()) {// 判断客户端传过来的数据是否为一个普通表单域(所谓普通表单域就是非file的表单域text password select radio checkbox...)
  63. // 返回表单域的名字
  64. System.out.println("普通表单域的名字---------------" + item.getFieldName());
  65. // 返回表单域的值
  66. System.out.println("普通表单域的值----------------" + item.getString("utf-8"));
  67. // 比如说要通过username进行查询
  68. request.getParameter("username");
  69. // 从数据库查询数据
  70. // 调用service-->dao-->sql-->最终从数据库查询出值
  71. } else {
  72. // 就是file类型
  73. // 获取表单域name属性的值
  74. String fieldName = item.getFieldName();// headPhoto
  75. System.out.println(fieldName);
  76. // 返回该文件在客户机上的文件名。e.g: e:\dianying\\video\1.wmv
  77. String fileName = item.getName();// 才是文件名(包含了服务器的路径)
  78. // 获取文件的类型
  79. String fileType = fileName.substring(fileName.lastIndexOf("."));// 从获取的文件名中截取出该文件的类型.txt;.jpg;.java.zip...
  80. // System.out.println("文件域的名字--*****" + fieldName);
  81. // System.out.println("上传文件的名字*****" + fileName);
  82. // System.out.println("上传文件的类型*****" + fileType);
  83. // 创建一个真实的文件目录
  84. // 只有这才是真正上传,前面其他的东西都是为了这一步做铺垫
  85. // zzsxt/upload/201707084132141321321fjdhfjdsh4718467363217.jpg
  86. File uploadedFile = new File(fileDirectory + File.separator + new Date().getTime()
  87. + UUID.randomUUID().toString() + fileType);
  88. // 将临时文件写入到真实文件夹里面去
  89. item.write(uploadedFile);
  90. }
  91. }
  92. } catch (Exception e) {
  93. e.printStackTrace();
  94. }
  95. }
  96.  
  97. public void ioUpload(HttpServletRequest request, HttpServletResponse response) throws Exception {
  98. // 上传和下载功能,一般情况下使用IO流
  99. InputStream ip = request.getInputStream();
  100. // System.out.println(ip.available());// 接收到数量
  101. OutputStream os = new FileOutputStream("E:\\java_tools\\meinv" + UUID.randomUUID().toString() + ".jpg");
  102. byte[] bytes = new byte[1024 * 8];// 每8k写入一次
  103. int len = 0;
  104. while ((len = ip.read(bytes)) != -1) {
  105. os.write(bytes, 0, len);
  106. }
  107. os.flush();
  108. if (os != null) {
  109. os.close();
  110. }
  111. if (ip != null) {
  112. ip.close();
  113. }
  114.  
  115. // 要把上传记录保存在数据库中
  116. // insert into语句
  117. // 首先要保存路径
  118. // 然后需要保存客户上传的文件名
  119. // 最后还需要保存文件在服务器上的名字
  120. }
  121.  
  122. }

3.下载:

  .txt:

  

  1. 几年前,他无助时,她救了他,他那时候觉得他对她有一点好感,却不知道,自己已经已经陷入爱情的深渊,那个散发着纯净气息的无辜眼神,令他沦陷。几年后,她在闺蜜榕衫介绍的工作下,无意中当上了他的女仆,他发现了,她就是几年前的她……她娇弱的靠在他怀里,他的心,乱了。

  index.jsp:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
  5. + path + "/";
  6. %>
  7.  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12.  
  13. <title>My JSP 'index.jsp' starting page</title>
  14. </head>
  15.  
  16. <body>
  17.  
  18. <a href="dowload.sxt?fileName=bdzcasw.txt">霸道总裁爱上我-简介</a>
  19.  
  20. </body>
  21. </html>

  DownloadServlet:

  

  1. package cn.zzsxt.lee.web.servlet;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8.  
  9. import javax.servlet.ServletException;
  10. import javax.servlet.annotation.WebServlet;
  11. import javax.servlet.http.HttpServlet;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;
  14.  
  15. @WebServlet("/dowload.sxt")
  16. public class DownloadServlet extends HttpServlet {
  17.  
  18. @Override
  19. protected void service(HttpServletRequest request, HttpServletResponse response)
  20. throws ServletException, IOException {
  21. request.setCharacterEncoding("UTF-8");
  22. response.setCharacterEncoding("UTF-8");
  23. response.setContentType("text/html;charset=UTF-8");
  24. // 获取需要下载的文件名
  25. String fileName = request.getParameter("fileName");
  26. // zzsxt/upload/需要下载的文件名
  27. InputStream ip = new FileInputStream(
  28. this.getServletContext().getRealPath(File.separator + "upload" + File.separator + fileName));
  29. // 清空response
  30. response.reset();
  31. // 文件名中有可能存在中文-->中文乱码
  32. // 把中文的文件名转换为字节数组
  33. // UTF-8就是为了统一编码集
  34. // ISO-8859-1:就是为了能发送字节流,默认情况下UTF-8是不能发送字节流
  35. /*fileName.getBytes("UTF-8");
  36. String str = new String(fileName.getBytes("UTF-8"), "IOS-8859-1");*/
  37. response.addHeader("Content-Disposition",
  38. "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1"));
  39. response.addHeader("Content-Length", "" + ip.available());
  40. // 服务器把客户端需要下载文件写出(转换成流的方式写出)
  41. OutputStream op = response.getOutputStream();
  42. byte[] bytes = new byte[1024 * 8];
  43. int len = 0;
  44. while ((len = ip.read(bytes)) != -1) {
  45. op.write(bytes, 0, len);
  46. }
  47. op.flush();
  48. if (op != null) {
  49. op.close();
  50. }
  51. if (ip != null) {
  52. ip.close();
  53. }
  54.  
  55. }
  56.  
  57. }

 

java:(监听,上传,下载)的更多相关文章

  1. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

  2. CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  3. java实现文件上传下载

    喜欢的朋友可以关注下,粉丝也缺. 今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷. 想必大家都知道文件的上传前端页面 ...

  4. java web 文件上传下载

    文件上传下载案例: 首先是此案例工程的目录结构:

  5. FasfDFS整合Java实现文件上传下载

    文章目录     一 : 添加配置文件     二 : 加载配置文件         1. 测试加载配置文件         2. 输出配置文件     三:功能实现         1.初始化连接信 ...

  6. fastDFS与java整合文件上传下载

    准备 下载fastdfs-client-java源码 源码地址 密码:s3sw 修改pom.xml 第一个plugins是必需要的,是maven用来编译的插件,第二个是maven打源码包的,可以不要. ...

  7. java web service 上传下载文件

    1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; imp ...

  8. FasfDFS整合Java实现文件上传下载功能实例详解

    https://www.jb51.net/article/120675.htm 在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java ...

  9. java+大文件上传下载

    文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...

  10. 【转】Java IOUtils方式上传下载文件 on HDFS

    [From]https://www.cnblogs.com/areyouready/p/9795442.html package com.css.hdfs04; import java.io.File ...

随机推荐

  1. [CF 1238F] The Maximum Subtree 树DP

    题意 给定一颗树,求这个树的最大子树,且这个子树是一个good-tree. good-tree的定义是:每个节点可以表示成一个数值区间,而树上的边表示两个点表示的数值区间相交. 题解 通过分析可以发现 ...

  2. Highcharts动态获取值

    <script type="text/javascript">         $(document).ready(function (){         var o ...

  3. ZOJ3471Most Powerful(状态压缩)

    问题 Recently, researchers on Mars have discovered N powerful atoms. All of them are different. These ...

  4. ssm框架使用详解&配置两个数据源

    学习ssm框架已经快一年了,今天把这个框架总结一下. SSM 就是指 spring.SpringMVC和Mybatis.先说一下基本概念(百度上搜的) 1.基本概念 1.1.Spring Spring ...

  5. Centos7——docker持久化存储和卷间状态共享(笔记)

    docker持久化存储和卷间状态共享(笔记)  本章介绍 存储卷的介绍 存储卷的两种类型 宿主机好额容器之间如何共享数据 容器之间如何共享数据 存储卷的声明周期 存储卷之间的数据管理和控制模式 就像在 ...

  6. Tomcat部署多个Springboot项目报错 InstanceNotFoundException: com.alibaba.druid:type=DruidDataSourceStat

    在一个tomcat服务器下部署了多个采用阿里druid作为数据连接池,结果启动报错.原因是不能在一个tomcat服务器下不能直接部署多个druid作为数据连接池的项目,需要配置. 解决办法: 在spr ...

  7. mysql内存分配问题

    云数据库 MySQL 的内存是重要的性能参数,常出现由异常 SQL 请求以及待优化的数据库导致的内存利用率升高的情况,严重时还会出现由于 OOM 导致实例发生 HA 切换,影响业务的稳定及可用性. M ...

  8. Ubuntu访问samba共享文件方法

    1.1  安装samba客户端 sudo apt-get install smbclient -y 1.2  查看文件共享权限 smbclient -L //192.168.100.6 1.3  创建 ...

  9. wkhtmltopdfhtml php生成pdf快照,网页截图,网页快照完整版 (原)

    首先,安装(linux安装为例) 1.下载wkhtmltopdf wget http://download.gna.org/wkhtmltopdf/obsolete/linux/wkhtmltopdf ...

  10. python3 使用装饰器,及函数作为参数

    #装饰import typesdef shucai(n): print('蔬菜价格7') if type(n)==types.FunctionType: return n()+7 return n+7 ...