ServletConfig和ServletContext对象

news2024/11/20 18:31:00

目录

1.ServletConfig对象

1.1ServletConfig对象是什么

1.2ServletConfig对象里的方法 

1.3ServletConfig的配置方式

1.4ServletConfig实现步骤

2. ServletContext对象

2.1ServletContext对象是什么

 2.2ServletContext对象里的方法

2.3ServletContext对象的配置方式

2.4ServletContext对象的实现步骤

3.ServletConfig和ServletContext对象的区别


1.ServletConfig对象

1.1ServletConfig对象是什么

ServletContext是javax.servlet包下的一个接口,又称上下文对象,是配置对象也是一个域对象;

当服务器启动时,会为服务器中的每一个web应用程序创建一个ServletContext对象;

在web应用中的servlet要想实现资源的共享,可以通过ServletContext来完成;

1.2ServletConfig对象里的方法 

getInitParameter() //获取指定参数名称的全局参数值
getRealPath(String path) //获得当前项目的服务器磁盘路径
getContextPath() //获取项目的根路径
getAttribute(String parameterName) //获取ServletContext域中指定名称的参数值;
setAttribute(String paramterName,Object parameterValue) //存储参数到ServletContext域中;
removeAttribute(String parameterNam) //将ServletContext域中指定名称的参数移除;

1.3ServletConfig的配置方式

在<servlet>标签种,通过<init-param>标签来配置。有两个子标签:
1. <param-name>:代表初始化参数的key。
2. <param-value>: 代表初始化参数的value。

 <context-param>
        <param-name>username</param-name>
        <param-value>root</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>root456</param-value>
    </context-param>

1.4ServletConfig实现步骤

  • 定义一个类,继承HttpServlet。
  • 重写doGet()和doPost()方法。
  • 在web.xml进行配置。
  • 在请求方法中通过请求对象获取到ServletConfig对象。
  • 然后再通过getInitParameter()方法获取到配置的初始化参数。
  • 部署并启动项目。
  • 通过浏览器测试。

 代码实现:

package com.by.servlet;

import javax.servlet.*;
import javax.servlet.http.HttpServlet;

public class ServletConfigServlet extends HttpServlet {

    @Override
    public void service(ServletRequest servletRequest, 
                        ServletResponse servletResponse) throws ServletException {
        //1.获取ServletConfig对象
        ServletConfig servletConfig = getServletConfig();
        //2.获取Servlet中的初始化参数
        String username = servletConfig.getInitParameter("username");
        System.out.println(username);
        String password = servletConfig.getInitParameter("password");
        System.out.println(password);

        //3.获取ServletContext对象(域对象)
        ServletContext servletContext = servletConfig.getServletContext();
    }
}

 param参数不可以在另外的Servlet中获取

 

public class ServletConfigServlet2 extends HttpServlet {

    @Override
    public void goGet(ServletRequest servletRequest, 
                      ServletResponse servletResponse) throws ServletException {
        //1.获取ServletConfig对象
        ServletConfig servletConfig = getServletConfig();
        //2.获取Servlet中的初始化参数
        String username = servletConfig.getInitParameter("username");//不能获取
        System.out.println(username);
        String password = servletConfig.getInitParameter("password");//不能获取
        System.out.println(password);

        //3.获取ServletContext对象(域对象)
        ServletContext servletContext = servletConfig.getServletContext();
    }
}

2. ServletContext对象

2.1ServletContext对象是什么

ServletContext是javax.servlet包下的一个接口,又称上下文对象,是配置对象也是一个域对象;

当服务器启动时,会为服务器中的每一个web应用程序创建一个ServletContext对象;

在web应用中的servlet要想实现资源的共享,可以通过ServletContext来完成;

 2.2ServletContext对象里的方法

getInitParameter() //获取指定参数名称的全局参数值
getRealPath(String path) //获得当前项目的服务器磁盘路径
getContextPath() //获取项目的根路径
getAttribute(String parameterName) //获取ServletContext域中指定名称的参数值;
setAttribute(String paramterName,Object parameterValue) //存储参数到ServletContext域中;
removeAttribute(String parameterNam) //将ServletContext域中指定名称的参数移除;

2.3ServletContext对象的配置方式

ServletContext不像ServletConfig接口在Servlet标签里配置,而是针对于整个应用的配置,也叫全局的初始化参数;

在<web-APP>标签中,通过<context-param>标签来配置,有两个子标签:
1. <param-name>: 代表全局初始化参数的key。
2.<param-value>: 代表全局初始化参数的value。

    <context-param>
        <param-name>username</param-name>
        <param-value>root</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>root456</param-value>
    </context-param>

该代码是直接放在<web-app>标签里的 。

2.4ServletContext对象的实现步骤

ServletContext 实现步骤:

1.定义一个类,继承HttpServlet。
2.重写 doGet和 doPost 方法。
3.在web.xml文件中配置Servlet和ServletContext。
4.获取 ServletContext 对象。
5.测试相关方法的使用。
6.部署并启动项目。
7.通过浏览器测试。

