深入了解Java ServletContext

作者:一只胡说八道的猴子 时间:2023-11-08 22:36:27 

什么是ServletContext?

根据字面意思即Servlet上下文

深入了解Java ServletContext

服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象,这个对象是
全局唯一的,工程内部的所有servlet都共享这个对象,所有应用程序共享对象

深入了解Java ServletContext

下面用一段简单的代码来证明一下


import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ServletContext2")
public class ServletContext2 extends HttpServlet{
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   ServletContext servletContext = this.getServletContext();
   System.out.println("ServletContext2的地址:");
   System.out.println(servletContext);
 }

@Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   this.doGet(req, resp);
 }
}

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ServletContext")
public class ServletContext extends HttpServlet{
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   this.doPost(req, resp);
 }

@Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   javax.servlet.ServletContext servletContext = this.getServletContext();
   System.out.println("ServletContext2的地址:");
   System.out.println(servletContext);
   RequestDispatcher servletContext2 = req.getRequestDispatcher("ServletContext2");
   servletContext2.forward(req,resp);
 }
}

可以看到二者的地址一模一样

深入了解Java ServletContext

ServletContext对象的生命周期

诞生:web部署到服务器上,启动服务器,此时上下文环境对象创建,只要tomcat服务器不关闭,上下文环境对象就一直
存在

销毁:关闭服务器或者是从web服务器上卸载该程序的时候,该对象销毁

怎么创建ServletContext对象?

方法一:

javax.servlet.ServletContext servletContext = this.getServletContext();

方法二:

javax.servlet.ServletContext servletContext1 = req.getServletContext();

方法三:

javax.servlet.ServletContext servletContext3 = this.getServletConfig().getServletContext();

ServletContext对象的作用与相关方法

1.是一个域对象*

什么是域:域其实就是一个map结构,及存入一个键值对,来存储获取数据
作用范围:本工程内部
域对象可以被本工程内所有的servlet对象共享,因为一个工程只有一个servletcontext对象

方法介绍:
存储数据: void setAttribute(String var1, Object var2);

移除数据: void removeAttribute(String var1);

获取数据: Object getAttribute(String var1);
1.由于取出的是一个Object类型,需要强转
2.如果指定的属性名不存在,则返回null

2.可以获取文件的真实路径

真实路径:即部署在服务器是的路径
String getRealPath() 获取文件的真实路径

不同目录下访问资源的方式不同


//src下的资源访问
   String realPath = servletContext.getRealPath("/WEB-INF/classes/a.text");
   System.out.println(realPath);
//WEB-INF下的资源访问
   String realPath1 = servletContext.getRealPath("/WEB-INF/b.text");
   System.out.println(realPath1);
//web目录下的资源访问
   String realPath2 = servletContext.getRealPath("/c.text");
   System.out.println(realPath2);

代码


import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ServletContext")
public class ServletContext extends HttpServlet{
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   this.doPost(req, resp);
 }

@Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   javax.servlet.ServletContext servletContext = this.getServletContext();
   //src下的资源访问
   String realPath = servletContext.getRealPath("/WEB-INF/classes/a.text");
   System.out.println(realPath);
   //WEB-INF下的资源访问
   String realPath1 = servletContext.getRealPath("/WEB-INF/b.text");
   System.out.println(realPath1);
   //web目录下的资源访问
   String realPath2 = servletContext.getRealPath("/c.text");
   System.out.println(realPath2);
 }
}

结果

深入了解Java ServletContext

3.获得MIME类型

s什么是MIME类型,是在互联网通信过程中定义等等一种文件数据类型
格式:大类型/小类型 image/jpeg
获取: String getMimeType(String file)

代码如下


import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ServletContext")
public class ServletContext extends HttpServlet{
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   this.doPost(req, resp);
 }

@Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   javax.servlet.ServletContext servletContext = this.getServletContext();
   String filename="a.jpg";
   String mimeType = servletContext.getMimeType(filename);
   System.out.println(mimeType);
 }
}

结果

深入了解Java ServletContext

来源:https://www.cnblogs.com/pjhaymy/p/13424324.html

标签:Java,ServletContext
0
投稿

猜你喜欢

  • Spring AOP实现复杂的日志记录操作(自定义注解)

    2023-01-24 15:21:50
  • C#装箱和拆箱原理详解

    2021-12-29 16:07:26
  • 使用Android造了个滚轮控件轮子示例

    2023-04-29 07:09:17
  • Java Selenium实现多窗口切换的示例代码

    2022-01-22 22:48:08
  • 详谈hibernate,jpa与spring data jpa三者之间的关系

    2022-08-04 22:35:57
  • 使用JAXBContext 设置xml节点属性

    2021-09-21 00:05:44
  • C#表达式树讲解

    2023-02-23 19:22:52
  • C#中的数据结构介绍

    2022-06-05 18:34:26
  • Java Timer使用讲解

    2023-11-28 20:30:33
  • Java Zookeeper分布式分片算法超详细讲解流程

    2023-07-08 06:56:36
  • 浅谈十个常见的Java异常出现原因

    2022-10-04 07:58:50
  • maven如何打包动态环境变量(包括启动脚本)

    2023-07-16 03:48:56
  • Java 比较接口comparable与comparator区别解析

    2022-11-26 20:54:24
  • C++ 智能指针深入解析

    2023-08-14 22:38:41
  • Android列表实现(2)_游标列表案例讲解

    2022-11-15 16:49:55
  • C#中实现可变参数实例

    2022-03-27 15:48:07
  • JavaWeb开发基于ssm的校园服务系统(实例详解)

    2022-11-07 16:40:48
  • SSH框架网上商城项目第21战之详解易宝支付的流程

    2021-11-11 17:06:38
  • 基于java.lang.IllegalArgumentException异常报错问题及解决

    2023-09-14 16:03:34
  • jdk自带线程池实例详解

    2022-05-14 02:04:56
  • asp之家 软件编程 m.aspxhome.com