通过案例练习掌握SSH 的整合
1. SSH整合_方案01 **
整合方案01
Struts2框架 Spring框架
在Spring框架中整合了Hibernate(JDBC亦可)
一些业务组件(Service组件)也可以放入Spring框架中行管理(昨天的例子)
1. 请求(request)发出后,该请求要调用某个Action行处理
2. 拦截器(FilterDistatcher)照惯例拦截请求(request), 此时,如果拦截器(FilterDispatcher)发现项目中已经引入了 struts2-spring-plugin.jar整合插件
3. 那么接下来,拦截器就将请求(request)交给Struts2-spring-plugin.jar整合插件来创建 Action组件对象
4. 在插件struts2-spring-plugin.jar中有个非常重要的类: 对象工厂StrutsSpringObjectFactory。
5. 对象工厂StrutsSpringObjectFactory可以创建Action组件并且到Spring框架中将Service组件戒DAO组件取出,注入到Action中去
6. 当然,在Spring框架内部,就各种使用IoC戒者AOP,就和我们前讲的一样。如下所示,
整合SSH框架需要保证的是:在Tomcat启劢时,Spring容器就已经创建。 当请求(request)来时,直接就可以用,丌需要临时创建了。原理是在web.xml中配置ContextLoaderListener,由它来将Spring容器实例化 所以,整合SSH的难度并丌大,主要是整合需要的那个struts2-spring-plugin.jar整合插件
案例如下
【案例1】SSH整合_方案1 **
项目结构图
参考代码
1) 新建工程spring4
鉴亍Struts和Hibernate是由Spring整合的,我们先来引入Spring框架。(后期熟练后,先引入哪个都可以)
2) 导入Spring的Jar包
请下载spring_some_lib.zip
完成登录功能,先写视图
3) 新建视图
a. 登录页面login.jsp
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <filter> <filter-name>StrutsFilter</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>StrutsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app><param-value>classpath:ssh.xml</param-value>
其中classpath表示在类路径下找ssh.xml文件,
如果是WEB-INF目录下,直接写就可以了,写WEB-INF/ssh.xml
文件位置放到这里
配置文件这样写
17) 部署项目,启动Tomcat
18) 访问http://localhost:8080/spring4/login.jsp
输入“hibernate@163.com”“1111”,点击“登录”
成功页面
控制台打印
全部代码工作完成,让我们再顺一下程序调用流程
19) 程序调用流程
首先,tomcat启劢,加载web.xml,指定web.xml中的配置
在web.xml中,配置了Struts2控制器,创建出来
其次,通过类contextConfigLocation找到指定的Spring配置文件ssh1.xml, 创建出Spring容器的实例 启劢tomcat服务器后,主要完成了如上两项工作 接下来,
当用户访问login.jsp,点击了“登录”按钮,发出了“login.action”请求, “login.action”请求带着用户提交的2个参数user.email和user.password 此时,“login.action”请求会根据web.xml中对struts2的配置找到struts.xml
根据struts.xml文件中的配置,“login.action”请求发现name=login的action匹配, 接着找到具体的Action(LoginAction)行处理。但是,因为导入的插件struts2-spring-plugin.jar的缘故,在该插件中的struts-plugin.xml 中指定了对象工厂由spring来维护, 所以由插件struts2-spring-plugin.jar来创建Action实例,并且按照“名称对应”的规则,
将spring容器中配置的UserDao对象注入到LoginAction中, 在ssh1.xml中对应的bean
创建的方法就是调用dataSource,通过SessionFactory等等一系列操作完成。 此时,LoginAction实例被创建,执行execute方法, 在其中调用userDao.findByEmail方法,执行结果被返回后,交给Struts2控制器, Struts2控制器根据返回值“login”,交给Result来处理
建议: 整合SSH,建议一步一步来,首先整合好Spring和Hibernate,测试成功后再加入Struts2 提示:
如果出现这样的异常,将项目重新部署(戒重新安装Tomcat) 有可能是Jar包冲突的原因,限亍时间,无法提供更好的解决方法。