javaweb—ServletContext和ServletConfig

** ServletConfig对象

ServletConfig对象主要是在Servlet初始化时加载Servlet的初始化参数,并封装到ServletConfig对象。

使用示例:

>> 先在web.xml中配置<init-param>对象,这个对象必须要在其中在配置它的<param-name><param-value>两个属性。

  <servlet>

    <servlet-name>ServletConfigDemo</servlet-name>

    <servlet-class>com.ibatis01.servlet.ServletConfigDemo</servlet-class>

    <init-param>

      <param-name>path</param-name>

      <param-value>C:\Users\WXH\Pictures\background\001.jpg</param-value>

    </init-param>

    <init-param>

      <param-name>Fine</param-name>

      <param-value>FE#@NF(*VMM#@(LK)dsf)</param-value>

    </init-param>

  </servlet>

  <servlet-mapping>

    <servlet-name>ServletConfigDemo</servlet-name>

    <url-pattern>/ServletConfig</url-pattern>

  </servlet-mapping>

>> 然后创建一个Servlet,并获取ServletConfig对象

         说明:当Servlet配置了初始化参数后,web容器在创建Servlet对象时会自动的把配置的这些参数封装到ServletConfig对象,并在初始化init(ServletConfig config)方法时,将Config对象传递给Servlet对象。在Servlet中有一个getServletConfig()方法获取ServletCongfig()对象。

package com.ibatis01.servlet;

 

import java.io.IOException;

import java.util.Enumeration;

 

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class ServletConfigDemo extends HttpServlet {

 

         /**

          * 1.tomcat服务器把这些参数在加载web应用的时候,封装到servletConfig对象中

          * 2.tomcat服务器再调用init方法传入servletConfig对象

         */

        

         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

                   // 获取ServletConfig对象

                   ServletConfig config=this.getServletConfig();

                  

                   // 获取初始化属性的值

                   // String path=config.getInitParameter("path");

                   // response.getWriter().append("path:"+path+"<br/>");

                  

                   Enumeration<String> names =config.getInitParameterNames();

                   while (names.hasMoreElements()) {

                            String name = (String) names.nextElement();

                            String value=this.getServletConfig().getInitParameter(name);

                            response.getWriter().append(name+": "+value+"<br/>");

                   }

         }

}

还有一个是获取当前的Servlet的名称:this.getServletConfig().getServletName(); // 获取当前的Servlet的名称。

ServletConfig对象的四个函数

String getInitParameter(String name)

根据参数名获取参数值[web.xml中配置的初始化参数]

Enumeration getInitParameterNames()

获取初始化参数的所有名字[可以用Enumeration输出所有的value]

ServletContext getServletContext()

得到ServletContext对象[可以不用这个方法,因为在Servlet中也有一个相同的方法]

String getServletName()

得到Servlet的名称

 

** ServletContextServlet上下文对象

Web容器在在启动的时候会为每一个web程序创建一个ServletContext对象,代表当前的web程序。所以可以知道ServletContext对象是一个唯一的且全局的对象。因此,所有的servlet都可以共享一个ServletContext对象。

>> 获取ServletContext对象

         方式一:this.getServletConfig().getServletContext()

         方式二:this.getServletContext()

         两种方式效果一样的,因为如下:

    public ServletContext getServletContext() {

    return getServletConfig().getServletContext();

    }// 在servlet内部还是会用方式一的

         个人推荐使用方式二,因为简单一点。

>> 获取web.xml中配置的初始化参数

web.xml配置如下

<context-param>

    <param-name>AAA</param-name>

    <param-value>FNDSENISNEFSFN</param-value>

  </context-param>

  <context-param>

    <param-name>BBB</param-name>

    <param-value>FDFSFESEFWEQFWEF</param-value>

  </context-param>

  <context-param>

    <param-name>CCC</param-name>

    <param-value>VEWFEWFWEFXWEDF</param-value>

  </context-param>

利用contextgetInitParameter方法获取属性的value,当然也可先获取name集合,遍历出所有的value[getParameterNames()获取所有的名字]

publicclass ServletContextDemo extends HttpServlet {

 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       ServletContext context = this.getServletContext();

 

       /**

        * servletweb.xml配置的参数只有在当前的servlet中获取

        * 而全局的参数在所有的servlet中都能获取

       */

      

       // 打印所有的全局初始化参数

       response.getWriter().append("print global initialize parameters:<br/>");

       Enumeration<String> names=context.getInitParameterNames();

       while (names.hasMoreElements()) {

           String name = (String) names.nextElement();

           String value=context.getInitParameter(name);

           response.getWriter().append(name+": "+value+"<br/>");

       }

    }

}

ServletContext对象常用的方法

String getContextPath()

获取web程序的路径[其实就是tomcat上部署的应用名称而已]

String getInitParameter(String name)

得到web应用的初始化参数值

Enumeration getInitParameterNames()

得到web应用初始化参数数名称

void setAttribute(String name, Object)

设置一个对象在context域对象中

Object getAttribute(String name)

获得一个在context域对象中的值

void removeAttribute(String name)

删除域对象中相应的对象

RequestDispatcher getRequestDispatcher(String path)

请求转发

InputStream getResourceAsStream(String path)

查找具有给定名称的资源

 

       ServletContext context = this.getServletContext();

       // getContextPath得到web应用程序的路径:部署到tomca服务器上运行的web应用名称

       String webPath=context.getContextPath();

       response.getWriter().append("Web Application Name:"+webPath+"<br/>");

 

       // 利用getContextPath重定向

       //response.sendRedirect(webPath+"/index.jsp");

 

** ServletContext域对象

         域对象可以保存数据,获取数据。可以在作用域内共享同一份数据。

>> 保存数据到域对象中

publicclass ServletFrom extends HttpServlet {

    /**

     * ServletContext域对象

     * 域对象可以完成数据共享

    */

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       String data="I am a boy";

       // 获取servletcontext对象

       ServletContext context=this.getServletContext();

       /**

        *  保存数据到servletcontext域对象中

        * setAttribute(key,value)

        * */

       context.setAttribute("data", data);

    }

}

>> 获取域对象中的数据

publicclass ServletEnd extends HttpServlet {

 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       ServletContext context=this.getServletContext();

       // 获取servletcontext域对象中的数据

       String data=(String)context.getAttribute("data");

      

       response.getWriter().append(data);

      

       // 删除域对象中数据

       // context.removeAttribute("data");   

    }

}

当然还可以删除域对象。

 

** 转发和重定向区别

#1.转发

          *     a) 地址栏不会改变

          *   b) 转发只能转发到当前web程序内的资源

          *   c) 在转发时,可以吧数据放在request域对象中,进行数据的传递

#2.重定向

          *   a) 地址栏会改变,变成重定向的地址栏

          *   b) 重定向可以跳转到任何一个资源[wen内部外部都可以]

          *   c) 在重定向中不能把数据保存到request域中

publicclass Forword extends HttpServlet {

   

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       // 转发

       RequestDispatcher dispatcher=this.getServletContext().getRequestDispatcher("/ServletFrom");

       dispatcher.forward(request, response);

       // 重定向

    response.sendRedirect(this.getServletContext().getContextPath()+"/ServletFrom");

    }

}

具体的区别这篇博文写的很具体:

http://www.cnblogs.com/phpzxh/archive/2010/02/01/1661137.html

猜你喜欢

转载自blog.csdn.net/u013468915/article/details/52017111