JavaEE基础十一之web常用功能

  • servlet文件上传

    • 流处理实现文件上传----pass
      • 流处理方式:
        • C端:
          • 表单属性设置为enctype=“multipart/form-data”,且为post方式
        • B->S的数据格式
        • S端:
          • ServletInputStream按行读取数据
          • 需要将末尾的\r\n的两个字节从结果中删除
    • 带进度条的文件上传
      • 通过流解析请求体中的数据时,可以计算当前读取的字节数,结合请求头中的Content-length属性计算当前上传的进度信息,然后通过session 供页面以ajax的方式读取
      • 补充:如果非流式解析请求体中数据?
    • 封装自动装配属性的文件上传工具
    • 第三方文件上传工具
      • 提供额外的定制化功能:
        • 如限制上传文件大小、上传文件类型、选择上传文件缓存位置
      • 常见第三方上传组件
        • common-upload—这个也是我用的
        • smart-upload
  • servlet文件下载

    • 正确设置Servlet文件下载响应头

      • 响应中添加Content-Disposition

        response.addHeader("Content-Disposition","attachment:filename=test.txt");

      • 响应中设置正确的MIME内容类型

        response.setContentType("application/x-download");

    • 下载实现

      • jsp页面
      <body>
      <a href="downloadServlet?filename=aaa.txt&username=etc">aaa.txt</a>
      <a href="downloadServlet?filename=a.png&username=etc">a.png</a>
      </body>
      
      • 请求的实现
      该辅助类用于下载文件 FileDownload:
      public static void downloadByStream(File file,HttpResposne response){
          //设置MIME类型
          response.setContentType("application/x-download");
          //下载文件时显示的文件保存名称----下载文件File
          String fileDisplay=downloadFile.getName();
          //编码文件保存名称
          String fileNameDisplay=URLEncoder.encode(fileDisplay,"UTF-8");
          //设置文件保存名称响应头
          response.addHeader("Content-Disposition","attachment;filename="+fileNameDisplay);
          //读取文件 --输入流
          FileInputStream fis=new FileInputStream(downloadFile);
          //下载文件--输出流
          ServletOutputStream out=response.getOutputStream();
          int c=0;
          byte[] buf=new byte[1024];
          while((c=fis.read(buf,0,buf.length))!=-1){
            out.write(buf,0,c);
          }
          fis.close();
          out.close();
      }
      
      文件下载Servlet:
      String username =request.getParameter("username");
      if(username.equals("etc")){
        //获取请求文件名--这个前台传来的无谓,但必须映射到后台真实的文件名。
        String filename=request.getParameter("filename");
        //通过ServletContext对象获取网站部署路径,用于确定下载文件位置
        String path=getServletContext().getRealPath("/");
        //通过文件路径获取File对象
        File file=new File(path+"upload/"+filename);
        //调用下载工具进行下载
        FileDownload.downloadByStream(file,response);
      }else{
        response.sendRedirect("downLoad.jsp");
      }
      
  • 验证码校验

    • 验证码生成
    • 验证码显示与刷新
    • ajax校验验证码
  • CORS的跨域访问

    • 简介:
      • W3C标准,全程"跨域资源共享"
      • 允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服AJAX只能同源使用的限制
      • CROS需要浏览器和服务器同时支持。
      • 实现关键是服务器。只要服务器实现CORS接口,就可以跨源通信。
    • CORS请求分类
      • 简单请求
  • 消息推送

    • WEB环境中实时消息的限制
      • 实时消息:即实时的消息交换、例如热搜之类的
  • 消息推送的几种策略

    • 客户端轮询
      • 一个计时器,每一段时间让客户端向服务器发起一次主动请求用以查看是否有更新数据
      • 缺点:
        • 小型应用中可达到预期目的,但在时效性更为敏感,并发访问量更大的环境中不适用。
    • 更合理的推送实现方式
      • http客户端 主动请求
      • http服务器 受控被动响应->阻塞线程(等待消息)
  • 消息消费者

    • 锁定消费线程
      • 利用空白消息对象作为消费者线程锁,服务端响应被中断,锁定后线程只有在获取实际消息后才会继续执行,将最终响应发送给客户端
    • 消息等待序列
      • 将消费者SessionId和消费者试图消费的消息名称作为key,空白的消息对象作为值存放在HashTable中
  • 消息生产者

    • 根据SessionId和消息名称从消息等待队列中获取等待的消息对象,设置消息对象中的消息字符串数据,利用消息对象唤醒消费者线程。
  • 推送示例

  • JavaMail

    • 收发邮件
      • JavaMail:由Sun定义的一套收发电子邮件的API。不同厂商可以提供自己的实现类。但没有包含在JDK中,而作为JavaEE的一部分
      • java.mail.Transport类:
        • 专门用于执行邮件发送任务,封装某种邮件发送协议的底层实施细节。调用这个类中的方法将Message对象中封装的邮件数据发送到指定的SMTP服务器。
      • 发送邮件的一般步骤:
        1. 从Session对象中获得实现了某种邮件发送协议的Transport对象
        2. 使用Session对象创建Message对象,并调用Message对象的方法封装邮件数据
        3. 连接指定SMTP服务器,调用Transport对象中的邮件发送方法Message对象中封装的邮件数据
      • java.mail.Store类:
        • 用于执行邮件的接受任务;用于调用这个类的方法可以获取邮件中的各个邮件夹的信息。JavaMail使用Folder对象表示邮件夹,通过Folder对象的方法可以获取邮件夹中的所有邮件信息。Message类中就包含操作邮件的各种方法,例获取邮件的发送者,主题,正文内容,发送时间等
      • 接受邮件步骤:
        1. 从Session对象中获得实现某种邮件发送协议的Store对象
        2. 登录邮箱,连接POP3或IMAp4服务器
        3. 调用Store的getFolder方法,获取邮箱中某个邮件夹的Folder对象
        4. 调用Folder对象的getMessage或getMessages方法,获取邮件夹中某一封邮件或所有邮件每一封邮件以每一个Message对象返回。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值