Servlet总结(2)--ServletConfig和ServletContext对象

来源:互联网 发布:python经典书籍推荐 编辑:程序博客网 时间:2024/05/22 15:00

1、ServletConfig对象
在web.xml中,可以配置一些servlet启动时的初始化参数,当servlet启动时,这些参数就被封装在ServletConfig对象当中。

<servlet>    <description>This is the description of my J2EE component</description>    <display-name>This is the display name of my J2EE component</display-name>    <servlet-name>ServletDemo01</servlet-name>    <servlet-class>day1129.servlet01.ServletDemo01</servlet-class>    <!-- 配置初始化 -->    <init-param>        <param-name>name</param-name>        <param-value>Errol</param-value>            </init-param>    <init-param>        <param-name>password</param-name>        <param-value>123</param-value>          </init-param>    <init-param>        <param-name>charset</param-name>        <param-value>UFT-8</param-value>            </init-param>  </servlet>

Servlet类的init方法:

public void init(ServletConfig config) throws ServletException {        // Put your code here        this.config = config;//获取初始化参数      }

在Servlet启动时调用init()方法,就会将web.xml配置的初始化参数自动加载到ServletConfig对象当中。
ServletConfig对象通过Servlet对象的getServletConfig()方法获取。
如果我们需要将初始化参数获取出来,就需要用到Enumeration,对config进行遍历。

public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        sop("doGet:"+i++);        response.setContentType("text/html");        PrintWriter out = response.getWriter();         /*         * 获取初始化参数         */        String paramUser = this.config.getInitParameter("name");        out.print(paramUser);         out.print("<hr>");        //获取所有初始化参数        Enumeration<String> e = config.getInitParameterNames();        while(e.hasMoreElements()){            String name = e.nextElement();            String value = config.getInitParameter(name);            out.print(name + "=" + value+ "<br>");        }        out.print("<hr>");        out.close();    }

这样,在浏览器上访问这个servlet就可以在页面上输出获取到的初始化参数

2、ServletContext对象,上下文对象
代表当前web应用,web容器在启动是的时候,会对每一个web应用创建一个ServletContext对象,我们需要通过ServletConfig对象来获取ServletContext对象:

ServletContext context = this.getServletConfig().getServletContext();

总结,ServletContext对象的获取
1.在javax.servlet.Filter中直接获取

ServletContext context = config.getServletContext();

2.在HttpServlet中直接获取

this.getServletContext()

3.在其他方法中,通过HttpRequest获得

request.getSession().getServletContext();

ServletContext对象的作用是什么??
1)通过相对路径获取绝对路径
通过ServletContext对象可以获取绝对路径

//获取文件的路径String filePath = this.getServletContext().getRealPath("中文文件.txt");

2)可以获取容器的附加信息
如web应用初始化参数(看清楚,是web应用的初始化参数,ServletConfig可以获取的是Servlet的初始化参数,虽然都存放在web.xml文件中,但是标签不一样),例子
web.xml文件配置

<!-- Web应用的初始化 -->    <context-param>        <param-name>servlet01</param-name>        <param-value>这里是Servlet01请求</param-value>    </context-param>    <context-param>        <param-name>servlet02</param-name>        <param-value>这里是Servlet02请求</param-value>    </context-param>

Servlet类中可以context初始化参数

//获取web应用的初始化参数ServletContext context = this.getServletContext();String contextInitParam = context.getInitParameter("servlet02");

3、多个Servlet通过ServletContext对象实现数据共享
也就是可以将变量设置为全局变量,这里的全局指的是所有的Servlet
例如:
Servlet1

//Context对象可是实现servlet之间的数据共享String data = "sdofhgaouifhgaoifhidshfiouahef"; ServletContext context = this.getServletConfig().getServletContext();context.setAttribute("DATA", data)

Servlet2

//这里通过context对象可以获共享数据ServletContext context = this.getServletConfig().getServletContext();String data = (String)context.getAttribute("DATA");//获取共享数据out.print("共享数据="+data+ "<hr>");

这里可以发现,在Servlet1中将变量data放到ServletContext对象,在Servlet2中通过ServletContext对象也能得到该变量,所以,ServletContext对象是全局的储存信息的空间,服务器开始, 其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一 个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。

1 0
原创粉丝点击