- 浏览: 386776 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
793059909:
scala> def count(x:Double,n: ...
快学Scala习题解答—第二章 控制结构和函数 -
793059909:
scala> def countdown(n:Int){ ...
快学Scala习题解答—第二章 控制结构和函数 -
daquan198163:
可是奇慢无比啊,切换个页签得等一分钟啊!!!!!!!!
误会ZK Studio了!Sorry,Sorry! -
rmn190:
受教了, 今天我第一天遇到这个问题, 以前没想到fmt标签还跟 ...
JSP中的国际化(转) -
suu:
都是栈里的拷贝 这句话让我从一头雾水到豁然开朗 谢谢了.
争论话题:Java传值还是传引用?
看struts2一周,就搞定了一个程序,郁闷。还有源码里的一个注入问题,一直得不到解决。
http://www.iteye.com/problems/2568
网上问了好久也没有满意的答案。。。。还是靠自己吧,自己研究。
首先,web.xml文件里的这一段肯定是个关键。
那么就从这里入手。
filter应该和servlet差不多,在struts2里面,当有请求发生时,就会匹配<url-pattern>/*</url-pattern>,如果匹配,则根据<filter-name>struts2</filter-name>找到<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>。
那么就到FilterDispatcher里看看。
Filter执行顺序是,init(),doFilter(),destroy()。先看init()
this.filterConfig = filterConfig;
dispatcher = createDispatcher(filterConfig);
dispatcher.init();
这一段,是对struts2需要的资源的一个初始化。进到Dispatcher里面的init方法里,可以看到init了很多东西。
这里很好理解。
Container container = init_PreloadConfiguration();
引起了我的注意,注入需要ioc容器,这个container是不是就是我要找的那个容器呢?而且它存在的包名叫com.opensymphony.xwork2.inject,可能行更大了。不过这玩样是webwork里的东东,那就下webwork的源码吧。
下载地址:http://www.opensymphony.com/
看官网上这句话
XWork is an command-pattern framework that is used to power Struts 2 as well as other applications. XWork provides an Inversion of Control container, a powerful expression language, data type conversion, validation, and pluggable configuration.
呵呵,八九不离十了。
init_PreloadConfiguration();
从名字可以看出,这个init方法是加载需要提前加载的配置。
到里面看看代码
1,2两句就是获得container的,里面有什么东西,再往里看。看configurationManager.getConfiguration();
这里的getConfigurationProviders()取到的providers就是前面1-7init里面所加的provider.
configuration.reload(getConfigurationProviders());再往里看。
container.inject(configurationProvider);这一句不看代码也明了了。注入贝。
那么struts2里面的注入的大体流程应该就是这样的了(我的理解,不对的请拍砖。。。)
后面的细节再慢慢研究。^-^
http://www.iteye.com/problems/2568
网上问了好久也没有满意的答案。。。。还是靠自己吧,自己研究。
首先,web.xml文件里的这一段肯定是个关键。
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
那么就从这里入手。
filter应该和servlet差不多,在struts2里面,当有请求发生时,就会匹配<url-pattern>/*</url-pattern>,如果匹配,则根据<filter-name>struts2</filter-name>找到<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>。
那么就到FilterDispatcher里看看。
Filter执行顺序是,init(),doFilter(),destroy()。先看init()
public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; dispatcher = createDispatcher(filterConfig); dispatcher.init(); String param = filterConfig.getInitParameter("packages"); String packages = "org.apache.struts2.static template org.apache.struts2.interceptor.debugging"; if (param != null) { packages = param + " " + packages; } this.pathPrefixes = parse(packages); }
this.filterConfig = filterConfig;
dispatcher = createDispatcher(filterConfig);
dispatcher.init();
这一段,是对struts2需要的资源的一个初始化。进到Dispatcher里面的init方法里,可以看到init了很多东西。
public void init() { if (configurationManager == null) { configurationManager = new ConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME); } init_DefaultProperties(); // [1] init_TraditionalXmlConfigurations(); // [2] init_LegacyStrutsProperties(); // [3] init_ZeroConfiguration(); // [4] init_CustomConfigurationProviders(); // [5] init_MethodConfigurationProvider(); init_FilterInitParameters() ; // [6] init_AliasStandardObjects() ; // [7] Container container = init_PreloadConfiguration(); init_CheckConfigurationReloading(container); init_CheckWebLogicWorkaround(container); }
这里很好理解。
Container container = init_PreloadConfiguration();
引起了我的注意,注入需要ioc容器,这个container是不是就是我要找的那个容器呢?而且它存在的包名叫com.opensymphony.xwork2.inject,可能行更大了。不过这玩样是webwork里的东东,那就下webwork的源码吧。
下载地址:http://www.opensymphony.com/
看官网上这句话
XWork is an command-pattern framework that is used to power Struts 2 as well as other applications. XWork provides an Inversion of Control container, a powerful expression language, data type conversion, validation, and pluggable configuration.
呵呵,八九不离十了。
init_PreloadConfiguration();
从名字可以看出,这个init方法是加载需要提前加载的配置。
到里面看看代码
private Container init_PreloadConfiguration() { Configuration config = configurationManager.getConfiguration(); Container container = config.getContainer(); boolean reloadi18n = Boolean.valueOf(container.getInstance(String.class, StrutsConstants.STRUTS_I18N_RELOAD)); LocalizedTextUtil.setReloadBundles(reloadi18n); ObjectTypeDeterminer objectTypeDeterminer = container.getInstance(ObjectTypeDeterminer.class); ObjectTypeDeterminerFactory.setInstance(objectTypeDeterminer); return container; }
1,2两句就是获得container的,里面有什么东西,再往里看。看configurationManager.getConfiguration();
public synchronized Configuration getConfiguration() { if (configuration == null) { setConfiguration(new DefaultConfiguration(defaultFrameworkBeanName)); try { configuration.reload(getConfigurationProviders()); } catch (ConfigurationException e) { setConfiguration(null); throw e; } } else { conditionalReload(); } return configuration; }
这里的getConfigurationProviders()取到的providers就是前面1-7init里面所加的provider.
configuration.reload(getConfigurationProviders());再往里看。
public synchronized void reload(List<ConfigurationProvider> providers) throws ConfigurationException { packageContexts.clear(); loadedFileNames.clear(); ContainerProperties props = new ContainerProperties(); ContainerBuilder builder = new ContainerBuilder(); for (ConfigurationProvider configurationProvider : providers) { configurationProvider.init(this); configurationProvider.register(builder, props); } props.setConstants(builder); builder.factory(Configuration.class, new Factory<Configuration>() { public Configuration create(Context context) throws Exception { return DefaultConfiguration.this; } }); try { // Set the object factory for the purposes of factory creation ObjectFactory.setObjectFactory(new ObjectFactory()); container = builder.create(false); objectFactory = container.getInstance(ObjectFactory.class); ObjectFactory.setObjectFactory(objectFactory); for (ConfigurationProvider configurationProvider : providers) { container.inject(configurationProvider); configurationProvider.loadPackages(); } rebuildRuntimeConfiguration(); } finally { ObjectFactory.setObjectFactory(null); } }
container.inject(configurationProvider);这一句不看代码也明了了。注入贝。
那么struts2里面的注入的大体流程应该就是这样的了(我的理解,不对的请拍砖。。。)
后面的细节再慢慢研究。^-^
评论
2 楼
ivoter
2011-12-20
能不能把后边的也给贴出来..自己看有点晕...
1 楼
liyaxi
2009-02-15
了解真相, 真相让我们更自由! ----圣经
自己搞懂! 是不是很有成就感!
自己搞懂! 是不是很有成就感!
发表评论
-
欢迎关注微信公众账号PigCode
2014-03-25 21:02 925开通了微信公众账号,欢迎大家关注: PigCode 不定 ... -
[FAQ]为什么引入lambda表达式
2013-07-02 20:54 1583Lambda表达式(闭包)在很多现代化的编程语言中很常见。在 ... -
[FAQ]什么是lambda表达式
2013-07-01 23:01 1497在一般数学计算中,lambda表达式就 ... -
Java&Scala比较---设计模式(Singleton)
2013-03-31 11:56 1325单例模式在Scala中就是一个默认实现的模式。 对于Java中 ... -
榨干Hello World:J2SE篇
2010-07-26 23:43 0昨天一时兴起想起这个问题(我好像一般都是一时兴起才会写 ... -
使用Ant部署项目细节问题及解决办法
2009-04-23 22:57 4103说原创也谈不上, ... -
重构?测试?TDD?Ant?
2009-04-11 23:56 2882很意外的,今天花 ... -
《重构:改善既有的代码设计》笔记
2009-03-21 15:30 0现在越看自己的代码越感觉恶心,感觉写得太糟糕了,根本见 ... -
5分钟搞定Schema
2008-12-18 21:38 3294事先声明:搞定不是精通,只是能够运用! 其实schema很简单 ... -
JNDI学习
2008-12-02 17:50 0之前接触过一点E ... -
将Struts2+EJB3程序从eclipse转移到Intellij Idea上
2008-08-20 16:12 2181之前写了个Struts2+EJB3的入门程序,好不容易搞 ... -
坎坷的Struts2+EJB3入门程序
2008-08-15 22:24 5084最近在看Struts2和EJB3,出于好奇,就想试试用部署在t ... -
集成jdk到editplus(转)
2008-04-11 21:11 1643对于像我这样的java新手,写java程序用edit ... -
Intellij idea性能优化
2008-03-24 12:54 9144-Xms256m -Xmx384m -XX:MaxPermSi ... -
Struts meets Swing 1 (翻译)
2008-03-13 13:49 2097原文:http://javaboutique.internet ... -
使用Maven2快速创建项目(转)
2008-01-30 16:33 13042源地址:http://www.intellij.org.cn/ ... -
什么是Spring(转)
2008-01-16 13:00 1724最近研究Spring,她包含 ... -
JSP中的国际化(转)
2008-01-09 09:17 10367地区确定和本地化 设计多语言 web 应用程序时,您必须首先决 ... -
Intellij IDEA的部署问题。。。
2008-01-03 17:22 5317在网上偶尔都能看到说Intellij IDEA是如何的好 ... -
JasperReports Web Application Sample (翻译)
2007-12-20 14:20 4497Web Application Sample This sam ...
相关推荐
在深入研究Struts2源码时,我们可以关注以下几个关键组件: - **StrutsPrepareAndExecuteFilter**:这是Struts2的核心过滤器,负责初始化Struts2框架并处理所有的HTTP请求。 - **ActionContext**:存储了请求期间...
本项目源码提供了一个基础的Struts2应用程序实例,对于初学者来说,这是一个很好的学习资源,可以深入理解Struts2的工作原理和架构。 Struts2的核心组件包括: 1. **Action类**:Action类是业务逻辑的载体,它是...
导入源码后,你可以开始深入研究Struts 2的核心组件和工作流程: 1. **Action类**:在Struts 2中,Action类是处理用户请求的核心。开发者通常需要继承`org.apache.struts.action.Action`或`...
通过对Struts2源码的深入研究,开发者可以更好地理解其内部工作原理,从而优化应用性能,解决实际问题,以及设计出更符合框架精神的代码结构。同时,这也为面试中展示自己的技术深度和问题解决能力提供了有力的支持...
Struts2是一个流行的Java Web框架,它简化了MVC(模型-视图-控制器)架构的实现。本文将深入探讨Struts2的...通过深入研究Struts2的源码,我们可以发现其内部工作原理,这对于解决复杂问题和开发自定义插件非常有帮助。
在深入研究Struts2源码时,我们可以关注以下几个关键部分: 1. **org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter**:这是Struts2的核心过滤器,它初始化并调用Struts2的生命周期。 2. **...
1. **Struts2的核心概念** - **Action**: Action是业务逻辑的载体,负责处理用户请求并返回结果。在Struts2中,Action可以通过实现`com.opensymphony.xwork2.Action`接口或继承`org.struts2.interceptor栈...
深入研究Struts 2的源码,我们可以学习到: - 如何实现MVC模式并进行请求处理。 - 拦截器的设计模式及其应用场景。 - 如何通过配置文件定制框架行为。 - 视图层模板语言的使用和实现原理。 - 插件系统的工作方式和...
Struts 1.2 是一款基于 Model-View-Controller(MVC)设计模式的开源Java Web框架,由Apache...通过深入理解Struts 1.2的源码,开发者可以更好地利用这个框架,解决实际项目中的问题,同时为自定义扩展和优化提供可能。
此压缩包文件包含的是Struts2的源码,特别适合初学者研究和学习,其中涵盖了拦截器和验证等关键组件的实现。 首先,我们来深入了解Struts2的核心概念: 1. **Action类**:在Struts2中,业务逻辑通常由Action类执行...
Struts2是一个强大的Java web开发框架,用于构建可维护、可扩展且结构良好的应用程序。它提供了MVC(Model-View-...通过深入研究这些示例,开发者可以更好地理解和掌握Struts2框架,从而更高效地开发Java web应用。
深入研究Struts2源码有助于提升对Java Web开发的理解,尤其是对于MVC框架的设计思想、AOP(面向切面编程)的应用以及依赖注入等方面有深刻认识。同时,源码学习也能帮助你更好地定位和解决问题,提高开发效率。
Struts2 源码分析主要涉及其在Tomcat启动过程中的初始化步骤以及请求处理流程。首先,我们来看Tomcat启动时Struts2框架如何准备和执行。 在Tomcat启动时,Struts2的Filter文件被加载,具体是`...
这个源码包是Struts2的2.3.20版本,官方的最新版本,对于想要深入理解Struts2工作原理、优化代码或自定义行为的开发者来说,研究源码是非常有价值的。 首先,Struts2的核心组件包括Action、Interceptor、Result和...
1. **Action类**:在Struts2中,Action类是业务逻辑的载体,它处理用户请求并返回结果。通常,每个Action类对应一个特定的页面或者业务功能。 2. **配置文件(struts.xml)**:这是Struts2的配置中心,定义了Action...
在实际开发中,理解和研究源码可以帮助解决框架使用中的问题,定制化开发,以及避免框架的潜在风险,例如著名的Struts2的安全漏洞。 总的来说,Struts2源码的学习涵盖了Java Web开发中的许多重要概念和技术,包括...
深入研究源码,开发者可以了解到Struts2的请求处理流程,包括ActionInvocation、Interceptor Stack、Result执行等关键组件的工作方式。通过阅读源码,可以更好地理解如如何定义和实现自定义拦截器、如何处理异常、...
Struts2是一个基于MVC(Model-View-...在研究struts-2.2.1.1 src这个源码包时,可以关注各个主要组件的实现,如Action、Interceptor、ValueStack等,以及配置解析和请求处理流程,这对于提高Java Web开发技能大有裨益。
通过对这些关键组件的深入理解和代码研究,开发者可以更好地掌握Struts2框架,提高应用的可维护性和扩展性。在实际项目中,合理利用Struts2提供的特性,如Interceptor,可以大大提高代码的复用性和模块化程度,从而...
1. **Action结果类型**:在Struts2中,Action的结果类型决定了如何处理Action的返回值。`struts2-json-plugin`添加了JSON结果类型,当Action返回此类型时,会将结果转换为JSON格式。 2. **JSONResult类**:这是实现...