深入了解Java ServletContext

所属分类: 软件编程 / java 阅读数: 172
收藏 0 赞 0 分享

什么是ServletContext?

根据字面意思即Servlet上下文

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

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

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);
  }
}

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

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);
  }
}

结果

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);
  }
}

结果

以上就是ServletContext对象的一些基础知识,如有错误还请各位批评指正,喜欢我的文章可以点赞呀,也可以关注我,我会经常跟新文章

以上就是深入了解Java ServletContext的详细内容,更多关于Java ServletContext的资料请关注脚本之家其它相关文章!

更多精彩内容其他人还在看

Java基于反射机制实现全部注解获取的方法示例

这篇文章主要介绍了Java基于反射机制实现全部注解获取的方法,结合实例形式分析了java反射机制获取注解的具体实现方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 信号量Semaphore的实现

这篇文章主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

eclipse+maven+spring mvc项目基本搭建过程

这篇文章主要介绍了eclipse+maven+spring mvc项目基本搭建过程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring boot集成swagger2生成接口文档的全过程

这篇文章主要给大家介绍了关于Spring boot集成swagger2生成接口文档的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Java冒泡排序法和选择排序法的实现

这篇文章主要介绍了Java冒泡排序法和选择排序法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Cloud Alibaba教程之Sentinel的使用

这篇文章主要介绍了Spring Cloud Alibaba教程之Sentinel的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Josephus环的四种解法(约瑟夫环)基于java详解

这篇文章主要介绍了Josephus环的四种解法(约瑟夫环)基于java详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java继承Thread类创建线程类示例

这篇文章主要介绍了Java继承Thread类创建线程类,结合实例形式分析了java线程操作相关使用技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java使用Callable和Future创建线程操作示例

这篇文章主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

springBoot使用JdbcTemplate代码实例

这篇文章主要介绍了springBoot使用JdbcTemplate代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多