JavaWeb ServletContext/application初试总结

简介:ServletContext/application

为什么将其两者放在一起介绍呢,因为他们可以被看做是同一个类,只是名字起得不同而已。
ServletContext是在Servlet中使用,而application则作为内置对象用于jsp中。
他们的作用域是整个tomcat的从启动到关闭的过程
我们可以将其看做是JavaWeb应用里的全局变量。

功能

所谓功能,也就是说,我们在什么时候会用到它们。
当你的服务端需要一些配置属性供所有客户端来进行访问,用ServletContext/application就正好。
比如:页面的访问次数,当前在线人数,等等信息。

使用

application

已经说过,application是jsp的内置对象,使用起来很方便。如下,很简单,不再赘述。

<% application.setAttribute("num", 10); %>
<% int num = (int)application.getAttribute("num"); %>

ServletContext

我们主要来说一下ServletContext的使用,既然要供所有客户端访问,那么肯定要进行初始化,这里主要有两种方式

1:通过监听器(listener)来初始化

第一步:用一个类实现ServletContextListener接口提供的两个方法
contextInitialized:在tomcat启动的时候会调用
contextDestroyed:在tomcat关闭的时候会调用
如下

public class ContextLoaderListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        servletContext.setAttribute("num", 10);
        System.out.println("begin:" + servletContext.getAttribute("num"));
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        System.out.println("end:" + servletContext.getAttribute("num"));
    }
}
第二步,在web.xml里面配置监听器,如下
<listener>
    <listener-class>com.web.listener.ContextLoaderListener</listener-class>
</listener>

2:自定义Servlet并设置Servlet的load-on-startup=1

第一步,自定义Servlet类,重写init()和destroy(),如下
public class ContextLoaderServlet implements Servlet {

    private ServletConfig config;

    @Override
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        ServletContext servletContext = config.getServletContext();
        servletContext.setAttribute("num", 10);
        System.out.println("begin:" + servletContext.getAttribute("num"));
    }

    @Override
    public void destroy() {
        ServletContext servletContext = config.getServletContext();
        System.out.println("end:" + servletContext.getAttribute("num"));
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }
}
第二步,配置servlet为自启动,将如下配置添入web.xml
<servlet>
        <servlet-name>ContextLoaderServlet</servlet-name>
        <servlet-class>com.web.ContextLoaderServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>ContextLoaderServlet</servlet-name>
        <url-pattern>/ContextLoaderServlet</url-pattern>
    </servlet-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值