struts2源码学习一 FilterDispatcher
来源:互联网 发布:ios系统编程语言 编辑:程序博客网 时间:2024/06/05 17:39
这个filter是struts中最重要的filter,主要完成以下四个功能:
1、处理action
2、清理ActionContext
3、处理静态资源
4、触发指定请求生命周期内的拦截器链
这个filter是武断性的,也就是说它通过ActonMapper来寻找特定的action,如果找到了,那么其他剩下的filter就不会再被引用,转而去处理action,这意味着其他过滤器需要放置到这个filter前面,否则将不会被引用到。
- public void setDevMode(String mode) {
- devMode = "true".equals(mode);
- }
public void setDevMode(String mode) { devMode = "true".equals(mode);}
这样的set方法还是值得我们借鉴的。
- public void init(FilterConfig filterConfig)throws ServletException {
- try {
- this.filterConfig = filterConfig;
- initLogging();
- dispatcher = createDispatcher(filterConfig);
- dispatcher.init();
- dispatcher.getContainer().inject(this);
- staticResourceLoader.setHostConfig(new FilterHostConfig(filterConfig));
- } finally {
- ActionContext.setContext(null);
- }
- }
public void init(FilterConfig filterConfig) throws ServletException { try { this.filterConfig = filterConfig; initLogging(); dispatcher = createDispatcher(filterConfig); dispatcher.init(); dispatcher.getContainer().inject(this); staticResourceLoader.setHostConfig(new FilterHostConfig(filterConfig)); } finally { ActionContext.setContext(null); } }
在初始化方法中,会初始化log,创建调度者,并对静态资源做一些处理。
初始化log
- private void initLogging() {
- //查看web.xml中filter的初始化参数中有无配置loggerFactory
- String factoryName = filterConfig.getInitParameter("loggerFactory");
- if (factoryName != null) {
- try {
- Class cls = ClassLoaderUtils.loadClass(factoryName, this.getClass());
- LoggerFactory fac = (LoggerFactory) cls.newInstance();
- LoggerFactory.setLoggerFactory(fac);
- } catch (InstantiationException e) {
- System.err.println("Unable to instantiate logger factory: " + factoryName +", using default");
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- System.err.println("Unable to access logger factory: " + factoryName +", using default");
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- System.err.println("Unable to locate logger factory class: " + factoryName +", using default");
- e.printStackTrace();
- }
- }
- log = LoggerFactory.getLogger(FilterDispatcher.class);
- }
private void initLogging() { //查看web.xml中filter的初始化参数中有无配置loggerFactory String factoryName = filterConfig.getInitParameter("loggerFactory"); if (factoryName != null) { try { Class cls = ClassLoaderUtils.loadClass(factoryName, this.getClass()); LoggerFactory fac = (LoggerFactory) cls.newInstance(); LoggerFactory.setLoggerFactory(fac); } catch (InstantiationException e) { System.err.println("Unable to instantiate logger factory: " + factoryName + ", using default"); e.printStackTrace(); } catch (IllegalAccessException e) { System.err.println("Unable to access logger factory: " + factoryName + ", using default"); e.printStackTrace(); } catch (ClassNotFoundException e) { System.err.println("Unable to locate logger factory class: " + factoryName + ", using default"); e.printStackTrace(); } } log = LoggerFactory.getLogger(FilterDispatcher.class); }
接下来,是初始化dispatcher的方法
- /**
- *加载配置文件,包括xml和一些默认的配置,
- *更新一些配置,包括是否重新加载一些配置或资源.
- */
- public void init() {
- //struts.xml是配置文件的入口
- if (configurationManager == null) {
- configurationManager = createConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME);
- }
- //初始化配置,添加到configurationManager#containerProviders List中
- try {
- //加载org/apache/struts2/default.properties struts常量
- init_DefaultProperties(); // [1]
- //web.xml中的config
- //若没有则加载struts-default.xml,struts-plugin.xml,struts.xml
- init_TraditionalXmlConfigurations(); // [2]
- init_LegacyStrutsProperties(); // [3]
- //用户自定义的ConfigurationProvider web.xml 中 configProviders
- init_CustomConfigurationProviders(); // [5]
- //web.xml中配置的init-param参数
- init_FilterInitParameters() ; // [6]
- //根据我们在struts.xml中配置的常量,初始化一些插件类
- //比如我们设置的devmode
- init_AliasStandardObjects() ; // [7]
- Container container = init_PreloadConfiguration();
- container.inject(this);
- init_CheckConfigurationReloading(container);
- init_CheckWebLogicWorkaround(container);
- if (!dispatcherListeners.isEmpty()) {
- for (DispatcherListener l : dispatcherListeners) {
- l.dispatcherInitialized(this);
- }
- }
- } catch (Exception ex) {
- if (LOG.isErrorEnabled())
- LOG.error("Dispatcher initialization failed", ex);
- throw new StrutsException(ex);
- }
- }
/** *加载配置文件,包括xml和一些默认的配置, *更新一些配置,包括是否重新加载一些配置或资源. */ public void init() { //struts.xml是配置文件的入口 if (configurationManager == null) { configurationManager = createConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME); } //初始化配置,添加到configurationManager#containerProviders List中 try { //加载org/apache/struts2/default.properties struts常量 init_DefaultProperties(); // [1] //web.xml中的config //若没有则加载struts-default.xml,struts-plugin.xml,struts.xml init_TraditionalXmlConfigurations(); // [2] init_LegacyStrutsProperties(); // [3] //用户自定义的ConfigurationProvider web.xml 中 configProviders init_CustomConfigurationProviders(); // [5] //web.xml中配置的init-param参数 init_FilterInitParameters() ; // [6] //根据我们在struts.xml中配置的常量,初始化一些插件类 //比如我们设置的devmode init_AliasStandardObjects() ; // [7] Container container = init_PreloadConfiguration(); container.inject(this); init_CheckConfigurationReloading(container); init_CheckWebLogicWorkaround(container); if (!dispatcherListeners.isEmpty()) { for (DispatcherListener l : dispatcherListeners) { l.dispatcherInitialized(this); } } } catch (Exception ex) { if (LOG.isErrorEnabled()) LOG.error("Dispatcher initialization failed", ex); throw new StrutsException(ex); } }
Container container = init_PreloadConfiguration
- struts2源码学习一 FilterDispatcher
- struts2学习笔记---FilterDispatcher
- struts2 源码阅读笔记 - FilterDispatcher
- struts2 FilterDispatcher
- FilterDispatcher源码
- Struts2 源码学习 一 StrutsPrepareAndExecuteFilter
- MyEclipse学习:java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher
- Struts2的过滤器FilterDispatcher
- STRUTS2核心控制器:FilterDispatcher
- struts2--FilterDispatcher替换
- struts2 FilterDispatcher 和 StrutsPrepareAndExecuteFilter
- Struts2 FilterDispatcher核心控制器
- struts2 FilterDispatcher StrutsPrepareAndExecuteFilter
- STRUTS2核心控制器:FilterDispatcher
- Struts2 FilterDispatcher的作用
- Struts2 核心控制器(FilterDispatcher)
- STRUTS2核心控制器:FilterDispatcher
- STRUTS2核心控制器:FilterDispatcher
- Java定时任务的实现
- Python,持续增长日渐流行的语言
- cmd-maven-打包
- 关于N的阶乘(n!)的java算法实现
- Firefox为啥不使用WebKit内核?
- struts2源码学习一 FilterDispatcher
- java 异常机制总结
- 思维正能量创造价值
- Response.Write后页面CSS部分失效的问题
- mysql查询语句
- 和我一起学 Selenium WebDriver(1)——入门篇
- Chrome:速度是第一要务
- Java读写操作
- Box2D v2.1.0用户手册翻译 - 目录,第01章 导言(Introduction)