0
点赞
收藏
分享

微信扫一扫

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


【JavaWeb】案例:读取 WEB 工程下的资源文件、文件下载、点击切换验证码_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、需求说明

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

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

2.2、案例原型准备


准备代码:




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


2.3、案例代码实现-JavaSE

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


2.4、案例分析-JavaEE


因为 javaEE 项目最终部署到 tomcat 上运行,目录结构发生了改变,变为如下结构。

所以我们需要使用 JavaEE 的方式才能获取到文件正确路径。

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


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


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


2.5、案例代码实现-JavaEE

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


3、案例 3:文件下载

3.1、需求说明

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

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

3.2、需求分析


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



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


而缺省 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、需求说明


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



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


4.2、案例代码实现


login.jsp



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


Servlet

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


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


javaEE 资源跳转方式有两种:


1 、 重定向


2 、 请求转发

今天我们来学习重定向方式进行资源跳转

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


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

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


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 种情况,两种跳转方式可以相互替代



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


 

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

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

举报

相关推荐

0 条评论