Servlet中的ServletContext和ServletConfig详解

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"));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值