简介: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>