Spring——窃听器ContextLoaderListener意义转载
原创在启动Web 容器时, 自动装配 Spring applicationContext.xml 的配置信息。
因为它实现了 ServletContextListener 此接口,在web.xml 配置这个 监听器 当容器启动时,默认情况下执行它实现的方法。在里面ContextLoaderListener 中 关联了ContextLoader 此类,因此执行整个加载配置过程ContextLoader 来完成
spring在web配置文件下的条目web.xml在听众中
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:conf/spring/applicationContext.xml
上述是在web.xml中的配置信息。
接口已实现ServletContextListener,换句话说,它必须得到实施。contextDestroyed, contextInitialized这两种方法
public class ContextLoaderListener implements ServletContextListener {
private ContextLoader contextLoader;
/**
* Initialize the root web application context.
*/
//Spring框架已激活。, contextInitialized即监听器类main入口函数
public void contextInitialized(ServletContextEvent event) {
this.contextLoader = createContextLoader();
this.contextLoader.initWebApplicationContext(event.getServletContext());
}
/**
* Create the ContextLoader to use. Can be overridden in subclasses.
* @return the new ContextLoader
*/
protected ContextLoader createContextLoader() {
return new ContextLoader();
}
/**
* Return the ContextLoader used by this listener.
* @return the current ContextLoader
*/
public ContextLoader getContextLoader() {
return this.contextLoader;
}
/**
* Close the root web application context.
*/
public void contextDestroyed(ServletContextEvent event) {
if (this.contextLoader != null) {
this.contextLoader.closeWebApplicationContext(event.getServletContext());
}
}
}
总的来说,入口很简单。,所有实现都隐藏在 ContextLoader 类里。
ServletContextListener作用
ServletContext 被 Servlet 用于沟通的程序 Web 集装箱通信。例如,写日志和转发请求。每个 Web 应用程序包含Context,被Web应用程序中的各个程序是共享的。因为Context可以用于节省资源和共享,所以我知道 ServletContext 最大的应用是Web缓存—-将不常更改的内容读入内存,因此 服务器 响应请求时不需要慢速磁盘I/O了。
ServletContextListener 是 ServletContext 听众,如果 ServletContext 更改,例如服务器启动时 ServletContext 在服务器关闭时创建 ServletContext 将被摧毁。
在JSP文件中,application 是 ServletContext 的实例,JSP默认情况下会创建容器。Servlet 中调用 getServletContext()方法得到 ServletContext 的实例。
-
使用缓存的想法可能是:
- 当服务器启动时,ServletContextListener 的 contextInitialized()方法,因此在其中创建了一个良好的缓存 ervletContext.setAttribute()方法将缓存类保存在 ServletContext 在实例中。
- 程序使用 ServletContext.getAttribute()读取缓存。如果是的话 JSP,使用a pplication.getAttribute()。如果是 Servlet,使用 getServletContext().getAttribute()。如果缓存更改(例如访问计数)您可以更改缓存和文件/数据库。或者你等着 累积到某个程序并保存的更改也可以在下一步保存。
- 当服务器即将关闭时,ServletContextListener 的 contextDestroyed()方法,因此缓存的更改保存在内部。将更改的缓存保存回文件或数据库以更新原始内容。
import User; //my own
classimport DatabaseManager; // my own class
import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
public class MyContextListener implements ServletContextListener {
private ServletContext context = null;
public void contextInitialized(ServletContextEvent event) {
context = event.getServletContext();
User user = DatabaseManager.getUserById(1);
context.setAttribute("user1", user);
}
public void contextDestroyed(ServletContextEvent event) {
User user = (User)context.getAttribute("user1");
DatabaseManager.updateUserData(user);
this.context = null;
}
} -
布署 ServletContextListener
你实现(implements)了 ServletContextListener 编译后,将其放入正确的WEB-INF/classes目录,更改WEB-INF目录下的 web.xml文件,在web-app加载项节点
MyServletContextListener
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123





