Struts2 Hibernate Spring 运行流程与部分机制
Tomcat容器被加载,找到该webApplication相对应的web.xml
开始解析web.xml中的信息
读取到一个spring的监听器,告诉spring容器开始初始化配置文件中的信息,spring容器配置文件默认applicationContext.xml
<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组件的实例)
9.action调用service,service调用dao
dao层中调用hibernateTemplate的相关方法完成数据库操作将结果逐层返回给action
10.action返回试图名
10.actionInvacation根据struts.xml中action返回的视图名对应result的值寻找到对应的视图将视图和返回值结合(jsp拿到值)并产生新的jsp返回给上层的filter。
StrutsPrepareAndExecuteFilter将jsp返回给tomcat
Tomcat的jsp引擎(org.apache.jasper.servlet.JspServlet)生成serlvet源程序(.java文件)
.之后又将Servlet源程序编译为.class类文件;编译成.class文件后返回给用户产生html
一。Struts2生成action
不声明@Component,由struts2生成的action(默认是prototype一个请求new一个)
action中需要访问的service层的对象生成的set方法由struts-spring-plugin.jar这个jar包 帮我们去spring容器中找与set方法名字一样的bean帮我们注入,
注意这里struts-spring-plugin提供的注入方法是不可替换的,即使
使用@Resource指定其他的实现也无效。
二。Spring生成action
由Spring容器生成的action,配置了@Component和@Scope("prototype") struts,xml中action的class属性指定成
@Component的value
该action中的service的set方法 需要使用@Resource注入,struts-spring-plugin 则不会自动去spring容器中寻找相应的bean
注意:
如果action不使用@Component("actionName") 那么action是由struts2产生,如果加上@Component("u") 则struts.xml中的
<action name="u" class="u"> 的class要为u,则为spring产生的action,struts2找action的时候,去spring容器中找action
刚工作不久,自己总结的,如果错误以及不正确的地方,欢迎大家指正哈。
分享到:
相关推荐
论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...
整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...
Struts2、Hibernate和Spring是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2主要用于MVC(Model-View-Controller)架构的实现,提供控制层的支持;Hibernate是对象关系映射(ORM)工具,负责数据持久...
开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)开发基于Struts Spring Hibernate ...
Struts2与Spring的集成使得依赖注入(DI)和面向切面编程(AOP)变得更加便捷。 2. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它为Java开发者提供了对数据库的操作接口,将Java对象与数据库表之间的...
《Struts2、Hibernate、Spring整合在线考试系统详解》 在线考试系统是现代教育技术发展的重要组成部分,它能够实现远程测试、自动评分等功能,极大地提高了教学效率。本系统基于Struts2、Hibernate和Spring三大主流...
library_ssh2可能是一个包含系统源代码的压缩文件,"ssh2"可能表示系统使用了Struts2、Spring2和Hibernate2这三个框架的早期版本。这个文件中应包含所有必要的Java源代码、配置文件、Web应用相关的资源(如JSP页面、...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的整合(SSH)极大地提升了开发效率和项目的可维护性。下面将详细讲解这三大框架的核心功能以及整合过程中的关键知识点。 1. **Struts2**:Struts2是一...
Struts Hibernate Spring Ajax Struts Hibernate Spring Ajax
在本资源中,"struts2 spring hibernate框架技术与项目实战 光盘源码 上"提供了这三大框架的实践项目代码,帮助开发者深入理解并掌握它们的集成与应用。 Struts2作为MVC(模型-视图-控制器)框架,主要负责处理HTTP...
struts hibernate spring 框架运用struts hibernate spring 框架运用struts hibernate spring 框架运用struts hibernate spring 框架运用
ssh2 struts2 hibernate spring 需要的jar包 ssh2 struts2 hibernate spring 需要的jar包 ssh2 struts2 hibernate spring 需要的jar包 ssh2 struts2 hibernate spring 需要的jar包 ssh2 struts2 hibernate spring ...
struts2-spring-plugin-2.0.14.jar是Struts2与Spring的整合插件,使得Action可以被Spring管理。 整合步骤通常包括以下几个部分: 1. 配置Spring:创建applicationContext.xml,定义DataSource、SessionFactory、...
Struts2、Hibernate和Spring是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2主要用于MVC(Model-View-Controller)架构的实现,提供动作调度和视图渲染;Hibernate是一个对象关系映射(ORM)框架,...
至于Apache Tomcat,它是广泛使用的Java Servlet和JavaServer Pages(JSP)容器,也是Struts2、Spring4和Hibernate运行的基础。在这个压缩包中包含的Apache Tomcat 8.0.47是Tomcat的一个版本,它提供了运行Java Web...
Struts2、Hibernate和Spring是Java企业级应用中三大核心框架,它们的整合使用能够构建出高效、可维护性高的Web应用程序。本篇将深入剖析这三者如何协同工作,并提供实际范例应用。 首先,Struts2作为MVC(模型-视图...
【标题】"Hibernate与Struts2和Spring组合开发实例"涉及的是Java企业级应用开发中的核心技术栈,也就是著名的SSH(Spring、Struts2、Hibernate)框架的整合使用。这三个框架分别在应用程序的不同层面发挥关键作用,...
书中会详细讲述如何配置这些框架,使它们协同工作,包括Spring与Hibernate的事务管理、数据源配置、以及Struts2与Spring的整合等。 除此之外,书中还可能涵盖了单元测试、异常处理、安全性配置等方面的内容,这些都...
Struts2、Spring4和Hibernate4是Java Web开发中的三大主流框架,它们分别负责MVC模式中的表现层、业务层和服务层。这个最新的项目系统整合了这三个框架,旨在提供一个高效、灵活且易于维护的开发环境。下面将详细...
Struts2、Spring和Hibernate是Java开发中三大主流的开源框架,它们分别专注于Web层、业务层和服务层的管理,组合使用可以构建出强大的企业级应用。这些框架的jar包是开发人员日常工作中必不可少的工具。 **Struts2*...