java基础学习:JavaWeb之ServletConfig与ServletContext

其余更多java基础文章: java基础学习(目录)java


Servlet规范核心类图

  

image

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

  ServletConfig对象,ServletContext对象、下一节讲request对象,response对象tomcat

从图中咱们能够知道这几个对象之间的联系!bash

ServletConfig对象

获取ServletConfig对象
  1. 经过继承父类(HttpServlet或GenericServlet)的方法获得一个ServletConfig对象
ServletConfig config = this.getServletConfig();
复制代码
ServletConfig对象的做用

image.png

  1. getServletName() :获取servlet的名称,也就是咱们在web.xml中配置的servlet-name
  2. getServletContext():获取ServletContext对象,该对象的做用看下面讲解
  3. getInitParameter(String):获取在servlet中初始化参数的值。这里注意与全局初始化参数的区分。这个获取的只是在该servlet下的初始化参数
<servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.hiway.servlet.Myservlet</servlet-class>
        <init-param>
            <param-name>name</param-name>
            <param-value>123456</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/Myservlet</url-pattern>
    </servlet-mapping>
复制代码
  1. getInitParameterNames():获取在Servlet中全部初始化参数的名字,也就是key值,能够经过key值,来找到各个初始化参数的value值。注意返回的是枚举类型
Enumeration<String> initParameterNames = this.getInitParameterNames();
while(initParameterNames.hasMoreElements()){
   String name = initParameterNames.nextElement();
   String value = this.getInitParameter(name);
}
复制代码

ServletContext对象

获取ServletContext对象
  1. 经过ServletConfig获取,若是继承父类(HttpServlet或GenericServlet),则可直接调用方法获取
getServletContext();
//或
getServletConfig().getServletContext();
复制代码
  1. 还有一种在web应用中,经过HttpServletRequest获取
request.getSession().getServletContext()
复制代码
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)服务器

    

image

1.1 setAttribute(String name, Object obj) 在web项目范围内存放内容,以便让在web项目中全部的servlet读能访问到
1.2 getAttribute(String name) 经过指定名称得到内容
1.3 removeAttribute(String name) 经过指定名称移除内容app

2. 获取全局配置信息
整个web项目初始化参数 (这个就是全局初始化参数,每一个Servlet中都能获取到该初始化值)
2.1)getInitPatameter(String name)  //经过指定名称获取初始化值 2.2)getInitParameterNames()  //得到枚举类型post

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:applicationContext.xml
        </param-value>
    </context-param>
复制代码

3. 获取web项目资源
3.1)获取web项目下指定资源的路径 :
String getRealPath(String path);//根据资源名称获得资源的绝对路径学习

ServletContext servletContext = this.getServletContext();
        String path = servletContext.getRealPath("/WEB-INF/web.xml");
        System.out.println(path);

F:\myworkspace\ServletTest\out\artifacts\ServletTest_war_exploded\WEB-INF\web.xml
复制代码

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

InputStream in  = servletContext.getResourceAsStream("/WEB-INF/web.xml");
        InputStreamReader isr = new InputStreamReader(in,"UTF-8");
        BufferedReader br = new BufferedReader(isr);
        String s = null;
        while((s =br.readLine())!=null){
            System.out.println(s);
        }
复制代码

image.png

3.3)getResourcePaths(java.lang.String path) 指定路径下的全部内容。this

Set set = servletContext.getResourcePaths("/WEB-INF");
        Iterator iterator = set.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
复制代码

image.png

3.4)实现servlet的转发
RequestDispatcher getRequestDispatcher(String path) ;//参数表示要跳转到哪去

RequestDispatcher rd = servletContext.getRequestDispatcher("/Servlet1");
        rd.forward(req,resp);
复制代码
相关文章
相关标签/搜索