ServletConfig:
ServletConfig是什么和来源?
1.ServletConfig代表当前Servlet在web.xml中的配置信息。
获取ServletConfig对象的方式“
继承来自servlet,servlet对象进行获取该方法
//ServletConsfig代表的是当前web应用的配置信息 this代表的是当前的对象servlet对象,对象的顶级存在全局的配置信息
ServletConfig config = this.getServletConfig();
System.out.println("获取当前的配置对象:"+config);
专业解释:
在Servlet接口中init方法参数就是ServletConfig,在Servlet创建出来时,init方法立即被容器调用,由容器传入ServletConfig对象。
在GenericServlet中,实现了这个方法,将ServletConfig设置成了类的成员变量,并提供了getServletConfig方法,获取该对象。
我们的Servlet都间接继承子GenericServlet,所以可以在自己的Servlet中直接调用getServletConfig方法获取这个对象。
ServletConfig对象功能:
1. ServletConfig获取初始化参数
2. 配置初始化参数
3. 在web.xml中的<servlet>标签中可以配置零个或多个<init-param>标签,用来为当前Servlet配置一些自定义的参数
4. 可以为每个servlet进行配置初始化参数,不是一个全局对象,是每个servlet的对象
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//ServletConsfig代表的是当前web应用的配置信息 this代表的是当前的对象servlet对象,对象的顶级存在全局的配置信息
ServletConfig config = this.getServletConfig();
System.out.println("获取当前的配置对象:"+config);
//通过配置信息进行获取参数信息
String servletName = config.getServletName();
System.out.println("当前Servlet的名字"+servletName);
ServletContext servletContext = config.getServletContext();
System.out.println("当前SrvletContext的虚拟路径:"+servletContext);
Enumeration<String> initpapm = config.getInitParameterNames();
//遍历所有的初始化参数的名字
while (initpapm.hasMoreElements()){
String name = initpapm.nextElement();
//s根据参数名获取参数值
String initParameter = config.getInitParameter(name);
System.out.println(name+"~"+initParameter);
}
}
Servlet Config对象的声明周期:
生命周期;
sevletConfig对象随着servlet创建的时候进行出现,一旦进行创建,则该对象主动拥有该servlet的对象的属性信息和配置信息
可以通过响应的方法进行获取对应的配置信息,也可以进行配置servlet的参数的信息,当servlet被销毁或者被移除容器的时候,对象被销毁
ServletContext:----->最主要的是使用的域对象比较多,进行共享数据的消息
概述:
ServletContext对象代表当前web应用。当服务器启动时,服务器在启动时会依次加载web应用,每一个web应用加载完成后都会创建一个ServletContext对象唯一代表该web应用,这个对象一直存活,直到web应用移除出容器或服务器关闭时,随着应用销毁,ServletContext对象跟着销毁。
ServletContext是什么和来源?
来源:
服务器在启动时会依次加载web应用,每一个web应用加载完成后都会创建一个ServletContext对象唯一代表该web应用,这个对象一直存活,直到web应用移除出容器或服务器关闭时,随着应用销毁,ServletContext对象跟着销毁,当web应用出现创建的时候,该被服务器创建
ServletContext对象功能:
1. . ServletContext对象读取web应用初始化参数 存在的是全局区域 跟ServletConfig对象不一致
<context-param>
<param-name>encode</param-name>
<param-value>utf-8</param-value>
获取参数:
可以利用ServletContext对象的如下方法获取初始化信息:
ServletContext.getInitParameter();
ServletContext.getInitParameterNames();
注意:
但是这种初始化参数只能在该Servlet内部获取。而为整个web应用配置的初始化参数,通过ServletContext可在整个web应用中使用。
2. ServletContext对象作为域对象使用
域:一个对象具有了可以被看见的范围,利用这个对象身上的Map,在这个范围内共享数据,这样的对象叫做域对象
ServletContext域:
作用范围:
整个web应用
生命周期:
当服务器启动web应用加载后立即创建代表这个web应用的ServletContext对象,一直驻留在内存中,唯一的代表这个web应用,直到服务器关闭或web应用被移除出容器时,随着web应用的销毁,ServletContext对象销毁
操作域的方法:
setAttribute(String name,Object obj);//向域中设置数据
Object getAttribute(String name);//从域中获取数据
removeAttribute(String name);//从域中移除数据
在web.xml中利用标签为整个web应用配置初始化信息
encode
utf-8
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* ServletContext对象代表的是当前web应用的对象,在应用创建之初tomcat中创建一个对象,servletContext
* 一个应用只有一个ServletContext对象,唯一标识该web应用的对象
*
*
*/
//方式一:获取servletContext对象
ServletContext sc1 = this.getServletConfig().getServletContext();
//方式二;获取servletContext对象
ServletContext sc2 = this.getServletContext();
System.out.println(sc1==sc2);
//响应浏览器的对象
response.getWriter().write("你好,世界!");
//功能一;配置全局web应用的初始化信息对象,比如整个web应用的编码
Enumeration<String> initParameterNames = sc1.getInitParameterNames();
while(initParameterNames.hasMoreElements()){
String name = initParameterNames.nextElement();
String initParameter = sc1.getInitParameter(name);
System.out.println(name+":"+initParameter);
}
//功能二:作为域对象使用进行获取整个Web应用的作用域,域作用于是最大的
sc1.setAttribute("msg","你好世界");
//设置的作用域范围可以进行数据的共享
/**
* ServletContext的生命周期,随着web应用的创建二创建,除非web应用被销毁。或者服务器已经进行了关闭
* 对象一直存活在整个web应用中,知道web应用被销毁,或者被服务器异常关闭
*
* 四大作用域:request session ServletContext page
*
*/
//功能三:获取路径进行资源的读取
//一般使用的是通过getServletContext对象进行获取web的资源,不通过对应的类加载加载sWEB-INF/classes加载资源文件
//功能三:获取路径进行资源的读取 拼接出系统的盘符路径,最终得到的是绝对路径
String path = sc1.getRealPath("ServletConfigDemo1.java");
System.out.println(path);
//servletContext.getRealPath("xxxx");--这个方法会在传入的路径前拼接当前web应用的硬盘路径,
// 从而拼接出资源的硬盘路径,从而可以找到资源。
//根据类加载器来加载文件 ,最终获取的是路径 加载加载的是文件,任何文件都可以进行加载进入内存
//通过类加载器及逆行获取类路径
String path1 = ServletContextDemo1.class.getClassLoader().getResource("/ServletCofigServlet/WEB-INF/classes/a.xml").getPath();
//URLs统一资源定位符 也就是长的地址
System.out.println("类加载器获取的路径:"+path1);
}
类加载器读取资源:
如果当前程序中没有ServletContext可以用,此时可以拜托类加载器帮我们加载资源:
类加载器可以加载.class文件,同样也可以加载其他类型的资源文件
在ClassLoader上提供了getResource("相对于类加载目录的路径")可以加载资源,但是要求这个路径给一个相对于类加载器加载类的目录的路径(WEB-INF/classes)