代码实现:

public class ServletContextServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //一个web应用只有一个serveletContext对象,能实现共享
        ServletContext servletContext = getServletContext();
        String username = servletContext.getInitParameter("username");
        String password = servletContext.getInitParameter("password");
        System.out.println(username+"---------"+password);

        //往servletContext对象添加属性:继承了map
        servletContext.setAttribute("msg", "sb");
    }
}

param参数可以在另外的Servlet中获取

在写两个分别用来测试: 

public class ServletContextServlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //一个web应用只有一个serveletContext对象,能实现共享
        ServletContext servletContext = getServletContext();
        String username = servletContext.getInitParameter("username");
        String password = servletContext.getInitParameter("password");
        System.out.println(username+"---------"+password);

        Object msg = servletContext.getAttribute("msg");
        System.out.println(msg);
    }
}
public class ServletContextServlet3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = getServletContext();
        //删除servletContext对象中的属性
        servletContext.removeAttribute("msg");
    }
}

web.xml中的配置:

    <servlet>
        <servlet-name>context1</servlet-name>
        <servlet-class>com.by.servlet.ServletContextServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>context1</servlet-name>
        <url-pattern>/context1</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>context2</servlet-name>
        <servlet-class>com.by.servlet.ServletContextServlet2</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>context2</servlet-name>
        <url-pattern>/context2</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>context3</servlet-name>
        <servlet-class>com.by.servlet.ServletContextServlet3</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>context3</servlet-name>
        <url-pattern>/context3</url-pattern>
    </servlet-mapping>

先访问context1:

再访问context2;

可以接收到msg。

再访问context3,此时msg已被删除,再次访问context2,此时msg为空。

3.ServletConfig和ServletContext对象的区别

ServletConfig 是针对单个servlet 而言的,在servlet 被创建时初被容器创建,用来存储servlet 初始化参数。Servlet 可以通过 getServletConfig()方法获取ServletConfig 对象。


ServletContext 是针对整个web 应用而言的,在web 应用启动时被容器创建,用来存储应用级别的信息,例如应用名称、上下文路径等。所有servlet 可以通过 getServletContext()方法获取Servle etContext 对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1337656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像处理控件Aspose.page功能演示:在 C# 中将 TIFF 转换为 EPS

TIFF&#xff08;标记图像文件格式&#xff09;和EPS&#xff08;封装 PostScript&#xff09;是两种常见的图像文件格式。TIFF 通常用于存储高质量图像&#xff0c;而 EPS 广泛用于存储矢量图像。您可能出于多种原因想要将 TIFF 图像转换为 EPS 格式。例如&#xff0c;如果您想…

负载均衡——Ribbon

文章目录 Ribbon和Eureka配合使用项目引入RibbonRestTemplate添加LoadBalanced注解注意自定义均衡方式代码注册方式配置方式 Ribbon脱离Eureka使用 Ribbon&#xff0c;Nexflix发布的负载均衡器&#xff0c;有助于控制HTTP和TCP客户端的行为。基于某种负载均衡算法&#xff08;轮…

大数据-Hive练习-环比增长率、同比增长率、复合增长率

目录 &#x1f959;12.1 环比增长率 1. 概述 2. 公式 3. 示例 4.练习-需求:计算各类商品的月环比增长率 &#x1f959;12.2 同比增长率 1. 概述 2. 公式 3. 示例 4. 练习-需求:计算各类商品的月同比增长率 &#x1f959;12.3 复合增长率 1. 概述 2. 公式 3. 示例…

Unity中Shader裁剪空间推导(正交相机到裁剪空间的转化矩阵)

文章目录 前言一、正交相机视图空间 转化到 裁剪空间 干了什么1、正交相机裁剪的范围主要是这个方盒子2、裁剪了之后&#xff0c;需要把裁剪范围内的坐标值化到[-1,1]之间&#xff0c;这就是我们的裁剪空间。3、在Unity中&#xff0c;设置相机为正交相机4、在这里设置相机的近裁…

Ubuntu16.04下载安装藏文字体详细教程(附图)

Ubuntu16.04下安装藏文字体详细教程&#xff08;附图&#xff09; 你是不是也被ubuntu系统中藏文或者中文总是不显示且乱码的问题困扰呢&#xff0c;那么你可以看看我的解决方法。 在没有装藏文或中文字体前你在打开一个文本文件的时候是不是下面这样的 安装步骤 上传或下载若…

学习笔记13——Spring整合Mybatis、junit、AOP、事务

学习笔记系列开头惯例发布一些寻亲消息 链接&#xff1a;https://baobeihuijia.com/bbhj/ Mybatis - Spring&#xff08;使用第三方包new一个对象bean&#xff09; 原始的Mybatis与数据库交互【通过sqlmapconfig来配置和连接】 初始化SqlSessionFactory获得连接获取数据层接口…

人工智能_机器学习078_聚类算法_概念介绍_聚类升维_降维_各类聚类算法_有监督机器学习_无监督机器学习---人工智能工作笔记0118

