Servlet中的ServletContext和ServletConfig详解

来源:互联网 发布:未来国际局势知乎 编辑:程序博客网 时间:2024/06/18 06:49

ServletContext和ServletConfig是Servlet中比较重要的两个概念,在Java Web开发的很多时候都会碰到这两个对象,下面就详细的介绍下他们。
1.ServletContext
ServletContext,即Servlet上下文是servlet与servlet容器之间的直接通信的接口。Servlet容器在启动一个Webapp时,会为它创建一个ServletContext对象。每个webapp都有唯一的ServletContext对象。同一个webapp的所有servlet对象共享一个ServeltContext,servlet对象可以通过ServletContext来访问容器中的各种资源。下面通过一些具体的servlet方法来了解servletContext的作用:
1)在webapp范围内进行数据的共享
主要是通过对Attribute的操作来实现数据的存储、传递等

方法 作用 setAttribute(String name, Object object) 以key-value的形式将数据存入context Object getAttribute(String name) 从Context中取出传入key对应的value Enumeration(String) getAttributeNames() 取context中所有设置的Attribute的name void removeAttribute(String name) 移除指定key对应的value

2)访问webapp的资源

方法 作用 String servletContext.getContextPath() 返回当前webapp的URL入口,如果不配置默认为空字符串 String getInitParameter(String name) 获取context中配置的初始化参数,即web.xml中context-param元素中配置的参数,这个元素中配置的参数是webapp范围内都有效的初始化参数 Enumeration(String) getInitParameterNames() 获取context中配置的所有初始化参数名称 RequestDispatcher getRequestDispatcher(String path) 返回一个用于向其他web组件转发请求的RequestDispatcher对象

3)获取Servelt容器相关信息

方法 作用 ServletContext getContext(String uripath) 根据参数指定的url,返回当前servlet容器中其他web应用的servletContext()对象

4)访问Servlet容器相关的信息

方法名 作用 getMajorVersion() 返回servlet容器支持的java servlet API 的主版本号 getMinorVersion() 返回servlet容器支持的java Servlet API的次版本号 getServerInfo() 返回servlet容器的名字和版本

5)访问服务器端的文件系统资源

方法名 作用 String getRealPath(String path) 根据参数指定的虚拟路径,返回文件系统中的一个真实的路径,以webapp所在目录为根路径 getResource(String path) 返回一个映射到参数指定的路径的url getResourceAsStream(String path) 返回一个用于读取参数指定的文件的输入流。(把文件读到输入流中去) getMimeType(String file) 返回参数指定的文件的MIME类型

获取ServeltContext对象的几种方法:
javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
javax.servlet.ServletRequest.getServletContext()

2.ServeltConfig详解
Servlet容器初始化一个Servlet类型的对象时,会为这个Servlet对象创建一个ServletConfig对象。在ServletConfig对象中包含了Servlet的初始化参数信息。此外,ServletConfig对象还与ServletContext对象关联。Servlet容器在调用Servlet对象的init(ServletConfig config)方法时,会把ServletConfig类型的对象当做参数传递给servlet对象。Init(ServletConfig config)方法会使得当前servlet对象与ServletConfig类型的对象建立关联关系。在Servlet内部提供了 getServletConfig()方法来获取关联的ServletConfig对象,下面看下这个对象具体的方法:

方法名 作用 ServletContext getServletContext() 获得与ServletConfig相关联的ServletContext对象 getServltName() 返回servlet的名字,即web.xml中的相对应的servlet的子元素servlet-name的值。如果没有配置这个子元素,则返回servlet类的全局限定名 getInitParameter(String name) 根据给定的初始化参数,返回匹配的初始化参数值,即web.xml中servelt元素下init-param所配置的参数 getInitParameterNames() 返回所有配置的初始化参数名称

下面的web.xml配置中展示了ServletContext初始化参数,以及Servlet初始化参数,并且展示了如何在代码中引用它们:

  <!--ServletContext的初始化参数,可以通过servletContext.getInitParameter()方法获取-->    <context-param>        <param-name>context-param</param-name>        <param-value>context-param</param-value>    </context-param>    <servlet>        <servlet-name>MyFirstServlet</servlet-name>        <servlet-class>com.meituan.lkl.MyFirstServlet</servlet-class>        <!--Servlet初始化参数,可以通过servletConfig.getInitParameter()方法获取-->        <init-param>            <param-name>servlet-param</param-name>            <param-value>servlet-value</param-value>        </init-param>    </servlet>    <servlet-mapping>        <servlet-name>MyFirstServlet</servlet-name>        <url-pattern>/*</url-pattern>    </servlet-mapping>
//重写了HttpServlet的doGet()方法    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        ServletContext servletContext = req.getServletContext();        System.out.println(servletContext.getInitParameter("context-param"));        //HttpServlet类继承了GenericServlet类,而GenericServlet类实现了ServletConfig接口,        // 因此在HttpServlet类和GenericServlet类及子类中都可以直接调用ServletConfig接口中的getServletConfig方法        ServletConfig config =getServletConfig();        System.out.println(config.getInitParameter("servlet-param"));    }
原创粉丝点击