【JavaWeb】案例:读取 WEB 工程下的资源文件、文件下载、点击切换验证码
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️
👀专栏介绍
【JavaWeb】 目前主要更新JavaWeb,一起学习一起进步。
👀本期介绍
本期主要介绍读取 WEB 工程下的资源文件、文件下载、点击切换验证码
文章目录
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
种情况,两种跳转方式可以相互替代
请求外网,用重定向,其他所有使用请求转发即可