JavaWeb之Servlet: ServletConfig 与 ServletContext

ServletConfig对象

 

什么是ServletConfig对象

  ServletConfig对象,Servlet配置对象。主要用于加载配置文件的初始化参数。java

 

建立时机

  ServletConfig对象在servlet对象建立以后,调用init方法以前建立,该Config对象随着init方法传入到servlet中。web

 

经常使用方法

    java.lang.String getInitParameter(java.lang.String name)  根据名称获取参数值tomcat

    java.util.Enumeration getInitParameterNames()         获得全部参数服务器

    ServletContext getServletContext()                   获取servlet上下文对象app

    ava.lang.String getServletName()                    获得servlet名称工具

 

问题:SevletConfig中的初始化参数不能被其余Servlet共享!!this

 

下面来演示一下这些方法的使用:spa

咱们先在servlet的配置文件web.xml配置servlet的初始化参数,而后运用上面的方法获得这些数据! code

配置文件:  视频

 <servlet>
            <servlet-name>testpath</servlet-name>
            <servlet-class>com.vmaxtam.dotest.testpath</servlet-class>
      <init-param>                --这个标签写在要设置的servlet内
               <param-name>color</param-name>  -属性名
             <param-value>red</param-value>    -属性值
      </init-param>
  </servlet>    

下面咱们就在相应的servlet内获得配置好的数据吧!

ServletConfig servletConfig = getServletConfig();
String color = servletConfig.getInitParameter("color");

这样就能获得配置好的数据了!还有更简单的方法:

先说明一下:首先HttpServlet继承自GenericServlet类,而GenericServlet类又继承自Servlet接口,Servlet接口有方法getServletConfig() ,因此HttpServlet确定有方法getServletConfig()。而GenericServlet类又实现了ServletConfig 接口,也就是他确定实现了ServletConfig接口中的全部方法,因此以上代码咱们还能够这样写:

String color = getInitParameter("color");

其它方法也差很少,这里不作示范~~~

 

ServletContext对象

什么是ServletContext对象

咱们知道一个Web应用里面能够有多个servlet,若是如今有一份数据须要传给全部的servlet使用,那么咱们就可使用ServletContext对象了。

ServletContext对象叫servlet上下文对象。该对象在一个web应用中只会建立一个对象,表明当前web应用的环境。在当前的web应用中全部servlet都共享一个ServletContext对象

ServletContext对象建立的时机

由ServletContext对象的特性咱们能够推断出它被建立的时机:每当一个web应用被加载,那么一个ServletContext对象就被建立了,而后web应用里的servlet就能够同使用它了!

那么,咱们如何在servlet里获得这个已经建立的对象呢?

获得ServletContext对象

开发者十分巧妙的将ServletContext对象放入在了该web应用里的每个servlet中的ServletConfig对象里!

在一个servlet被建立时,会调用它的构造方法,随后就会调用init()方法对它初始化,而在初始化的过程当中,就把ServletContext对象放入到ServletConfig对象中了!那么这个servlet获得ServletContext对象对象就十分方便了,只须要用一句代码!

ServletContext servletContext = this.getServletContext();

 

ServletContext对象的经常使用方法

获得了ServletContext对象,咱们就要想:这个对象有什么用呢!?如下介绍一下它的经常使用的方法。

主要有五种用法:

一)获得web应用的上下文路径

    java.lang.String getContextPath()     

 

二)获取web应用的全局参数 :         

     java.lang.String getInitParameter(java.lang.String name)  

    java.util.Enumeration getInitParameterNames()  

 

三)域对象相关的方法:

    java.lang.Object getAttribute(java.lang.String name)     

    void setAttribute(java.lang.String name, java.lang.Object object)

    void removeAttribute(java.lang.String name)

 

四)用于转发:

    RequestDispatcher getRequestDispatcher(java.lang.String path)  

 

五)web应用加载资源文件方法

    java.lang.String getRealPath(java.lang.String path)   

    java.io.InputStream getResourceAsStream(java.lang.String path)

 

下面示范一下使用这些方法:

 

一)获得web应用的上下文路径

经过request来调用该方法

String path = request.getContextPath();
System.out.println(path);

输出结果:

/TestArea

web应用的路径 是 tomcat服务器中web应用的名称,而不是ecplise中的项目名称。

request.getContextPath();  为了方便获取上下文路径。推荐使用该方法。

 

 

二)获取web应用的全局参数

 

先在web应用对应的web.xml中设置全局参数:  全局参数的标签写咋<web-app>标签内

<web-app version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

        <!-- 全局参数 -->
    <context-param>
        <param-name>AAA</param-name>
        <param-value>AAA's value</param-value>
    </context-param>
    <context-param>
        <param-name>BBB</param-name>
        <param-value>BBB's value</param-value>
    </context-param>

而后在servlet内获得这个参数:

//1.获得ServletContext对象
        ServletContext context = this.getServletContext();
        
        //2.获取全局参数
        System.out.println(context.getInitParameter("AAA"));
        
        Enumeration<String> enums = context.getInitParameterNames();
        while(enums.hasMoreElements()){
            String paramName = enums.nextElement();
            String paramValue = context.getInitParameter(paramName);
            System.out.println(paramName+"="+paramValue);
        }

注意: 全部的servlet均可以获取全局参数!!!

 

 

三)域对象相关的方法

 什么是域对象?

    域对象:保存数据 和 获取数据,用于在不一样资源之间共享数据。

那么咱们如今尝试把第一个servlet的数据传到 另外一个servlet里吧!

 

方法一:利用跳转,从servlet1跳转到servlet2时,把数据写在跳转uri里

response.sendRedirect("/servlet2?id=867");

 

方法二:利用域对象方法

    setAttribute(name,Object):  保存数据方法.name名称,object数据

    getAttribute(name)  获取数据。name是保存数据时的名称

    removeAtrributename): 清除数据。

servlet1写上:

 

ServletContext context = this.getServletContext();
context.setAttribute("id", 123);

 

而后servlet2得到它吧!

ServletContext context = this.getServletContext();
String id = context.getAttribute("id");

   

四)用于转发

RequestDispatcher getRequestDispatcher(java.lang.String path)  

 

servlet中跳转资源:重定向  /  转发

 

重定向:

    1)地址栏会发送改变,变成重定向到的地址

    2)重定向能够跳转到web应该内,其余web应用,甚至站外的应用。

    3)调用者和被调用者处于两次不一样的请求。不能经过request域对象来共享数据。

 

转发:

    1)地址栏不会发送改变。

    2)转发不能转发到应用外的资源,不能转发到站外资源;只能转发到当前web应用下的资源。

    3)调用者和被调用者处于同一次请求,能够经过request域对象共享数据。

 

资源: 

    1)内部资源:web应用内的资源   

    2)应用外的资源: 其余web应用下的资源 

    3)其余站点的资源   

 

 

web应用加载资源文件方法

先了解一下web应用运行时的目录:

 

     相对路径是指java命令的运行目录。

 

     java项目:ecplise工具把java命令运行的目录设置到web应用的根目录。

 

     web项目: java命令运行的目录在tomcat/bin目录下。

 有时候咱们须要web应用加载一些图片,音乐,视频等,就须要得到他们的路径而后使用,能够用如下方法得到:

 

    java.lang.String getRealPath(java.lang.String path)   --获得资源的绝对路径

 

    java.io.InputStream getResourceAsStream(java.lang.String path)--获得资源的的一个输入流

相关文章
相关标签/搜索