简述ServletContext

本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教。

简述:

ServletContext代表整个web应用,在Web容器启动时,会为Web应用程序建议一个全局唯一的ServletContext对象,用来和容器(服务器)来进行通信。例如当我们访问某个网站,会显示我们是第几位浏览者(即网站计数器),又或者是当我们会看到某网站时显示多少人在线,这两个例子都是使用该对象实现的,而不是操作数据或者文件,极大的节约了资源。

用法:

  • 获取ServletContext对象
    • request.getServletContext():通过request对象来获取该对象。
    • this.getServletContext():通过HttpServlet来获取该对象。
  • String getMimeType(String file):获取MIME类型,该类型是互联网通信过程中定义的一种文件数据类型。
    • 格式:大类型/小类型 例 text/html image/jpeg 如图示例
      在这里插入图片描述
  • ServletContext对象是域对象,可以用来共享数据。
    • setAttribute(String name, Object value):设置域中属性。
    • getAttribute(String name):得到域中属性。
    • removeAttribute(String name):移除域中属性。
  • String getRealPath(String path) :获取文件的真实路径(服务器路径)。
    • context.getRealPath("/b.txt"): // 获取web目录下的资源。
    • context.getRealPath("/WEB-INF/c.txt"); // WEB-INF目录下的资源。
    • context.getRealPath("/WEB-INF/classes/a.txt"); // src目录下的资源。

案例:

文件下载需求:

  • 页面显示超链接
  • 点击超链接后弹出下载提示框
  • 完成图片文件或视频文件下载

资源目录结构
在这里插入图片描述
页面代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a href="/servletContext?type=img.jpg">下载图片</a><br>
    <a href="/servletContext?type=video.mp4">下载视频</a>
</body>
</html>

Servlet代码

        String parameter = request.getParameter("type");
        ServletContext servletContext = request.getServletContext();
        // 获得文件的mime类型
        String mimeType = servletContext.getMimeType(parameter);
        // 使用此响应头设置资源的打开方式,在这里我们设置用附件方式打开
        response.setHeader("content-disposition", "attachment;filename=" + parameter);
        // 设置响应头类型
        response.setHeader("content-type", mimeType);
        // 下载图片类型
        if ("img.jpg".equals(parameter)) {
            String path = servletContext.getRealPath("/img/" + parameter);
            FileInputStream fileInputStream = new FileInputStream(path);
            byte[] bytes = new byte[1024];
            int length = 0;
            ServletOutputStream outputStream = response.getOutputStream();
            while ((length = fileInputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, length);
            }
            fileInputStream.close();
        }
        // 下载视频类型
        else if ("video.mp4".equals(parameter)) {
            String path = servletContext.getRealPath("/video/video.mp4");
            FileInputStream fileInputStream = new FileInputStream(path);
            byte[] bytes = new byte[1024];
            int length = 0;
            OutputStream outputStream = response.getOutputStream();
            while ((length = fileInputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, length);
            }
            fileInputStream.close();
        }
Listener(监听器)是Java语言中的一种设计模式,在Java Web中也有广泛的应用。Listener主要用于监听Web应用中的事件,当事件发生时,会触发相应的Listener中的方法,从而实现一些自定义的功能。 Listener主要有以下几种类型: 1. ServletContextListener:监听ServletContext的创建和销毁事件; 2. ServletRequestListener:监听ServletRequest的创建和销毁事件; 3. HttpSessionListener:监听HttpSession的创建和销毁事件; 4. ServletContextAttributeListener:监听ServletContext中属性的添加、修改和删除事件; 5. ServletRequestAttributeListener:监听ServletRequest中属性的添加、修改和删除事件; 6. HttpSessionAttributeListener:监听HttpSession中属性的添加、修改和删除事件; 7. HttpSessionBindingListener:监听HttpSession中的对象绑定和解绑事件; 8. HttpSessionActivationListener:监听HttpSession的钝化和活化事件。 Listener的主要功能包括: 1. 监听Web应用中的事件,当事件发生时,触发相应的方法,从而实现一些自定义的功能,比如记录日志、维护在线用户列表等; 2. 在事件发生前或发生后对相关对象进行修改或处理,从而实现一些常见的功能,比如权限控制、字符编码转换、请求参数过滤等; 3. 在Web应用启动和关闭时执行一些初始化和清理工作,比如初始化数据库连接池、清理临时文件等。 总的来说,Listener是Java Web中的一种非常有用的组件,可以方便地监听Web应用中的事件,从而实现一些自定义的功能或常见的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值