ServletConfig与ServletContext

目录

ServletConfig

ServletConfig的介绍

ServletConfig配置方式

ServletConfig的常用方法

ServletContext

ServletContext的介绍

ServletContext配置方式

ServletContext常用方法


  • ServletConfig

  • ServletConfig的介绍

  • ServletConfig是Servlet的配置参数对象
  • 在Servlet的规范中,允许为每一个Servlet都提供一些初始化的配置
  • 所以,每个Servlet都有一个自己的ServletConfig
  • 作用:
  • 在Servlet初始化时,把一些配置信息传递给Servlet
  • 生命周期:和Servlet相同
  • ServletConfig配置方式

  • 在<servlet>标签中,通过<init-param>标签来配置;
  • 有两个子标签
  • 前面介绍也提到过,这些配置信息都是以键值对进行体现的
  • 所以这两子标签分别是:
  • <param-name>:代表初始化参数的key
  • <param-value>:代表初始化参数的value
  • <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>cpc</servlet-name>
            <servlet-class>com.example.servletdemo1.HelloServlet</servlet-class>
            <init-param>
                <param-name>tjrac</param-name>
                <param-value>2021tj</param-value>
            </init-param>
            <init-param>
                <param-name>hdu</param-name>
                <param-value>2022tj</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>cpc</servlet-name>
            <url-pattern>/cpc/*</url-pattern>
        </servlet-mapping>
    </web-app>
  • ServletConfig的常用方法

  • 常用方法
  • getInitParameter(String name)
  • 根据参数名称获取参数的值
  • 返回值:String
  • getInitParameterNames()
  • 获取所有参数名称的枚举
  • 返回值:Enumeration<String>
  • getServletName()
  • 获取Servlet的名称
  • 返回值:String
  • getServletContext()
  • 获取ServletContext对象
  • 返回值:ServletContext
  • 使用示例
  • 第一步:声明ServletConfig
  • 第二步:通过重写init方法,来对ServletConfig对象进行赋值
  • 第三步:演示ServletConfig常用方法
  • package com.example.servletdemo1;
    
    import java.io.*;
    import java.util.Enumeration;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    public class HelloServlet extends HttpServlet {
        private ServletConfig config;
    
        public void init(ServletConfig config) throws ServletException {
            this.config = config;
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //根据key获取value
            String hduvalue = config.getInitParameter("hdu");
            System.out.println(hduvalue);
            //获取所有的key
            Enumeration<String> keys= config.getInitParameterNames();
            while(keys.hasMoreElements()){
                //获取每一个key
                String key= keys.nextElement();
                //根据key获取value
                String value = config.getInitParameter(key);
                System.out.println(key+","+value);
            }
            //获取Servlet的名称
            String servletName = config.getServletName();
            System.out.println(servletName);
            //获取ServletContext对象
            ServletContext servletContext = config.getServletContext();
            System.out.println(servletContext);
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
  • ServletContext

  • ServletContext的介绍

  • 域对象
  • 域对象指的是对象有作用域
  • 也就是有作用范围
  • 域对象可以实现数据的共享
  • 不同作用范围的域对象,共享数据的能力也不一样
  • 在Servlet规范中,一共有4个域对象
  • ServletContext就是其中的一个
  • 它也是web应用中最大的作用域,也叫application域
  • 它可以实现整个应用之间的数据共享
  • ServletContext
  • ServletContext是应用上下文对象(应用域对象)
  • 每一个应用中只有一个ServletContext对象
  • 并不是服务于某一Servlet
  • 作用:
  • 可以配置和获得应用的全局初始化参数,可以实现Servlet之间的数据共享
  • 生命周期:应用一加载则创建,应用被停止则销毁
  • ServletContext配置方式

  • <web-app>就是配置文件中的根标签
  • 在<web-app>标签中,通过<context-param>标签来配置
  • 有两个子标签
  • <param-name>:代表全局初始化参数的key
  • <param-value>:代表全局初始化参数的value
  • <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>cpc</servlet-name>
            <servlet-class>com.example.servletdemo1.HelloServlet</servlet-class>
            <init-param>
                <param-name>tjrac</param-name>
                <param-value>2021tj</param-value>
            </init-param>
            <init-param>
                <param-name>hdu</param-name>
                <param-value>2022tj</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>cpc</servlet-name>
            <url-pattern>/cpc/*</url-pattern>
        </servlet-mapping>
        <context-param>
            <param-name>globalhdu</param-name>
            <param-value>global2022tj</param-value>
        </context-param>
        <context-param>
            <param-name>globaltjrac</param-name>
            <param-value>global2021tj</param-value>
        </context-param>
    </web-app>
  • ServletContext常用方法

  • 常用方法
  • getInitParameter(String name)
  • 根据名称获取全局配置的参数
  • 返回值:String
  • getContextPath()
  • 获取当前应用的访问虚拟目录
  • 返回值:String
  • getRealPath(String path)
  • 根据虚拟目录来获取应用部署的磁盘绝对路径
  • 返回值:String
  • 使用示例
  • 第一步:获取ServletContext对象
  • 第二步:常用方法演示
  • package com.example.servletdemo1;
    
    import java.io.*;
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    public class HelloServlet extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1.获取ServletContext对象
            ServletContext context = getServletContext();
            //2.常用方法演示
            //获取全局配置参数
            String value = context.getInitParameter("globalhdu");
            System.out.println(value);
            //获取应用的虚拟目录
            String contextPath = context.getContextPath();
            System.out.println(contextPath);
            //根据虚拟目录获取绝对路径
            String realPath = context.getRealPath("/");
            System.out.println(realPath);
            String realPath1 = context.getRealPath("WEB-INF");
            System.out.println(realPath1);
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
  • 常用方法2
  • setAttribute(String name, Object value)
  • 向应用域对象中存储数据
  • 返回值:void
  • getAttribute(String name)
  • 通过名称获取应用域对象中的数据
  • 返回值:Object
  • removeAttribute(String name)
  • 通过名称移除应用域对象中的数据
  • 返回值:void
  • 使用示例2
  • 在ServletContext里设置共享数据
  • 在ServletConfig里获取共享数据
  • 配置:
  • <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>cpc</servlet-name>
            <servlet-class>com.example.servletdemo1.HelloServlet</servlet-class>
            <init-param>
                <param-name>tjrac</param-name>
                <param-value>2021tj</param-value>
            </init-param>
            <init-param>
                <param-name>hdu</param-name>
                <param-value>2022tj</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>cpc</servlet-name>
            <url-pattern>/cpc/*</url-pattern>
        </servlet-mapping>
        <servlet>
            <servlet-name>cpcc</servlet-name>
            <servlet-class>com.example.servletdemo1.config</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>cpcc</servlet-name>
            <url-pattern>/cpcc</url-pattern>
        </servlet-mapping>
        <context-param>
            <param-name>globalhdu</param-name>
            <param-value>global2022tj</param-value>
        </context-param>
        <context-param>
            <param-name>globaltjrac</param-name>
            <param-value>global2021tj</param-value>
        </context-param>
    </web-app>
  • 使用:
  • public class HelloServlet extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ServletContext context = getServletContext();
            context.setAttribute("love","daan");
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
  • public class config extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ServletContext context = getServletContext();
            Object love = context.getAttribute("love");
            System.out.println(love);
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
  • 启动服务器后,分别使用完成测试
  • http://localhost:8080/demo2/cpc
  • http://localhost:8080/demo2/cpcc
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔子队列

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值