• 【JavaWeb】案例:读取 WEB 工程下的资源文件、文件下载、点击切换验证码


    👍如果对你有帮助,给博主一个免费的点赞以示鼓励
    欢迎各位🔎点赞👍评论收藏⭐️

    👀专栏介绍

    【JavaWeb】 目前主要更新JavaWeb,一起学习一起进步。

    👀本期介绍

    本期主要介绍读取 WEB 工程下的资源文件、文件下载、点击切换验证码

    文章目录

    2、案例 2:读取 WEB 工程下的资源文件

    2.1、需求说明

    2.2、案例原型准备

    2.3、案例代码实现-JavaSE

    2.4、案例分析-JavaEE

    2.5、案例代码实现-JavaEE

    3、案例 3:文件下载

    3.1、需求说明

    3.2、需求分析

    3.3、案例代码实现-固定文件名

    3.3.1、动态获取文件名下载

    3.3.2、强制下载响应头设置

    3.3.3、解决下载文件名乱码工具使用

    4、案例 4:点击切换验证码

    4.1、需求说明

    4.2、案例代码实现

    5、知识讲解-程序跳转-重定向【重点】

    5.1、请求转发和重定向的区别【重点】

    2、案例 2:读取 WEB 工程下的资源文件

    2.1、需求说明

    要求分别使用 JavaSE JavaEE 的技术来获取 4 个文件 

    2.2、案例原型准备

    准备代码:

    2.3、案例代码实现-JavaSE

    2.4、案例分析-JavaEE

    因为 javaEE 项目最终部署到 tomcat 上运行,目录结构发生了改变,变为如下结构。
    所以我们需要使用 JavaEE 的方式才能获取到文件正确路径。

    我们使用 ServletContext getRealPath(String path);来获取文件的真实路径 

    path 路径需要写成 webapps 中的路径,项目名缩写为 /

    2.5、案例代码实现-JavaEE

    3、案例 3:文件下载

    3.1、需求说明

    分别使用超链接和 Servlet 程序,进行网站资源的下载。  

    3.2、需求分析

    超链接下载方式,其实就是依赖了缺省 Servlet 进行下载。

    而缺省 Servlet 无法处理中文,所以我们只能自己写 Servlet 程序,来帮我们获取中文资源进行下载 

    3.3、案例代码实现-固定文件名

    3.3.1、动态获取文件名下载

    3.3.2、强制下载响应头设置

    3.3.3、解决下载文件名乱码工具使用

    // 必须写在 getOutputStream() 之前
    response.setHeader("Content-Disposition", "attachment;filename="+filename);
    上传文件名乱码解决:
    new String("".getBytes("iso8859-1"),"utf-8");
    下载文件名中文乱码解决工具:(直接使用即可,谷歌未存在)
    /**
    * 解决中文下载乱码工具
    * @param fileName 需要解决乱码的文件名
    * @param request
    * @return
    */
    public static String base64EncodeFileName(String fileName,HttpServletRequest request)
    throws UnsupportedEncodingException {
    String result = fileName;
    String agent = request.getHeader("User-Agent");
    if(agent.contains("Firefox")){
    BASE64Encoder base64Encoder = new BASE64Encoder();
    try {
    result="=?UTF-8?B?"
    + new String(base64Encoder.encode(result
    .getBytes("UTF-8"))) + "?=";
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    throw new RuntimeException(e);
    }
    }else{
    result = URLEncoder.encode(result,"UTF-8");
    }
    return result;
    }

    4、案例 4:点击切换验证码

    4.1、需求说明

    在访问登录页面时,需要生产验证码。从而防止用户使用程序恶意登录。

    4.2、案例代码实现

    login.jsp

    Servlet

    5、知识讲解-程序跳转-重定向【重点】

    javaEE 资源跳转方式有两种:
    1 、 重定向
    2 、 请求转发
    今天我们来学习重定向方式进行资源跳转

    浏览器立即重新确定方向,再次请求(重定向)

    5.1、请求转发和重定向的区别【重点】

    主要区别:
    1 、 请求转发使用 request 对象,重定向使用 response 对象
    2 、 请求转发使用服务器端路径,重定向使用客户端路径
    3 、 请求转发不能跳转外网,重定向可以
    4 、 请求转发是服务器内部的跳转,不依赖网速,跳转速度极快。
    重定向是依赖浏览器的跳转,严重依赖网速,跳转速度略慢
    5 、 请求转发:请求一次,响应一次。 占用资源少
    重定向:重定向 N 次,响应 n+1 次。占用大量资源
    6 、 请求转发可以访问受保护目录资源,重定向不能
    7 、 请求转发不会改变地址栏路径,重定向会改变路径。
    安全:请求转发。会隐藏后面转发程序的访问路径。
    程序 BUG :由于请求转发不会更改地址,会导致用户重复访问某个 Servlet
    程序。改为重定向
    8 请求转发可以使用 request 作用域,重定向不能
    何时使用请求转发。
    1 、 为了安全,隐藏某些程序的访问路径
    2 、 为了效率
    3 、 为了内存占用率低
    4 、 访问受保护目录资源
    5 、 使用 request 作用域
    何时使用重定向:
    1 、 跳转外网路径
    2 、 改变地址栏访问路径
    除了以上 7 种情况,两种跳转方式可以相互替代

     

    请求外网,用重定向,其他所有使用请求转发即可 

  • 相关阅读:
    LeetCode/LintCode 题解丨一周爆刷字符串:乱序字符串
    Java空指针异常的正确理解
    React 路由/6版本
    (.htaccess文件特性)[MRCTF2020]你传你呢 1
    Windows简单安装redis
    python基础语法(七)
    Java Elasticsearch教程
    为什么前后端传数据要用json?
    思科Nexus 9000系列交换机光模块解决方案
    1786_MTALAB代码生成把通用函数生成独立文件
  • 原文地址:https://blog.csdn.net/weixin_45481821/article/details/126392770