ServletContext对象

1.Context是上下文的意思,就是环境的意思,相当于腔体。
2.ServletContext的意思是这个大腔体里面有一系列的Servlet,就是web应用了。
3.web应用是由无数的servlet构成,service和dao都是servlet后续的组件,他们都运行在servlet的内部,只是分离出去的模块。本质上,一个web应用,只是一堆servlet。所以,servletContext就是一个web应用,是一个大腔体,里面有很多个servlet存活。

===========================================================================

原出处:https://www.cnblogs.com/HigginCui/p/5970186.html

【简介】

ServletContext即Servlet上下文对象,该对象表示当前的web应用环境信息,一个Web应用只会创建一个ServletContext对象。

Web容器启动的时候,它会为每个Web应用程序都创建一个对应的ServletContext对象,它代表当前的web应用。

[注意]

由于一个Web应用中的所有Servlet共享一个ServletContext对象,所以多个Servlet通过ServletContext对象实现数据共享,

ServletContext对象通常称为Context对象。
 

【ServletContext创建时机】

ServletContext对象是在TomCat服务器加载完当前Web应用后创建出来的。

ServletContext对象是作为ServletConfig对象成员变量传入Servlet中。

通过ServletConfig的getServletContext()方法就可以得到ServletContext对象。

看下ServletConfig中相关的ServletContext代码:

 

class ServletConfig{      //ServletConfig对象中维护了ServletContext对象的应用
    ServletContext context;
    getInitParameter();
    getInitParameterNames();
    public ServletContext getServletContext(){     //返回一个ServletContext对象
      return contex;
    }
}              

 

在Servet中的init的方法实例化一个ServletConfig

@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
}

[ 注意 ]

this.ServletConfig.getServletContext():通过ServletConfig对象来获取ServletContext对象。

ServletContext对象:启动时创建

ServletConfig对象:调用init方法之前创建的,在ServletContext对象之前。

 

【在Servlet中得到ServletContext的两种方式】

 

 

 

【ServletContext的5大作用】

1.获取web的上下文路径

  String getContextPath();

2.获取全局的参数

  String getInitParameter(String name);

  Enumeration getInitParameterNames();

3.和域对象相关的

  void setAttribute(String name,Onject object);

  Object getAttribute(String name);

  void removeAttribute(String name);

  域对象(域对象就是在不同资源之前来共享数据,保存数据,获取数据)

  ServletContext是我们学习的第一个域对象(Servlet共有三个域对象ServletContext、HttpServletRequest、HttpSession)

4. 请求转发的

  RequestDispatcher getRequestDispatcher(String path);

  在Servlet跳转页面:

  4.1请求重定向(你找我借钱,我没有,你自己去找他借钱)

    1.地址栏会改变,变成重定向到的地址

    2.可以跳转到项目内的资源,也可以跳转项目外的资源

    3.浏览器向服务器发出两次请求,那么不能使用请求来作为域对象来共享数据。

  4.2请求转发(你找我借钱,我没有,我帮你去向他借钱)

    1.地址栏不会改变

    2.只能跳转到项目内的资源,不能跳转项目外的资源。

    3.浏览器向服务器发出一次请求,那么可以使用请求作为域对象共享数据。

5.读取web项目的资源文件

  String getRealPath(String path);

  InputStream getResourceAsStream(String path);

  URL getResource(String path);

 

【利用ServletContext对象来收发数据(Servlet3.0新特性)】

利用ServletContext实现SendServlet和ReceiveServlet之间的数据共享

【SendServlet.java 发数据】

package com.Higgin.context;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/SendServlet")
public class SendServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String data="Higgin";
        this.getServletContext().setAttribute("data", data);
        System.out.println("SendServlet发送的数据为:"+data);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    }

}

 

【ReceiveServlet.java 收数据】

package com.Higgin.context;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ReceiveServlet")
public class ReceiveServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String data=(String) this.getServletContext().getAttribute("data");
        System.out.println("ReceiveServlet接收到的数据:"+data);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

 

[ 发送和接收数据(使用不同的浏览器,应用场景:聊天室) ]

 

 

【通过ServletContext读取资源文件db.properties】

【工程截图】

[ db.properties ]

url=jdbc:mysql://localhost:3306/test
username=root
password=123456

[ ServletDemo00.java ]

 

package com.Higgin.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

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;

@WebServlet("/ServletDemo00")
public class ServletDemo00 extends HttpServlet {
       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        
        InputStream in=this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        Properties props=new Properties();  
        props.load(in);

        String url=props.getProperty("url");
        String username=props.getProperty("username");
        String password=props.getProperty("password");
        
        System.out.println("url=="+url);
        System.out.println("username=="+username);
        System.out.println("password=="+password);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

}

[ 运行结果 ]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值