java servletconfig_JavaWeb(一)Servlet中的ServletConfig与ServletContext

前言

前面我介绍了一下什么是servlet,它的生命周期,执行过程和它的原理。这里我们做一个简单的回顾!

什么是Servlet?

servlet 是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

执行过程:

731d89e08361fc12bd758be54ca81cd6.png

生命周期:

实例化-->初始化-->服务->销毁

出生:(实例化-->初始化)第一次访问Servlet就出生(默认情况下)

活着:(服务)应用活着,servlet就活着

死亡:(销毁)应用卸载了servlet就销毁。

如何让servlet在服务器启动时就创建:

在web.xml中的servlet标签里面配置一个load-on-startup来设置

一、Servlet规范核心类图

16b85e513d544e760bffb03456c85cb2.png

接下来我们要说的是Servlet的四个类:

ServletConfig对象,ServletContext对象、request对象,response对象

从图中我们可以知道这几个对象之间的联系!

一、ServletConfig对象

1.1、获取ServletConfig对象

1)使用初始化方法获得一个ServletConfig对象

23eb9f4de8a09f00f422426ce1f0ef71.png

2)通过继承父类(GenericServlet)的方法得到一个ServletConfig对象

ServletConfig config = this.getServletConfig();

1.2、ServletConfig对象作用

e3b5e3a0bb616766b404508341586888.png

1)getServletName();  //获取servlet的名称,也就是我们在web.xml中配置的servlet-name

2)getServletContext(); //获取ServletContext对象,该对象的作用看下面讲解

3)getInitParameter(String); //获取在servlet中初始化参数的值。这里注意与全局初始化参数的区分。这个获取的只是在该servlet下的初始化参数

1948a527e0975bb4a3b98692978d3bef.png

4)getInitParameterNames(); //获取在Servlet中所有初始化参数的名字,也就是key值,可以通过key值,来找到各个初始化参数的value值。注意返回的是枚举类型

0e5d93e420053aadc297f5a20af89226.png

在Servlet类中

83ac3e592daca7dfa828bb9e5a495b2c.png

结果

ca47bd3e358774e8b5be20c400680448.png

注意:在上面我们所分析的源码过程中,我们就知道,其实可以不用先获得ServletConfig,然后在获取其各种参数,可以直接使用其方法,比如上面我们用的ServletConfig().getServletName();

可以直接写成getServletName();而不用在先获取ServletConfig();了,原因就是在GenericServlet中,已经帮我们获取了这些数据,我们只需要直接拿就行。

String value = this.getInitParameter("wolf");

二、ServletContext

2.1、获取ServletContext对象

1)getServletContext();

2)getServletConfig().getServletContext();

这两种获取方式的区别就跟上面的解释一样,第一种是直接拿,在GenericServlet中已经帮我们用getServletConfig().getServletContext();拿到了ServletContext。

我们只需要直接获取就行了,第二种就相当于我们自己在获取一遍,两种读是一样的。

2.2、ServletContext对象作用

tomcat为每个web项目都创建一个ServletContext实例,tomcat在启动时创建,服务器关闭时销毁,在一个web项目中共享数据,管理web项目资源,

为整个web配置公共信息等,通俗点讲,就是一个web项目,就存在一个ServletContext实例,每个Servlet读可以访问到它。

1)web项目中共享数据

在一定范围内(当前应用),使多个Servlet共享数据

getAttribute(String name)、setAttribute(String name, Object obj)、removeAttribute(String name)

24856f958678e8e90bfed4da959aae34.png

1.1)setAttribute(String name, Object obj) 在web项目范围内存放内容,以便让在web项目中所有的servlet读能访问到

1.2)getAttribute(String name) 通过指定名称获得内容

1.3)removeAttribute(String name) 通过指定名称移除内容

实例:

我们在Servlet_demo_0010中写:

this.getServletContext().setAttribute("bang", "adc");

然后我们在Servlet_demo_0020中看能不能获取到:

7ee549c0772fb67db41be3a0819e18d7.png

结果:

得到了adc

2)获取全局配置信息

整个web项目初始化参数 (这个就是全局初始化参数,每个Servlet中都能获取到该初始化值)

2.1)getInitPatameter(String name)  //通过指定名称获取初始化值

2.2)getInitParameterNames()  //获得枚举类型

web.xml 配置 整个web项目的初始化

52634fc2092d7e4563f540e4e42acfb5.png

8d2bb0dac31308a8124669689c516891.png

结果:

3716c6ad799f32a74fd8cdfe291da7b2.png

3)获取web项目资源

3.1)获取web项目下指定资源的路径:getServletContext().getRealPath("/WEB-INF/web.xml")

String  getRealPath(String path);//根据资源名称得到资源的绝对路径

dda32536df809243eb5ac5c2105bed9b.png

结果:

5c198a084521d0b7b0bde48a4729f6d6.png

应用:

9bf4e9ea71f03904be91e9c9057a1a1b.png

66f5f00753750ca8421c2a4288282f28.png

3.2)获取web项目下指定资源的内容,返回的是字节输入流。InputStream getResourceAsStream(java.lang.String path)

cadc5019864c0a5a2de1a8a7f8a56607.png

结果的一部分:

4eb64d4a7b5f196487270293f146e65e.png

3.3)getResourcePaths(java.lang.String path)  指定路径下的所有内容。

cb51d894049d52af0919d09282010e76.png

结果:

02f81033d0be7e44651767145604e975.png

3.4)实现servlet的转发

RequestDispatcher  getRequestDispatcher(String path) ;//参数表示要跳转到哪去

641ac01aca084add3100a73609cb88b1.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值