servlet ServletConfig ServletContext
ServletConfig对象
在Servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数。
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中国,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
配置文件web.xml中某个<servlet></servlet>中间有这么一段:
<init-param>
<param-name>data</param-name>
<parm-value>xxxxx</param-value>
<init-param>
<!--<load-on-startup>2</load-on-startup>-->
那么该servlet实例化的时候会把这些内容一起加载。
servlet中的代码(复写了init):
……entends HttpServlet{
private ServletConfig config;
……doGet……
String value = config.getInitParameter("data");//得到xxxxx
……
……doPost……
public void init(ServletConfig config)throws ServletExceptio{
//super.init(config);
this.config = config;
}
其实父类HttpServlet的父类GenericSrvlet中已经定义了这么个私有的东西,并在其init方法中获取了。还提供了一个获取方法:
public ServletConfig getServletConfig(){
return config;
}
我们可以在自己的类中直接用这个方法获得。
得到所有:
Enumeration e = this.getServletConfig().getInitParameterNames();
whie(e.hasMoreElements()){
String name = (String)e.nexElement();
String value = this.getServletConfig().getInitParameter(name);
}
用到的场合。
比如:
解码方式可以配置一个
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
ServletContext
web容器在启动时,它会为每个web应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
获取方式:
方式一,
ServletContext context = this.getServletConfig().getServletContext();
方式二,
context = this.getServletContext();
ServletContext的应用:
由于一个web应用中所有的Servlet共享同一个ServletContext对象,所以多个Servlet通过ServletContext对象实现数据共享。
ServletContext对象通常也称之为context域对象。
域:范围。 context域对象:作用范围是整个应用程序的对象。除此之外还有request session page域对象。
一个Servlet1中有如下代码:
String data ="aaa";
this.getServletContext().setAttribute("data",data);
另一个Servlet2中有如下代码:
String value = (String)this.getServletContext().getAttribute("data");
当Servlet1执行过,Servlet2就可以获取aaa。
比如聊天室就可以用这个servltContext。
web.xml中的<web-app></web-app>中间可以有这么一段:
<context-param>
<param-name>data</param-name>
<param-value>xxxx</param-value>
<param-name>data2</param-name>
<param-value>xxxx2</param-value>
</context-param>
加载该web应用就会自动把该参数加载。
在程序中获取:
this.getServletContext().getInitParameterNames();和ServletConfig类似。
在配置文件中配置改起来很方便。如果在程序中改要改代码,重新编译比较麻烦。
ServletContext还实现了Servlet的转发:
String data = "abc";
data = "<meta http-equiv='fresh' content='3;url=/myweb/index.jsp'>3秒后将跳转";
//this.getServletContext().setAttribute("data",data);由于servlet是单例子的,所以这样有可能最后加进去的data是bcd而非abc,所以这种设置全局的方式不要采用
//不过可以在jsp页面通过获取全局某个属性的方式显示这个data:<% String str = (String)Applcation.getAttribute("data");out.write(str); %>
RequestDispatcher rd = this.getServletContext().getRequestDispatcher("1.jsp");
rd.forward(request,response);//页面将转至1.jsp页面,与重定向不同,这样仅请求了一次服务器,而重定向是两次。
Servletcontext读取资源文件.properties文件:
关于properties文件:
properties和xml都是资源文件,不同之处是xml一般用来存有关系的数据,而properties文件则存放类似用户名、密码、数据库连接地址之类没有关系的数据。
properties文件内容样例:
url=jdbc:mysql://localhost:3306/test
username=admin
password=admin
如上面所写要带个等号。
下面写一下
Servletcontext读取资源文件代码示例:
Inputstream in = this.getServletContext().getResourceAdStrem("/db.properties");
关于这个相对路径的书写,用context读取,相对路径中的第一个"/"表示web应用目录。例如,你在开发的时候把properties放在src下,那么部署到服务器后会出现在“根目录/WEB-INF/classes/”下,这个时候应该写“/WEB-INF/classes/xx.properties”。如果直接用读取流,那么相对路径就变成了启动Tomcat服务器的目录,即Tomcat下的bin目录。
Properties props = new Properties();//map
props.load(in);
String url = props.getProperty("url");//获取键值
更多内容参见API
servlet ServletConfig ServletContext的更多相关文章
- Server,Servlet,ServletConfig,ServletContext,Session,Request,Response
Server流程 解析URL->找到应用->找到Servlet->实例化Servlet->调用init->调用service->返回响应->调用destroy ...
- JavaWeb之Servlet: ServletConfig 与 ServletContext
ServletConfig对象 什么是ServletConfig对象 ServletConfig对象,叫Servlet配置对象.主要用于加载配置文件的初始化参数. 创建时机 ServletConfig ...
- Servlet开发(三)之ServletConfig,ServletContext
1. ServletConfig Servlet是开发动态web的技术,而web.xml是Tomcat工程中最基础也最重要的配置文件,Tomcat启动项目的时候会加载并读取这个文件,其中web.xml ...
- JavaWeb -- 服务器传递给Servlet的对象 -- ServletConfig, ServletContext,Request, Response
1. ServletConfig 有一些东西不合适在程序中写死,应该写在web.xml中,比如 文字怎么显示, 访问数据库名 和 密码, servlet要读取的配置文件 等等.. l在Servle ...
- Servlet、ServletContext与ServletConfig的详解及区别
Servlet.ServletContext与ServletConfig的详解及区别 一.Servlet详解 Servlet是一个interface,全局限定名:javax.servlet.Servl ...
- 02 http,servlet,servletconfig,HttpServletRequest ,HttpServletResponse
Http协议 协议:双方在交互.通讯的时候, 遵守的一种规范.规则.http协议:针对网络上的客户端 与 服务器端在执行http请求的时候,遵守的一种规范. 其实就是规定了客户端在访问服务器端的时候, ...
- 第一个web程序(web.xml , ServletConfig , ServletContext)
一:第一个jsp程序 1.项目设计结构 2.新建Person.java package com.java.demo; public class Person { public void printSt ...
- Servlet之ServletContext以及文件操作
ServletContext ------------------------------------ ServletContext是什么? 与cookie,session比较. 可以把它想象成一个共 ...
- 2.深入学习Servlet的ServletContext对象
一.建立项目servlet01 在入门Servlet项目中建立一个子项目模块(此处不再赘述如何建立),补全maven项目中的java和resources文件夹,添加类HelloServlet.java ...
随机推荐
- EF实体框架处理实体之间关联关系与EF延迟机制(下)
在数据库中,表与表之间可能存在多种联系,比如,一对多,多对多的关系.当我们使用逻辑外键在数据库建立两张表之间的关系的时候,我们使用EF实体框架 必然也会将这种关系映射到我们的实体关系中来.所以,在我们 ...
- .NET:CLR via C# Compute-Bound Asynchronous Operations
线程槽 使用线程池了以后就不要使用线程槽了,当线程池执行完调度任务后,线程槽的数据还在. 测试代码 using System; using System.Collections.Generic; us ...
- AD域 根据 用户属性userAccountControl 来判断用户禁用属性
参考:https://support.microsoft.com/zh-cn/help/305144/how-to-use-the-useraccountcontrol-flags-to-manipu ...
- Ip和long互转
// <summary> /// 将127.0.0.1形式的IP地址转换成十进制整数 /// </summary> /// <param name="strIp ...
- MiniGUI ial 移植指南
MiniGUI ial 移植指南 2.1 ial的定义 ial是一个通用的抽象输入接口,可以输入统一的数据的结构,也就是说在MiniGUI的核心代码里输入的数据的格式是固定的,不管输入设备是鼠标 还是 ...
- OpenCV学习(24) 直方图(1)
直方图是对数据的统计,并将统计结果分布于一系列预定义的槽中.这里的数据不仅仅指的是灰度值,它可以是任何能有效描述图像特征的数据,比如图像梯度等等. 假设有一个矩阵包含一张图像的信息 (灰度值 0-25 ...
- 第七章 Xmemcached客户端介绍
提示:有关于XMemcached在实际开发中的具体使用,查看"Java企业项目开发实践"系列博客的<第八章 企业项目开发--分布式缓存memcached> 注意:本文主 ...
- go语言之进阶篇指针类型和普通类型的方法集
方法集 类型的方法集是指可以被该类型的值调用的所有方法的集合. 用实例实例 value 和 pointer 调用方法(含匿名字段)不受方法集约束,编译器编总是查找全部方法,并自动转换 receiver ...
- Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息
本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...
- iphone手机微信端html5 Geolocation定位失效的问题
使用Geolocation方法存在错误信息error.POSITION_UNAVAILABLE 其实问题不局限于微信端而是iphone升级到ios10后,对获取地理位置信息作出了限制,只有https的 ...