Servlet学习D4 -- Servlet中的常见对象1,2

Servlet学习D4 – Servlet中的常见对象

1. ServletContext

2. ServletConfig

3. Cookie&session

一、 servletContext对象

Sevlet上下文对象的作用是:
  1,相对路径转绝路径

		String path = "/2019-03-21 16-18-00 的屏幕截图.png";
		//获取ServletContext 对象
		ServletContext sc=this.getServletContext();
		//相对路径转绝对路径
		String realPath=sc.getRealPath(path);
//		File file = new File(realPath);
//		InputStream is  =new FileInputStream(file);
		System.out.println(realPath);

2,获取容器附加信息

	sc.getServerInfo():获取服务器版本号
	sc.getMajorVersion():获取Servlet版本号

3,全局容器
Servletcontext通过两个api完成对他的添加与读取的操作

setAttrbuter(String key,Object value);

Object value = getAttrbuter(Stirng key);

3.1自启动的servlet

所谓 的自启动的servlet表示,该servlet的实例化不依赖于请求,而是依赖于容器。当容器启动时会实例化这个servlet。

如果将一个servlet修改为自启动呢?

在web.xml文件中找到这个servlet所对应的在该节点中添加100 其中100为优先级的标识,他并不是一个时间。当为多个serlvet配置了自启动时,tomcat会根据数值的大小来觉得启动的先后顺序。数值越小的优先级越高。

 <servlet>
    <description></description>
    <display-name>ReadInitConfigg</display-name>
    <servlet-name>ReadInitConfigg</servlet-name>
    <servlet-class>com.jay.ReadInitConfig</servlet-class>
    <load-on-startup>100</load-on-startup>   其中100即用于配置自启动servlet(100表示优先级,1最大)
  </servlet>

使用全局容器时需要注意的地方

千万不要存业务数据。因为ServletContext的生命周期太长了。意味着存放在该对象下的数据也会一直存在,那么我们还需要考虑到数据同步的问题

此外,在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法:
  今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下:

1 //获取ServletContext对象
2 ServletContext servletContext = this.getServletContext();

这个问题很奇怪,也是第一次遇到,因为以前在servlet的doGet/doPost方法中要获取ServletContext对象时都是这样写的,也没有出现过java.lang.NullPointerException(空指针)异常,上网查了一下出现这个异常的原因:原来是我重写了init(ServletConfig)方法,但重写的init方法内部没有调用super.init(config);就是这导致了错误!父类的 init(ServletConfig)有处理获取ServletContext对象的引用,在doGet/doPost/service方法方法中才能够通过 getServletContext()方法获取到SeverletContext对象!重写了Servlet的init方法后一定要记得调用父类的init方法!!!,否则在service/doGet/doPost方法中使用getServletContext()方法获取ServletContext对象时就会出现java.lang.NullPointerException异常

 public void init(ServletConfig config) throws ServletException {
   //重写了Servlet的init方法后一定要记得调用父类的init方法,
	否则在service/doGet/doPost方法中使用getServletContext()方法获取ServletContext对象时
	就会出现java.lang.NullPointerException异常
   super.init(config);
	//接下来才是自己的init方法体 
}

4, 读取web.xml文件中的配置信息
    配置web.xml

  <context-param>
  <param-name>key</param-name>
  <param-value>param-value</param-value>
  </context-param>

获取配置文件中的配置信息

String value = sc.getInitParameter("key");

二、ServletConfig对象

用户读取我们在servlet节点中配置的配置信息。注意一个每个servletConfig对象只能去读取在web.xml文件中对于当前这个serlvet的配置信息中的节点中的值。不能夸servler获取。
修改  Web.xml

<servlet>
    <description></description>
    <display-name>ServletConfigDemo</display-name>
    <servlet-name>ServletConfigDemo</servlet-name>
    <servlet-class>com.jay.ServletConfigDemo</servlet-class>
    <init-param>
       <param-name>ServletConfigDemo-key</param-name>
       <param-value>ServletConfigDemo-value</param-value>
    </init-param>
  </servlet>

java代码

	  ServletConfig  sc  = this.getServletConfig();
      sc.getInitParameter("ServletConfigDemo-key");

111

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值