首先看一下什么是聚类,我们可以进入sklearn的官网去看看 可以看到这里,首先classification 这个分类我们学完了,然后就是regression回归我们也学完了对吧,其实我们现实生活中的,大部分问题就是 这两种问题就可以解决了. 然后我们再来看一个: clustering,这个就是聚类对吧.聚类算…

【JVM】对象

一、对象的内存布局 以Hotspot虚拟机为例&#xff0c;对象在内存中的结构可以分为三部分&#xff1a;对象头&#xff08;header&#xff09;、实例数据&#xff08;instance data&#xff09;、对齐填充&#xff08;padding&#xff09;。 1.1.对象头 对象头的结构大体相似&…

LeetCode day31

LeetCode day31 被创新实践的机器学习大作业和数据库作业折磨力&#xff0c;临近期末&#xff0c;各种大作业以及ddl&#xff0c;搞的咱只能偶尔刷刷力扣&#xff0c;但是csdn就挺难去发布了,大家期末也好好复习过个好年啦&#xff0c;O(∩_∩)O 409. 最长回文串 给定一个包含…

Unity so文件的问题

文章目录 问题在面板上无法显示子节点如何保存继承于so的类必须放置在单个脚本so类文件名和类名要一致 问题 最近自己在写一个行为树出现一些问题记录一下首先NodeTree肯定是so文件但是node可以是单纯的类&#xff0c;也可以是so。后来我发现只能是so 在面板上无法显示 第一…

2024年大学计算机等级考试报名注意事项及照片处理方法

计算机等级考试&#xff08;National Computer Rank Examination&#xff0c;简称NCRE&#xff09;是由国家教育部主管&#xff0c;全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试中心主办的全国性计算机技术与应用能力水平考试。该考试旨在评估和认证考生…

C++继承与派生——(3)公有继承的访问权限的变化

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 缺乏明确的目标&#xff0c;一生将庸庸…

利用Jmeter做接口测试(功能测试)全流程分析!

利用Jmeter做接口测试怎么做呢&#xff1f;过程真的是超级简单。 明白了原理以后&#xff0c;把零碎的知识点填充进去就可以了。所以在学习的过程中&#xff0c;不管学什么&#xff0c;我一直都强调的是要循序渐进&#xff0c;和明白原理和逻辑。这篇文章就来介绍一下如何利用…

中小工厂更适合什么样的自动仓储管理系统?

阅读本文你将了解中小工厂更适合什么样的自动仓储管理系统&#xff1a;一、确定自身规模&#xff1b;二、考虑功能配置&#xff1b;三、寻求拓展能力。 “我们工厂年产值3亿左右&#xff0c;算是个中小工厂吧&#xff0c;但是上了精细化的仓库管理系统之后&#xff0c;为了适应…

工具系列:TimeGPT_(2)使用外生变量时间序列预测

文章目录 TimeGPT使用外生变量时间序列预测导入相关工具包预测欧美国家次日电力价格案例 TimeGPT使用外生变量时间序列预测 外生变量在时间序列预测中非常重要&#xff0c;因为它们提供了可能影响预测的额外信息。这些变量可以包括假日标记、营销支出、天气数据或与你正在预测…

一个卖美妆的 一个月招了数十万代理!月销售额破亿 你敢相信吗?

商业模式永不过时 大家好&#xff0c;我是吴军&#xff0c;一家软件公司的产品经理 今天我们来聊一下这个纪炫商城 其实&#xff0c;说这个纪炫商城之前&#xff0c;我想跟各位企业家老板聊几句实在话 作为公司两百多号技术的&#xff0c;一个拥有五年软件开发经验的产品经理…

Michael.W基于Foundry精读Openzeppelin第45期——ERC20FlashMint.sol

Michael.W基于Foundry精读Openzeppelin第45期——ERC20FlashMint.sol 0. 版本0.1 ERC20FlashMint.sol 1. 目标合约2. 代码精读2.1 maxFlashLoan(address token)2.2 flashFee(address token, uint256 amount)2.3 flashLoan(IERC3156FlashBorrower receiver, address token, uint…

vue2中自定义右击菜单--vue-contextmenujs

第一步我们先安装这个依赖 npm install vue-contextmenujs 第二步把我们的依赖引入到全局中 import Contextmenu from vue-contextmenujs; Vue.use(Contextmenu) 第三步在我们需要右击菜单的代码上增加如下代码 第四步在方法中写入方法 当然其中还是有很多别的属性&#x…

Java web班级管理系统jsp【班级管理系统】(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

【华为机试】2023年真题B卷(python)-发广播

一、题目 题目描述&#xff1a; 某地有N个广播站&#xff0c;站点之间有些有连接&#xff0c;有些没有。有连接的站点在接受到广播后会互相发送。 给定一个N*N的二维数组matrix,数组的元素都是字符’0’或者’1’。 matrix[i][j]‘1’,则代表i和j站点之间有连接&#xff0c;mat…