Java Web中ServletContext对象详解与应用

 更新时间:2023年04月26日 10:32:02   作者:Lungcen  
ServletContext是一个容器,可以用来存放变量,供一个web项目中多个Servlet共享,下面这篇文章主要给大家介绍了关于Java Web中ServletContext对象详解与应用的相关资料,需要的朋友可以参考下

 ServletContext对象

Web 应用中的所有 Servlet 共享同一个 ServletContext 对象,不同 Servlet 之间可以通过 ServletContext 对象实现数据通讯,因此 ServletContext 对象也被称为 Context 域对象。

域对象是服务器在内存上创建的存储空间,该空间用于不同动态资源(例如 Servlet、JSP)之间传递与共享数据。

 获取上下文初始化参数的相关方法

StringgetInitParameter(String name)根据初始化参数名 name,返回对应的初始化参 数值。
EnumerationgetInitParameterNames()返回 Web 应用所有上下文初始化参数名的枚举 集合,如果没有上下文初始化参数,则返回一个空的枚举集合。

创建ServletContext对象  

1)通过 GenericServlet 提供的 getServletContext() 方法

//通过 GenericServlet的getServletContext方法获取ServletContext对象
ServletContext servletContext = this.getServletContext();

2)通过 ServletConfig 提供的 getServletContext() 方法

//通过 ServletConfig的 getServletContext方法获取ServletContext对象
ServletContext servletContext = this.getServletConfig().getServletContext();
//通过 Config的 getServletContext方法获取ServletContext对象
ServletContext context = config.getServletContext();

3)通过 HttpSession 提供的 getServletContext() 方法

//通过 Session的 getServletContext方法获取ServletContext对象
ServletContext context = req.getSession().getServletContext();

4)通过 HttpServletRequest 提供的 getServletContext() 方法

//通过 HttpServletRequest的 getServletContext方法获取ServletContext对象
ServletContext servletContext = req.getServletContext();

上下文初始化参数

局部参数

    <servlet>
        <init-param>
            <param-name>name</param-name>
            <param-value>Lungcen</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>110120130</param-value>
        </init-param>
    </servlet>

全局参数

    <context-param>
        <param-name>姓名</param-name>
        <param-value>Lungcen</param-value>
    </context-param>
    <context-param>
        <param-name>年龄</param-name>
        <param-value>19</param-value>
    </context-param>

 获取ServletContext的全局参数

Enumeration<String> names = this.context.getInitParameterNames();
        
        while (names.hasMoreElements())
        {
            String s = names.nextElement();
            writer.write(s + "->" + context.getInitParameter(s) + "<br/>");
        }

ServletContext 属性与上下文初始化参数对比

不 同 点ServletContext 的属性上下文初始化参数
创 建 方 式ServletContext 的属性通过调用 ServletContext 接口的 setAttribute() 方法 创建上下文初始化参数通过 web.xml 使用 元素配置
可 进 行 的 操 作ServletContext 的属性可以通过 ServletContext 接口的方法进行读取、新 增、修改、移除等操作上下文初始化参数在容器启动后只能被 读取,不能进行新增、修改和移除操作
生 命 周 期ServletContext 中属性的生命周期从创建开 始,到该属性被移除(remove)或者容器关 闭结束上下文初始化参数的生命周期,从容器 启动开始,到 Web 应用被卸载或容器 关闭结束
作 用使用 ServletContext 中的属性可以实现 Servlet 之间的数据通讯使用上下文初始化参数无法实现数据通讯

实现数据通讯

在 Servlet 中,调用 ServletContext 接口的 setAttribute() 方法可以创建一些属性,这些属性被存 放在 ServletContext 对象中。应用中所有 Servlet 都可以对这些属性进行访问和操作,通过它们可以实现应用内不同 Servlet 之间的数据通讯。

voidsetAttribute(String name, Object object)把一个 Java 对象与一个属性名绑定,并将它作为一个属 性存放到 ServletContext 中。 参数 name 为属性名,参数 object 为属性值。
voidremoveAttribute(String name)从 ServletContext 中移除属性名为 name 的属性。
ObjectgetAttribute(String name)根据指定的属性名 name,返回 ServletContext 中对应 的属性值。

数据通讯的程序实例:

package com.zpark.servlet;
 
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;
import java.io.PrintWriter;
 
@WebServlet(urlPatterns = "/LLL.do")
public class MyServlet04 extends HttpServlet {
 
    @Override
    public void init() throws ServletException {
        getServletContext().setAttribute("count", 0);
    }
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        Integer count = (Integer) getServletContext().getAttribute("count");
        count++;
        getServletContext().setAttribute("count", count);
 
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.write("欢迎来到界面" + count);
        writer.close();
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        doGet(req, resp);
    }
}
package com.zpark.servlet;
 
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;
import java.io.PrintWriter;
 
@WebServlet("/Lun5.do")
public class MyServlet05 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        Integer count = (Integer) getServletContext().getAttribute("count");
        writer.write("今天是一个好日子" + count);
        writer.close();
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        doGet(req, resp);
    }
}

在浏览器中的操作

总结 

到此这篇关于Java Web中ServletContext对象详解与应用的文章就介绍到这了,更多相关Java Web ServletContext对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java反射如何获取字段属性值

    Java反射如何获取字段属性值

    这篇文章主要介绍了Java反射如何获取字段属性值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • jdk21安装后无jre文件该如何解决

    jdk21安装后无jre文件该如何解决

    java开发少不了安装jdk,下面这篇文章主要给大家介绍了关于jdk21安装后无jre文件该如何解决的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • 浅谈Java生成唯一标识码的三种方式

    浅谈Java生成唯一标识码的三种方式

    我们经常会遇到这样的场景,需要生成一个唯一的序列号来表明某一个数据的唯一性,本文主要介绍了浅谈Java生成唯一标识码的三种方式,感兴趣的可以来了解一下
    2022-01-01
  • resty mail的简单发送邮件方法

    resty mail的简单发送邮件方法

    这篇文章主要为大家介绍了简单的resty mail发送邮件方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • 最安全的加密算法Bcrypt防止数据泄露详解

    最安全的加密算法Bcrypt防止数据泄露详解

    这篇文章主要为大家介绍了最安全的加密算法Bcrypt防止数据泄露详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • springboot启动时候报错mongodb问题

    springboot启动时候报错mongodb问题

    这篇文章主要介绍了springboot启动时候报错mongodb问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 浅谈String类型如何转换为time类型存进数据库

    浅谈String类型如何转换为time类型存进数据库

    这篇文章主要介绍了String类型如何转换为time类型存进数据库,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • JPA添加Pageable实现翻页时报错的问题

    JPA添加Pageable实现翻页时报错的问题

    这篇文章主要介绍了解决JPA添加Pageable实现翻页时报错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • jdk15的安装与配置全过程记录

    jdk15的安装与配置全过程记录

    这篇文章主要给大家介绍了关于jdk15的安装与配置,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • SpringBoot3使用Swagger3的示例详解

    SpringBoot3使用Swagger3的示例详解

    本文介绍了如何在Spring Boot 3项目中使用Swagger3进行后端接口的前端展示,首先,通过添加依赖并配置application.yml文件来快速启动Swagger,然后,详细介绍了Swagger3的新注解与Swagger2的区别,并提供了一些常用注解的使用示例,感兴趣的朋友跟随小编一起看看吧
    2024-11-11

最新评论