ServletContext对象、ServletConfig对象
通过前面知识点的学习,我们对于请求的处理已经可以说比较灵
活了,但是还不够。我们再介绍两个重要的对象 ServletContext 对象
和 ServletConfig 对象
ServletContext 对象:
问题:
Request 解决了一次请求内的数据共享问题,session 解决了用户不同请求的数据共享问题,那么不同的用户的数据共享该怎么办呢?
解决:
使用 ServletContext 对象
作用:
解决了不同用户的数据共享问题
原理:
ServletContext 对象由服务器进行创建,一个项目只有一个对象。不管在项目的任意位置进行获取得到的都是同一个对象,那么不同用户发起的请求获取到的也就是同一个对象了,该对象由用户共同拥有。
特点:
服务器进行创建
用户共享
一个项目只有一个
生命周期:
服务器启动到服务器关闭
作用域:
项目内使用:
获取 ServletContext 对象
使用作用域进行共享数据流转
获取 web.xml 中的全局配置
获取 webroot 下项目资源流对象
获取 webroot 下资源绝对路径
案例:网页浏览器次数统计,详见源码
ServletConfig 对象:
问题:
使用 ServletContext 对象可以获取 web.xml 中的全局配置文件,web.xml 中每个 Servlet 也可以进行单独的配置,那么该怎么获取配置信息呢?
解决:
使用 ServletConfig 对象
作用:
ServletConfig 对象是 Servlet 的专属配置对象,每个 Servlet 都单独拥有一个 ServletConfig 对象,用来获取 web.xml 中的配置信息。
使用:
获取 ServletConfig 对象
获取 web.xml 中 servlet 的配置信息
ServletContext示例
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对象* //第一种方式:ServletContext sc=this.getServletContext();//第二种方式:ServletContext sc2=this.getServletConfig().getServletContext();//第三种方式:ServletContext sc3=req.getSession().getServletContext();* 使用ServletContext对象完成数据共享* //数据存储* sc.setAttribute(String name, Object value);* //数据获取* sc.getAttribute("str") 返回的是Object类型* 注意:* 不同的用户可以给ServletContext对象进行数据的存取。* 获取的数据不存在返回null。* 获取项目中web.xml文件中的全局配置数据* sc.getInitParameter(String name); 根据键的名字返回web.xml中配置的全局数据的值,返回String类型。* 如果数据不存在返回null。* sc.getInitParameterNames();返回键名的枚举* 配置方式:注意 一组<context-param>标签只能存储一组键值对数据,多组可以声明多个 <context-param>进行存储。* <context-param><param-name>name</param-name><param-value>zhangsan</param-value></context-param>作用:将静态数据和代码进行解耦。获取项目webroot下的资源的绝对路径。String path=sc.getRealPath(String path); 获取的路径为项目根目录,path参数为项目根目录中的路径获取webroot下的资源的流对象InputStream is = sc.getResourceAsStream(String path);注意:此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取。path参数为项目根目录中的路径* * * @author MyPC**/
public class ServletContextServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//获取ServletContext对象//第一种方式:ServletContext sc=this.getServletContext();//第二种方式:ServletContext sc2=this.getServletConfig().getServletContext();//第三种方式:ServletContext sc3=req.getSession().getServletContext();System.out.println(sc==sc2);System.out.println(sc==sc3);//使用ServletContext对象完成数据共享//数据存储sc.setAttribute("str", "ServletContext对象学习");//获取项目web.xml的全局配置数据String str = sc.getInitParameter("name2"); // name2是web.xml中的//<context-param>//<param-name>name2</param-name>// <param-value>zhangsan</param-value>// </context-param>System.out.println("全局配置参数:"+str);//获取项目根目录下的资源的绝对路径//String path="D:\\apache-tomcat-7.0.56\\webapps\\sc\\doc\\1.txt";String path=sc.getRealPath("/doc/1.txt");System.out.println(path);//获取项目根目录下资源的流对象InputStream is = sc.getResourceAsStream("/doc/1.txt");}
}
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 ServletContextServlet2 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//创建ServletContext对象ServletContext sc=this.getServletContext();//获取数据System.out.println("ServletContextServlet2.service()"+sc.getAttribute("str")); //str是ServletContextServletsc.setAttribute("str","ServletContext对象学习");}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><!--配置全局数据 --><context-param><param-name>name2</param-name><param-value>zhangsan</param-value></context-param><display-name>06-ServletContext</display-name><servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>ServletContextServlet</servlet-name><servlet-class>com.bjsxt.servlet.ServletContextServlet</servlet-class></servlet><servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>ServletContextServlet2</servlet-name><servlet-class>com.bjsxt.servlet.ServletContextServlet2</servlet-class></servlet><servlet-mapping><servlet-name>ServletContextServlet</servlet-name><url-pattern>/context</url-pattern></servlet-mapping><servlet-mapping><servlet-name>ServletContextServlet2</servlet-name><url-pattern>/context2</url-pattern></servlet-mapping>
</web-app>
ServletConfig示例
package com.bjsxt.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;
/*** ServletConfig对象学习:* 问题:* 如何获取在web.xml中给每个servlet单独配置的数据呢?* 解决:* 使用ServletConfig对象* 使用:* 获取ServletConfig对象* 获取web.xml中的配置数据* @author MyPC**/
public class ServletConfigServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//获取ServletConfig对象ServletConfig sc=this.getServletConfig();//获取web.xml中的配置数据String code=sc.getInitParameter("config");System.out.println(code);}
}
web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>07-ServletConfig</display-name><servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>ServletConfigServlet</servlet-name><servlet-class>com.bjsxt.servlet.ServletConfigServlet</servlet-class><init-param><param-name>config</param-name><param-value>utf-8</param-value></init-param></servlet><servlet-mapping><servlet-name>ServletConfigServlet</servlet-name><url-pattern>/sg</url-pattern></servlet-mapping>
</web-app>
ServletContext对象、ServletConfig对象相关推荐
- 【Servlet】ServletContext、ServletConfig对象学习、用户登录系统完善
总结:request.cookie.session.context的区别 这四个对象有不同级别的作用域和生命周期. (1)request:解决了一次请求内的数据共享问题(作用域:一次请求) req.s ...
- ServletConfig对象和ServletContext对象
ServletConfig对象是servlet配置对象,(web.xml中的)servlet信息封装在ServletConfig对象中,因此在一个web应用可存在多个ServletConfig.Ser ...
- Java Servlet(三):Servlet中ServletConfig对象和ServletContext对象
本文将记录ServletConfig/ServletContext中提供了哪些方法,及方法的用法. ServletConfig是一个抽象接口,它是由Servlet容器使用,在一个servlet对象初始 ...
- ServletConfig对象和ServletContext对象配置初始化参数
ServletConfig对象 : 主要是用于加载servlet的初始化参数.在一个web应用可以存在多个 ServletConfig对象(一个Servlet对应一个ServletConfig对象) ...
- javaweb_笔记1(系统架构;servlet分析,注册,生命周期;Servletconfig对象(四个方法)和Servletcontext对象;http协议,get,post)
1.关于系统架构 1.1系统架构包括 C/S架构: Client/Server(客户端/服务器) 例如电脑上安装的各种软件,qq等,需要安装特定的软件 优点: 速度快(软件中数据大部分在客户端中,少量 ...
- ServletConfig 对象
ServletConfig 对象 问题: 使用 ServletContext 对象可以获取 web.xml 中的全局配置文件, 在 web.xml 中 每个Servlet 也可以进行单独的配置,那么该 ...
- servletConfig对象
servletConfig对象 当Tomcat初始化一个servlet时,会将servlet配置信息封装到一个servletConfig对象中: <servlet> <servlet ...
- ServletContext、ServletConfig(FilterConfig)学习笔记
ServletConfig 每个servlet对应一个ServletConfig对象,不可以被其他servlet访问. 作用: 1.通过下面防范访问web.xml文件: ServletConfig.g ...
- JSP的9个内置对象(隐含对象)
JSP的9个内置对象(隐含对象) JSP内置对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员声明即可使用. 9个内置对象如下: page:代表当前JSP页面 request ...
最新文章
- 图书管理系统5W1H
- 此代码募集最优秀的答案
- jQuery将不再支持IE6/7/8
- 编程之美-双线程高效下载方法整理
- JCO连接SAP例子
- c 语言名称的作用域,C 作用域规则
- Java中List Set Map 是否有序等总结
- python做自动化控制postman_使用postman+newman+python做接口自动化测试
- java数据分析库,威力加强版
- C#托管代码调用C++非托管代码
- acm康复训练记4-world final 2017
- 线性规划 整数规划 01规划
- MVC学习笔记:MVC实现用户登录验证ActionFilterAttribute用法并实现统一授权
- 【apache】phpstudy中apache 隐藏入口文件index.php (解决no input file specified错误)
- ECTOUCH广告图片轮播间隔调整 ECTOUCH教程
- c语言10的10万次方,在c语言编程中 10的n次方应该怎么表达
- windows 10 主题美化
- 200plc与施耐德ATV610变频器modbus通讯
- 千兆网线做法和网线接法注意事项
- java word 在线编辑图片,_卓正软件 - PageOffice官方网站 - 在线编辑Word、Excel的Office文档控件...
热门文章
- leetcode 462. Minimum Moves to Equal Array Elements II
- 《团队-爬取豆瓣电影TOP250-设计文档》
- FormView用法
- 第10章 bit_vector位向量容器
- EntityFramework 4.1 如何加入项目
- WPF纯手工两步打造图片切割工具(二)
- 带你了解FPGA(1)--一些需要了解的概念
- java多态的简单例子_要JAVA的简单例子,继承\多态的,详细讲解运行的每一步
- 7-53 字符串逆序 (10 分)
- 结构体知识------值传递和址传递