ServletContext

  Servlet 上下文

每个web工程都只有一个ServletContext对象,也就是不管在哪个servlet里面,获取到的这个ServletContext对象都是同一个

web.xml

  <servlet>
<servlet-name>hello2</servlet-name>
<servlet-class>com.qf.servlet.HelloServlet2</servlet-class> </servlet>
<servlet-mapping>
<servlet-name>hello2</servlet-name>
<url-pattern>/h2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.qf.servlet.HelloServlet3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/h3</url-pattern>
</servlet-mapping>

servlet类

public class HelloServlet2 extends HttpServlet {

	@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("helloServlet2:"+getServletContext());
}
}
-------------------------------------------------------------
public class HelloServlet3 extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("helloServlet3:"+getServletContext());
//testServletConfig();
}
}

浏览器先后访问url(http://localhost:8080/HelloServlet/h2、http://localhost:8080/HelloServlet/h3),查看console输出

helloServlet2:org.apache.catalina.core.ApplicationContextFacade@4b020c18
helloServlet3:org.apache.catalina.core.ApplicationContextFacade@4b020c18

  所以两个servlet获取的是同一个ServletContext对象

ServletContext对象的获取

ServletContext context = getServletContext();

ServletContext的作用

获取全局配置参数

web.xml配置

  <context-param>
<param-name>name</param-name>
<param-value>wxf</param-value>
</context-param>
<context-param>
<param-name>age</param-name>
<param-value>21</param-value>
</context-param>

servlet代码

 public class HelloServlet2 extends HttpServlet {

     @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = getServletContext();
Enumeration<String> names = context.getInitParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
System.out.println(name+"==="+context.getInitParameter(name));
}
}
}

console输出

name===wxf
age===21

获取web工程中的资源(webContent目录下的资源)

config.properties

name=zhangsan
age=123

servlet类

 public class HelloServlet2 extends HttpServlet {

     @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = getServletContext(); //1.获取资源所在的绝对路径位置
//这里得到的是项目在tomcat里面的根目录
String path = context.getRealPath("");
System.out.println("path==="+path);
//这里得到的是项目在tomcat里面的根目录
String path2 = context.getRealPath("config.properties");
System.out.println("path2==="+path2);
System.out.println("-------------------------"); //2.getResourceAsStream 获取资源 流对象 相对路径
InputStream stream = context.getResourceAsStream("config.properties");
Properties prop = new Properties();
prop.load(stream);
String name = prop.getProperty("name");
System.out.println("name==="+name);
}
}

console输出

path===F:\eclipse\workspace\develop_study\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\HelloServlet
path2===F:\eclipse\workspace\develop_study\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\HelloServlet\config.properties
-------------------------
name===zhangsan

注:

  1. 通过classloader去获取web工程下的资源的方式:this.getClass().getClassLoader().getResource("../../config.properties")
  2. src对应的是/WEB-INF/classes,如果想要使用ServletContext获取src目录下的文件可以使用context.getResourceAsStream("/WEB-INF/classes/config.properties")

存取数据,servlet间共享数据 域对象

        ServletContext context = getServletContext();
context.setAttribute("name", "qf");
System.out.println("name==="+context.getAttribute("name"));

console输出

name===qf

