您的位置:首页 > 编程语言 > Java开发

javaweb—ServletContext和ServletConfig

2016-07-24 23:07 375 查看
** 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>

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

publicclass
ServletContextDemo extends HttpServlet {
 
    protected
void
doGet(HttpServletRequest
request, HttpServletResponse response)
throws ServletException, IOException {
       ServletContext
context = this.getServletContext();
 
       /**
        * servlet中web.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息