SpringMVC监听器
WebAppRootListener
-
WebAppRootListener的作用就是监听web.xml中的配置<context-param> 下<param-name>webAppRootKey</param-name>的值
- 有如下的使用场景:
- web项目上传下载时,获取项目根路径常用的方式是:1、Servlet的request.getRealPath(“/”);2、request.getServletContext().getRealPath("/");3、struts2的ServletActionContext获取
- 上面方式的弊端是在页面没有向后台请求,而是在例如定时器定等地方时则无法获取,而SpringMVC的WebAppRootListener则可以完美解决它
项目开发
一:在web项目的web.xml中写入如下配置
- 值得注意的是<param-name>的webAppRootKey必须写死
二:在项目任何地方取值
- System.getProperty("xxx")获取的值,和使用平时的request.getRealPath("/")是一样的
运行流程
- WebAppRootListener监听器会在web上下文初始化的时候,利用servletContext得到物理路径,String path=servletContext.getRealPath("/");
- 然后找到context-param的webAooRootKey对应的param-value,把param-value的值作为key, 接着执行System.setProperty(<param-value>的值,path)
- 这样在整个web中就可以使用System.getProperty(<param-value>的值)来获取服务器的绝对路径
补充说明
- 如果只配置了监听器,没有配置webAppRootKey, 默认wenAppRootKey对应的param-value的值为webapp.root
- 上面得到系统路径是SpringMVC的做法,其实我们自己也可以写一个监听器,然后得到物理路径后手动放入System中,之后同样可以取
/** * Created by Administrator on 2018/4/20 0020. * 应用启动、关闭监听器 */ public class AppListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { /** 照样可以获取到值,然后便可以放入到System中了 */ String realPath = servletContextEvent.getServletContext().getRealPath(""); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { } }
ContextLoaderListener
一:使用SpringMVC时,都会用到它的核心功能IOC与DI
二:Spring Web中,IOC容器初始化,就会存放我们注入的各种对象,然后供我们以后取用
三:使用方式非常简单,同样只需要在web.xml中配置即可,目的就是用于初始化Spring核心配置文件
四:那么beans.xml中SpringMVC容器初始化好的实例,以及整个配置文件是如何被找到,或者何时被运行的呢?就是因为在web.xml中配置了ContextLoaderListener监听器
五:ContextLoaderListener监听器其实就是类似平时我们自己写的监听器,它同样是实现了Servlet的ServletContextListener监听器接口,然后在初始化方法进行初始化操作而已