servlet的ServletContext接口的更多相关文章

  1. Servlet笔记4--ServletConfig接口和ServletContext接口

    ServletConfig接口: ServletContext接口: 代码详解: (1)web.xml配置文件: <?xml version="1.0" encoding=& ...

  2. Java EE javax.servlet中的ServletContext接口

    ServletContext接口 public interface ServletContext (https://docs.oracle.com/javaee/7/api/javax/servlet ...

  3. javaWeb学习总结(3)- Servlet总结(servlet的主要接口、类)

    Servlet总结01——servlet的主要接口.类 (一)servlet类 Servlet主要类.接口的结构如下图所示: 要编写一个Servlet需要实现javax.servlet.Servlet ...

  4. Servlet常用的接口和类

    使用接口和类的作用:Servlet也是依靠继承父类和实现接口来实现的.使用Servlet必须要引入两个包:javax.servlet和javax.servlet.http.所有的Servlet应用都是 ...

  5. 与servlet相关的接口

    (二)与servlet相关的接口 从servlet仅有的5个方法当中,我们知道其涉及3个接口,分别是: ServletConfig ServletRequest ServletResponse 2.1 ...

  6. java学习笔记—ServletConfig、ServletContext接口(13)

    ServletConfig是一个由Tomcat服务器在初始化Servlet的时候创建并传递进来的一个对象. 该对象主要描述的时候一个servlet的配置信息. 如: <servlet>  ...

  7. ServletContext接口(六)

    javax.servlet.ServletContext接口 ServletContext(上下文)是公用的,就是.net中的application,主要用到的就是全局set设置值,get获取值,ja ...

  8. SERVLET类常用接口及方法

    SERVLET类常用接口及方法 2011-09-09 16:14:43    [size=xx-small]SERVLET类常用接口及方法2007年04月05日 星期四 04:46 P.M.基本类和接 ...

  9. JavaWeb学习——Servlet相关的接口和类

    JavaWeb学习——Servlet相关的接口和类 摘要:本文主要学习了Servlet相关的接口和类. Servlet的接口和类 三种方式 实现Servlet有三种方式: 实现javax.servle ...

随机推荐

  1. Pycharm2019版官方版本激活码,无需破解

    AHD9079DKZ-eyJsaWNlbnNlSWQiOiJBSEQ5MDc5REtaIiwibGljZW5zZWVOYW1lIjoiSmV0IEdyb3VwcyIsImFzc2lnbmVlTmFtZ ...

  2. ASP.NET Core 2.1 JWT Token 使用 (二) - 简书

    原文:ASP.NET Core 2.1 JWT Token 使用 (二) - 简书 接上文,https://www.jianshu.com/p/c5f9ea3b4b65 ASP.NET Core 2. ...

  3. 最新版WinRAR5.61去广告代码教程分享(仅供学习交流)

    最新版WinRAR5.61去广告代码教程分享(仅供学习交流) 第一步:到WinRAR官网www.rarlab.com下载自己需要的版本,选择Chinese Simplified 64bit 安装即可. ...

  4. Linux 核心编译与管理

    一般情况下,不需要重新编译核心,除非以下特有的用途 [root@localhost ~]# wget ftp://ftp.twaren.net/pub/Unix/Kernel/linux/kernel ...

  5. The Preliminary Contest for ICPC Asia Xuzhou 2019 I J

    I. query 题意:给出n的一个排列,有m个询问[l,r],询问[l,r]直接有倍数关系的pair个数. 解法:比赛完之后听说是原题,但是我没做过呀,做题太少了qwq.首先因为数字是1-n的,所以 ...

  6. 使用ubuntu的一些操作笔记20191203

    前言 环境: virtualbox + Ubuntu 16.04 情况: 可以进入虚拟机中Ubuntu系统的桌面,但是外部可以访问到 ssh,输入正确的用户名和密码无法登录 无法正常启动 Apache ...

  7. webpack 学习4 使用loader 以及常用的一些loader

    webpack本身只支持处理JavaScript,其他的文件,如css img less是不识别的,所以才会有loader这个东西,它就是可以使webpack能够处理其他非js文件的拓展程序 首先我们 ...

  8. postgresql中rank() over, dense_rank(), row_number() 的用法和区别

  9. cocos2D-X not config ndk path

    { 双击击那个error,那个路径就加上了 File = >local.properties }

  10. 【InnoDB】插入缓存,两次写,自适应hash索引

    InnoDB存储引擎的关键特性包括插入缓冲.两次写(double write).自适应哈希索引(adaptive hash index).这些特性为InnoDB存储引擎带来了更好的性能和更高的可靠性. ...