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

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中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值