千峰 Servlet
温老师 https://www.bilibili.com/video/BV1Ga4y1Y7Ah
课程目标:
- CS/BS 架构
- Tomcat
- Servlet
- Servlet应用
- Cookie/Session
- Filter 管理器
958794123
一、引言
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-grwMaBSy-1639054040115)(E:\app\Typora\img\image-20211114141842107.png)]
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-zDk833UC-1639054040117)(E:\app\Typora\img\image-20211114141953536.png)]
二 、服务器
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-y5bxgsJv-1639054040118)(E:\app\Typora\img\image-20211114142119618.png)]
2.2 常见服务器
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-JvFqY6KG-1639054040120)(E:\app\Typora\img\image-20211114142423176.png)]
2.3 Tomcat 服务器
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-LylUFyup-1639054040123)(E:\app\Typora\img\image-20211114145414178.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vCq8Nnnt-1639054040125)(E:\app\Typora\img\image-20211114145453543.png)]
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-aqv6JggL-1639054040127)(E:\app\Typora\img\image-20211114145938690.png)]
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-vqjBoPEX-1639054040130)(E:\app\Typora\img\image-20211114150152964.png)]
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-f9dITkAN-1639054040131)(E:\app\Typora\img\image-20211114150251902.png)]
2.6 项目部署及访问静态资源
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-RXoIt4Kj-1639054040133)(E:\app\Typora\img\image-20211114150335983.png)]
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-9Qnwq9QA-1639054040135)(E:\app\Typora\img\image-20211114151121164.png)]
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-vHTfIjM4-1639054040138)(E:\app\Typora\img\image-20211114151151594.png)]
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-8WZ3s0eg-1639054040140)(E:\app\Typora\img\image-20211114151218179.png)]
2.7 常见错误
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-3OxTnGbj-1639054040141)(E:\app\Typora\img\image-20211114151243909.png)]
三、 Servlet 【重点】
3.1 概念
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-NVlJrZbe-1639054040143)(E:\app\Typora\img\image-20211114151429566.png)]
3.2 开发步骤
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-k4BgFL7G-1639054040145)(E:\app\Typora\img\image-20211114151511547.png)]
3.2.2 编写Servlet
public class servlet implements Servlet {
@Override public void init(ServletConfig servletConfig) throws ServletException {
} @Override public ServletConfig getServletConfig() {
return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("My First Servlet!");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m5FBLmuJ-1639054040147)(E:\app\Typora\img\image-20211114152950630.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-77Md4cyI-1639054040149)(E:\app\Typora\img\image-20211114152909983.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HdwXLKVD-1639054040150)(E:\app\Typora\img\image-20211114153346409.png)]
检查Servlet是否编写异常
四、使用Idea创建web项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ihzy4njJ-1639054040153)(E:\app\Typora\img\image-20211114153641470.png)]
4.2 Idea开发Servlet
- 编写Servlet
- 配置web.xml
- 部署web.xml
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BWN3shgX-1639054040155)(E:\app\Typora\img\image-20211114154138920.png)]
导入第三方jar包
4.4.2 导出war包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UiPLoDcu-1639054040157)(E:\app\Typora\img\image-20211114195635104.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ZW3Ko47-1639054040159)(E:\app\Typora\img\image-20211114200828019.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3LAGQ2l-1639054040161)(E:\app\Typora\img\image-20211114200847467.png)]
五、HTTP协议
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bzk4nyKw-1639054040163)(E:\app\Typora\img\image-20211114200918581.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JpeAvVlb-1639054040165)(E:\app\Typora\img\image-20211114201022119.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UwhP5pAo-1639054040167)(E:\app\Typora\img\image-20211114201414195.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xw7Y3IEQ-1639054040169)(E:\app\Typora\img\image-20211114201428873.png)]
5.4 请求报文
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3LWdrAJn-1639054040171)(E:\app\Typora\img\image-20211114201603885.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SL9P6inx-1639054040173)(E:\app\Typora\img\image-20211114201638620.png)]
响应报文
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zAcFs20N-1639054040175)(E:\app\Typora\img\image-20211114201913158.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ebemN07e-1639054040176)(E:\app\Typora\img\image-20211114202025607.png)]
状态码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XIEJJ7wv-1639054040180)(E:\app\Typora\img\image-20211114202111358.png)]
六、Servlet详解【重点】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LTGENkdH-1639054040184)(E:\app\Typora\img\image-20211114202234865.png)]
6.1.2 GenericServlet 抽象类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-miFHfijc-1639054040186)(E:\app\Typora\img\image-20211114202532749.png)]
6.2 两种方式创建Servlet
- 实现接口Servlet
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BXHAddos-1639054040188)(E:\app\Typora\img\image-20211114211434124.png)]
该方式比较麻烦,需要实现接口中的所有方法
- 继承HttpServlet
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T0419Ni9-1639054040189)(E:\app\Typora\img\image-20211114211519850.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l8P85k51-1639054040191)(E:\app\Typora\img\image-20211114211621436.png)]
6.3 Servlet的两种配置方式
6.3.1 使用web.xml (Servlet2.5之前使用)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Frx5F9Op-1639054040195)(E:\app\Typora\img\image-20211114212011161.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EaAwkRcL-1639054040197)(E:\app\Typora\img\image-20211114212104571.png)]
6.3.2 使用注解(Servlet3.0后支持,推荐)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rf3nSFu1-1639054040199)(E:\app\Typora\img\image-20211114215218333.png)]
七、Servlet应用【重点】
7.1 request 对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3VUTLwf0-1639054040201)(E:\app\Typora\img\image-20211114220345042.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z9ZTzn8D-1639054040203)(E:\app\Typora\img\image-20211114220409019.png)]
7.1.2 request 主要方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pe8uAsop-1639054040206)(E:\app\Typora\img\image-20211114220526641.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f4NsSaV3-1639054040207)(E:\app\Typora\img\image-20211114221937313.png)]
7.1.5 中文乱码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kNL8TGQg-1639054040209)(E:\app\Typora\img\image-20211114222013659.png)]
7.2 response 对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hbxjd8sH-1639054040212)(E:\app\Typora\img\image-20211114222947677.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQEYE3QS-1639054040218)(E:\app\Typora\img\image-20211114224533410.png)]
7.2.2 解决输出中文乱码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1k8gEe3k-1639054040220)(E:\app\Typora\img\image-20211114224621148.png)]
7.3 综合案例(Servlet + JDBC)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2EfB4GSC-1639054040221)(E:\app\Typora\img\image-20211114224933344.png)]
八、转化与重定向
8.1 现有问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NYMGSExT-1639054040223)(E:\app\Typora\img\image-20211115221154420.png)]
8.1.1 业务、显示分离
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q1GOxxTl-1639054040224)(E:\app\Typora\img\image-20211115221633430.png)]
8.2 转发
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vz2URndR-1639054040226)(E:\app\Typora\img\image-20211115221751410.png)]
8.2.2 数据传递
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WaUEdrde-1639054040231)(E:\app\Typora\img\image-20211115223242881.png)]
8.2.3 转发的特点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qd2nGUSy-1639054040233)(E:\app\Typora\img\image-20211115224409432.png)]
8.3 重定向
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OaxulIft-1639054040235)(E:\app\Typora\img\image-20211115224847724.png)]
8.3.2 数据传递
- Response 传递数据 只能是String类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZYipDNrt-1639054040237)(E:\app\Typora\img\image-20211115225130132.png)]
8.3.3 重定向的特点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-488TMKyp-1639054040239)(E:\app\Typora\img\image-20211115225402567.png)]
8.4 转发、重定向总结
- 不建议使用sendRedirect进行传递数据,明文传递数据不安全
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ohrOIXpO-1639054040242)(E:\app\Typora\img\image-20211115225457977.png)]
九、Servlet 生命周期
9.1 生命周期的是个阶段
9.1.1 实例化
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LbFRKbTL-1639054040245)(E:\app\Typora\img\image-20211115225720696.png)]
9.1.2 初始化
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x6Kc1Lsu-1639054040249)(E:\app\Typora\img\image-20211115225833487.png)]
9.1.3 服务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FLc0V9pz-1639054040254)(E:\app\Typora\img\image-20211115225845412.png)]
9.1.4 销毁
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H62036uT-1639054040257)(E:\app\Typora\img\image-20211115225858488.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yHqA7mtA-1639054040258)(E:\app\Typora\img\image-20211115230228125.png)]
@WebServlet("/ls")
public class LifeServlet implements Servlet {
public LifeServlet(){
System.out.println("1、实例化");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2、初始化");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3、接收请求,响应结果");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4、销毁");
}
}
十、Servlet特性
10.1 线程安全问题
Servlet的成员变量 message
10.2 如何保证线程安全
既能解决线程安全、又能解决性能问题 就是局部变量了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o6p2yrKu-1639054040259)(E:\app\Typora\img\image-20211115231545580.png)]
@WebServlet(name = "NumberServlet",value = "/numberServlet")
public class NumberServlet extends HttpServlet {
// 成员变量只有一份
// private int number;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 局部变量
int number = 1;
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.print("您的数字是:" + number);
number++;
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
十一、状态管理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvNlaM30-1639054040262)(E:\app\Typora\img\image-20211116211825604.png)]
十二、Cookie 的使用
12.1 什么是 Cookie
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pc3EmtoN-1639054040275)(E:\app\Typora\img\image-20211116212025193.png)]
12.2 创建 Cookie
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UTOpMdYt-1639054040277)(E:\app\Typora\img\image-20211116213137177.png)]
12.3 获取 Cookie
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZCtlWEHG-1639054040279)(E:\app\Typora\img\image-20211116214052841.png)]
- 防止Cookie为空,获取完Cookie后要判断
12.4 修改 Cookie
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EdKrixDU-1639054040280)(E:\app\Typora\img\image-20211116215754764.png)]
12.5 Cookie 编码与解码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f7LD9yLX-1639054040282)(E:\app\Typora\img\image-20211116220618103.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8duAoUKU-1639054040283)(E:\app\Typora\img\image-20211116220450003.png)]
12.6 Cookie 的优点和缺点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jykd2vy7-1639054040284)(E:\app\Typora\img\image-20211116220519098.png)]
十三、Session对象 【重点】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DnjoA8TZ-1639054040286)(E:\app\Typora\img\image-20211116220717409.png)]
13.3 Session 使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ujWF0Vbj-1639054040288)(E:\app\Typora\img\image-20211116220931596.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3T8chJbq-1639054040289)(E:\app\Typora\img\image-20211116222045968.png)]
13.4 Session 与 request 的区别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YjY5kEdK-1639054040290)(E:\app\Typora\img\image-20211116222644497.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yjFX8tAO-1639054040293)(E:\app\Typora\img\image-20211116222730858.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fTYLsZ4d-1639054040294)(E:\app\Typora\img\image-20211116222756744.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7wmVwMZj-1639054040296)(E:\app\Typora\img\image-20211116222817594.png)]
13.5 Session 的生命周期
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p1JqulK7-1639054040297)(E:\app\Typora\img\image-20211116222944480.png)]
13.4 浏览器禁用Cookie解决方案【了解】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i1PGHkr1-1639054040298)(E:\app\Typora\img\image-20211116223523283.png)]
13.5 Session实战权限验证
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TwyRnQwL-1639054040305)(E:\app\Typora\img\image-20211116224103549.png)]
13.6 Session 实战保存验证码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wjKoF5Ie-1639054040308)(E:\app\Typora\img\image-20211116225139483.png)]
十四、ServletContext对象【重点】
14.1 ServletContext概述
14.2 获取 ServletContext 对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AGx1fkFi-1639054040329)(E:\app\Typora\img\image-20211116225814510.png)]
14.3 ServletContext 作用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lXB5H29A-1639054040333)(E:\app\Typora\img\image-20211117203446755.png)]
14.4 ServletContext 特点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PUOS1hKW-1639054040335)(E:\app\Typora\img\image-20211117203507972.png)]
14.5 ServletContext 应用场景
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wyq1xY2F-1639054040338)(E:\app\Typora\img\image-20211117203641184.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xdjldVHQ-1639054040340)(E:\app\Typora\img\image-20211117203711500.png)]
14.6 作用域总结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-byPewpWU-1639054040342)(E:\app\Typora\img\image-20211117203751672.png)]
十五、过滤器【重点】
15.1 现有问题
15.2 概念
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d0VRJeDX-1639054040343)(E:\app\Typora\img\image-20211117203922374.png)]
15.3 过滤器作用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W7B8cP03-1639054040345)(E:\app\Typora\img\image-20211117204152823.png)]
15.4 编写过滤器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zXDvyks4-1639054040347)(E:\app\Typora\img\image-20211117204259040.png)]
@WebFilter(filterName = "MyFilter",value = "/t")
public class MyFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("过滤前 -- MyFilter--");
chain.doFilter(req, resp);
System.out.println("过滤后 --end--");
}
@Override
public void init(FilterConfig config) throws ServletException {
}
}
15.5 过滤器配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-idIPwCKS-1639054040348)(E:\app\Typora\img\image-20211117205039775.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LZTnNzo1-1639054040349)(E:\app\Typora\img\image-20211117205059155.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zmbuouVj-1639054040350)(E:\app\Typora\img\image-20211117205250700.png)]
15.6 过滤器链和优先级
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rgz9hdiJ-1639054040352)(E:\app\Typora\img\image-20211117205320389.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SraBLQhH-1639054040354)(E:\app\Typora\img\image-20211117205642152.png)]
15.7 过滤器的典型应用
15.7.1 过滤器解决编码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HlNQGFIs-1639054040357)(E:\app\Typora\img\image-20211117210354759.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yeA4nWey-1639054040358)(E:\app\Typora\img\image-20211117210939492.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8tnFKTad-1639054040360)(E:\app\Typora\img\image-20211117210731725.png)]
15.7.2 权限验证
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-05zqi307-1639054040361)(E:\app\Typora\img\image-20211117211005369.png)]
十六、综合案例(EMS)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I055CjEL-1639054040362)(E:\app\Typora\img\image-20211117211543104.png)]
补充
https://www.bilibili.com/video/BV1Ta4y1H7Vc?p=39
1. 文件上传
1.1 前台页面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2TuVviax-1639054040363)(E:\app\Typora\img\image-20211117231114016.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RuN4xDPb-1639054040364)(E:\app\Typora\img\image-20211117231229418.png)]
1.2 后台实现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tNFEwF6R-1639054040365)(E:\app\Typora\img\image-20211117231322708.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F2VQO20p-1639054040367)(E:\app\Typora\img\image-20211117231355439.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fRGIIoQk-1639054040368)(E:\app\Typora\img\image-20211117231625400.png)]
2. 文件下载
2.1 超链接下载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D9o3yVOt-1639054040370)(E:\app\Typora\img\image-20211117233229691.png)]
<!-- 浏览器能够识别的文件 默认打开-->
<a href="./download/test.txt">文本文件</a>
<a href="./download/test.jpg">图片文件</a>
<!-- 浏览器不能识别的文件 默认下载-->
<a href="./download/test.zip">压缩文件</a>
<hr>
<!-- 浏览器下载可识别的文件 download属性 -->
<a href="./download/test.txt" download>文件</a>
<a href="./download/test.jpg" download="比萨斜塔.jpg">文件</a>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Ge2sF9K-1639054040371)(E:\app\Typora\img\image-20211117233732016.png)]
2.2 后台实现下载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KxGWRBmN-1639054040373)(E:\app\Typora\img\image-20211117234522405.png)]
<form action="/Servlet/downloadServlet">
文件名:<input type="text" name="fileName" placeholder="请输入要下载的文件名">
<button>下载</button>
</form>
@WebServlet(name = "DownloadServlet",value = "/downloadServlet")
public class DownloadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("文件下载 ....");
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String fileName = request.getParameter("fileName");
if(fileName==null || "".equals(fileName.trim())){
System.out.println("文件名输入为空");
response.getWriter().write("请输入要下载的文件名!");
response.getWriter().close();
return;
}
// 得到图片存放的路径
String path = request.getServletContext().getRealPath("/download/");
// 通过路径得到File对象
File file = new File(String.valueOf(Path.of(path,fileName)));
// 判断文件对象是否存在,并且是一个标准文件
if(file.exists() && file.isFile()){
System.out.println("下载文件:"+file.getPath());
// 设置响应类型(浏览器无法使用某种方式或激活某个程序来处理MIME类型)
response.setContentType("application/x-msdownload");
// 设置响应头
response.setHeader("Content-Disposition","attachment;filename="+fileName);
// 得到输入流
FileInputStream fis = new FileInputStream(file);
byte[] bytes = new byte[1024];
ServletOutputStream out = response.getOutputStream();
int len = 0;
while((len=fis.read(bytes))!=-1){
out.write(bytes);
}
// 关闭流
out.close();
fis.close();
}else{
System.out.println("文件不存在");
response.getWriter().write("文件不存在,请重试!");
response.getWriter().close();
}
}
3. 监听器
https://www.bilibili.com/video/BV1mE411h7Co?p=280
3.1 Servlet 监听器的概述
3.1.1 什么是监听器
监听器就是一个