Struts2 Hibernate Spring 运行流程与部分机制
Struts2 Hibernate Spring 运行流程与部分机制
Tomcat容器被加载,找到该webApplication相对应的web.xml
开始解析web.xml中的信息
读取到一个spring的监听器,告诉spring容器开始初始化配置文件中的信息,spring容器配置文件默认applicationContext.xml www.2cto.com
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
容器开始实例化spring相关bean和配置文件,
Spring容器创建dataSource数据源,
创建hibernate的sessionFactory(传入dataSource)
创建操作数据库所需的操作模板HibernateTemplate(传入sessionFactory)
并扫描生成配置文件中的bean(IOC注入)
生成各个dao 传入hibernateTemplate
生成各个service 传入相对应的dao
(初始化工作完成,等待用户的请求,只初始化spring容器中的bean)
spring容器初始化完成(如果action是prototype,不是单例的话)
action如果是单例就会先初始化action,service,dao,hibernateTemplate,sessionFactory,datasource)
一个请求发送到tomcat(产生了HttpServletRequest)
Tomcat接收到请求根据url寻找web application,开始加载该web application的web.xml
读取到
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
的时候
1.通过filter过滤所有的url,调用把请求传给StrutsPrepareAndExecuteFilter(前端控制器)
开始struts2的工作
struts2一起动就会去加载配置文件,其中包括struts—plugin。xml读取顺序:
struts-default.xml
struts-plugin.xml
(struts2-spring-plugin.jar中的配置文件中的
<constant name="struts.objectFactory" value="spring" />,这句配置就指明了我们产生struts对象的工厂交给spring来产生,如果action配置了注解,则交给spring在最初的时候产生,如果没有,则由struts2和plugin插件产生)
struts.xml
struts.properties
web.xml
2.StrutsPrepareAndExecuteFilter调用actionMapper来确定是否
有action需要调用
3.如果actionMapper确定请求需要调用某个action,那么StrutsPrepareAndExecuteFilter
调用Dispatcher类中的serviceAction方法产生valuestack(值栈)与 actioncontext(action上下文)并产生actionproxy代理对象
把请求的处理交给actionProxy
4.actionProxy通过configurationManager查看struts.xml
来找到需要调用的action和action所有的配置信息(拦截器,转换器等)
5.actionProxy创建一个actionInvocation的实例。
6.actionInvocation使用命令模式在action的前后来调用配置文件中
配置的拦截器和拦截器栈(比如将HttpServletRequest的参数解析出来封装成对象传给action)
(通过xml的代码然后再解析xml文档用dom解析或者sax解析,得到xml的内容和节点,然后通过反射技术,进行java类的加载以及方法的加载 )
7.调用完拦截器后调用action对应的方法方法处理请求(页面控制器)
8.由struts2生成action或者spring产生的,并struts-spring-plugin插件将action中所需的serviceImpl在spring容器中寻找并将实例传入action(或者由工厂模式提供serviceImpl组件的实例)
相关新闻>>
- 发表评论
-
- 最新评论 更多>>