ServletContext和ServletConfig使用说明

简介: ServletContext和ServletConfig使用说明

       通过前面知识点的学习,我们对于请求的处理已经可以说比较灵活了,但是还不够。我们再介绍两个重要的对象 ServletContext 对象和 ServletConfig 对象

ServletContext 对象:

问题:Request 解决了一次请求内的数据共享问题,session 解决了用户不同请求的数据共享问题,那么不同的用户的数据共享该怎么办呢?


解决:使用 ServletContext 对象


作用:解决了不同用户的数据共享问题原理:ServletContext 对象由服务器进行创建,一个项目只有一个对 象。不管在项目的任意位置进行获取得到的都是同一个对象,那么不同用户发起的请求获取到的也就是同一个对象了,该对象由用户共同拥有。


特点:服务器进行创建用户共享一个项目只有一个


生命周期:服务器启动到服务器关闭


作用域:项目内


使用:


1.获取 ServletContext 对象


2.使用作用域进行共享数据流转


3.获取 web.xml 中的全局配置


4.获取 webroot 下项目资源流对象


5.获取 webroot 下资源绝对路径


TestServlectContextA:

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * ServletContext对象:
 *  作用:
 *    解决了不同用户之间的数据共享问题
 *  使用:
 *    创建ServletContext对象
 *        ServletContext sc1 = this.getServletContext();
        ServletContext sc2 =this.getServletConfig().getServletContext();
        ServletContext sc3=req.getSession().getServletContext();
    存储用户共享数据
      sc.setAttribute(String name,Object value);
    获取用户共享数据
      sc.getAttribute(String name);
    删除共享数据
      sc.removeAttribute(String name);
    获取web.xml中的全局配置属性,作用:将部分动作和源文件进行解耦,我们只需要在xml配置文件中进行相关配置就会改变代码的执行效果。
      sc.getInitParameter(String name);注意返回的是String类型数据
    获取webRoot下的资源流对象
      sc.getResourceAsStream(String path);
      注意:
        path为相对路径,写从webRoot开始查找资源的路径即可。
    获取webRoot下的资源绝对路径
      sc.getRealPath(String path);
      注意:
        path为相对路径,写从webRoot开始查找资源的路径即可。
 *  特点:
 *    服务器创建
 *    所有用户共享
 *  生命周期:
 *    服务器开启到服务器关闭
 * @author MyPC
 */
public class TestServlectContextA extends HttpServlet {
  @Override
  protected void service(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    //设置请求编码格式
    req.setCharacterEncoding("utf-8");
    //设置响应编码格式
    resp.setContentType("text/html;charset=utf-8");
    //获取请求信息
    //处理请求信息
      String str="我是用户共享数据";
      //获取ServletContext对象
        ServletContext sc1 = this.getServletContext();
        ServletContext sc2 =this.getServletConfig().getServletContext();
        ServletContext sc3=req.getSession().getServletContext();
        System.out.println(sc1==sc2);
        System.out.println(sc2==sc3);
      //存储用户共享数据到ServletContext中
        sc1.setAttribute("str", str);
      //获取web.xml中的全局配置属性
        String f=sc1.getInitParameter("flag");
        if("false".equals(f)){
          System.out.println("TestServlectContextA.service(关闭***资源)");
        }else{
          System.out.println("TestServlectContextA.service(打开***资源)");
        }
      //获取webRoot下资源的流对象
        //File f2=new File("D:\\apache-tomcat-7.0.56\\webapps\\sc\\image");
        InputStream resourceAsStream = sc1.getResourceAsStream("image/s.png");
      //获取WebRoot下资源的绝对路径
        String path=sc1.getRealPath("image/s.png");
        System.out.println(path);
    //响应处理结果
      //直接响应
        resp.getWriter().write("数据已经在ServletContext中存储完毕");
      //请求转发
      //重定向
  }
}

TestServletContextB:

import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public  class TestServletContextB extends HttpServlet {
  @Override
  protected void service(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    //设置请求编码格式
    req.setCharacterEncoding("utf-8");
    //设置响应编码格式
    resp.setContentType("text/html;charset=utf-8");
    //获取请求信息
      //获取ServletContext对象
      ServletContext sc = this.getServletContext();
      //获取共享数据
      String s=(String) sc.getAttribute("str");
    //处理请求信息
      System.out.println("TestServletContextB.service()"+s);
    //响应处理结果
      //直接响应
      //请求转发
      //重定向
  }
}

案例:网页浏览器次数统计

ServletConfig 对象:

问题:使用 ServletContext 对象可以获取 web.xml 中的全局配置文件,在 web.xml 中每个 Servlet 也可以进行单独的配置,那么该怎么获取配置信息呢?

解决:使用 ServletConfig对象


作用:ServletConfig 对象是 Servlet 的专属配置对象,每个 Servlet 都单独拥有一个 ServletConfig 对象,用来获取 web.xml 中的配置信息。


使用:


1.获取 ServletConfig 对象


2.获取 web.xml 中 servlet 的配置信息

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServletConfig extends HttpServlet {
  @Override 
  protected void service(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    //获取ServletConfig对象
      ServletConfig sg = this.getServletConfig();
    //设置请求编码格式
      req.setCharacterEncoding(sg.getInitParameter("code"));
    //设置响应编码格式
      resp.setContentType("text/html;charset=utf-8");
    //获取请求信息
      //获取web.xml中的属性配置
      String flag = sg.getInitParameter("flag");
      System.out.println(flag);
      //获取用户请求信息
      String uname=req.getParameter("uname");
    //处理请求信息
      System.out.println(uname);
    //响应处理结果
  }
}


目录
相关文章
|
存储 应用服务中间件 数据库
【JavaWeb】知识总结Ⅸ(ServletConfig, ServletContext)
ServletConfig 类是为 Servlet 程序的配置信息的类 2. Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建 3. Servlet 程序默认是第 1 次访问的时候创建, ServletConfig 在 Servlet 程序创建时,就创 建一个对应的 ServletConfig ServletConfig 类能干什么 1. 获取 Servlet 程序的 servlet-name 的值 2. 获取初始化参数 init-param 3. 获取 ServletContext 对象
|
XML 关系型数据库 MySQL
ServletConfig和ServletContext 的介绍和代码实现
ServletConfig和ServletContext 的介绍和代码实现
65 0
|
存储 应用服务中间件 测试技术
Servlet中的ServletConfig对象、ServletContext对象以及Servlet3.0
Servlet中的ServletConfig对象、ServletContext对象以及Servlet3.0
67 1
|
应用服务中间件
初识ServletConfig
初识ServletConfig
75 0
|
应用服务中间件 容器
ServletConfig、ServletContext概述、配置及ServletContext的三个作用
ServletConfig、ServletContext概述、配置及ServletContext的三个作用
143 0
|
应用服务中间件
Servlet——ServletContext对象功能
Servlet——ServletContext对象功能
92 0
|
应用服务中间件
ServletConfig对象
ServletConfig对象介绍