上下文对象
上下文对象概述及生命周期
上下文对象在项目中,是一个全局管理者.是单例的,只有一个
在服务器启动的时候,服务器会自动的为我们创建出来一个上下文对象.这个上下文对象始终存储在服务器上.当服务器关闭,上下文对象销毁.
上下文对象作为项目的全局管理者,可以服务于每一个servlet.
每一个servlet都可以随时随地的取得并使用上下文对象.
上下文对象的取得方式
* 取得上下文对象的方式:
*
* 取得方式1:
* ServletContext application = this.getServletConfig().getServletContext();
* 变量名:必须叫application
*
* 取得方式2:
* ServletContext application = this.getServletContext();
*
* 未来的实际项目开发,使用第二种方式来取得上下文对象,因为简单方便.
* 注意:第二种方式,虽然没有调用getServletConfig()方法,但是内部的实现原理仍然是先调用了getServletConfig()方法,只不过在代码中省略掉了而已.
*
* 第一种方式和第二种方式的实现原理是一模一样的,第二种是第一种的简写形式.
上下文对象的常用方法
(1)获得全局初始化参数
getInitParameter(String key)
搭配web.xml中的配置
通过key获取value
<!--
以下 配置为 配置全局参数
全局参数可以应用于所有的servlet
所有的servlet都可以通过上下文对象来使用这个全局参数
-->
<context-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</context-param>
(2)作为域对象存取数据
在servlet中,域对象一共有3种.上下文域对象是其中一种
* 域对象是用来做存取值操作的.
* 在域对象中保存的值,只要域对象没有销毁,那么域对象中的值就始终存在
*
* 作为上下文域对象,取值范围最广泛.
* 当我们将值存放到上下文域对象中之后,上下文对象不销毁,里面存的值也始终存在.服务器关闭,上下文对象销毁,里面的值也随之销毁.域对象的存取值和值的是否销毁,与浏览器是否重启无关
*
* 域对象的常用方法:
* 存值: 域对象.setAttribute(String key,Object value)
* 取值: 域对象.getAttribute(String key) Object value
* 移除值: 域对象.removeAttribute(String key)
(3)获取项目发布路径
getRealPath("/");
//获取项目发布路径
ServletContext application = this.getServletContext();
String path = application.getRealPath("/");
//E:\Code\apache-tomcat-9.0.0.M10\webapps\1_servlet5\
System.out.println(path);
ServletConfig对象
ServletConfig对象概述
在Servlet对象创建出来之后,搭配每一个Servlet对象,会伴随着一个ServletConfig对象的产生.
Servlet对象是我们要用的对象,ServletConfig对象是用来装饰Servlet对象的配置对象.
Servlet对象就相当于人,ServletConfig对象相当于衣服.
先有Servlet对象,后有ServletConfig对象
该对象在实际项目中没有什么作用,在开发框架时会用到
ServletConfig对象取得方式
/*
* ServletConfig对象的取得:
* ServletConfig config = this.getServletConfig();
* 变量名:config
*/
@Override
public void init(ServletConfig config) throws ServletException {
//创建ServletConfig对象的过程
super.init(config);
}
ServletConfig对象常用方法
(1)获得web.xml中配置的servlet-name
getServletName()
ServletConfig config = this.getServletConfig();
String sname = config.getServletName();
System.out.println(sname);//myServlet3
(2)根据key获取value
getInitParameter(String key)
配合web.xml中的配置(注意配置在servlet-class的下方)
<servlet>
<servlet-name>myServlet3</servlet-name>
<servlet-class>com.jpg.servlet.MyServlet3</servlet-class>
<!--
该参数的配置,仅能应用于当前servlet
其他的servlet不能使用
-->
<init-param>
<param-name>str</param-name>
<param-value>dedaowo</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>myServlet3</servlet-name>
<url-pattern>/myServlet3.do</url-pattern>
</servlet-mapping>
String value = config.getInitParameter("str");
System.out.println(value);//dedaowo
(3)取得上下文对象
ServletConfig config = this.getServletConfig();
ServletContext application = config.getServletContext()
搭配init方法的注意事项
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
//super.init(config);
}
//搭配init方法的注意事项
ServletConfig config = this.getServletConfig();
System.out.println(config);//null
如果重写了带config参数的init方法,如果把init删除,则就不会创建ServletConfig对象,尽量使用无参的init方法