Spring集成Struts、Hibernate----三大框架SSH(Spring、Struts和hibernate)
Spring 框架可以完成业务层的设计任务,Struts框架可以将表示层和业务层分离,而Hibernate框架可以提供灵活的持久层支持。下面介绍三大框架的集成环境:
1、配置Struts2.
I、导入相关的JAR包。
II、修改web.xml文件。Struts2的核心控制是通过过滤器(Filter)来实习的,所以在web.xml文件中需要进行过滤器的配置一边加载strust2框架。web.xml文件的代码如下:
<!-- 配置Struts2框架的核心Filter -->
<filter>
<!-- 指定核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 指定核心Filter的实现类 -->
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<!-- 配置Filter拦截的URL -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
需要注意的是,如果Web容器使用的是Servlet2.4及以上规范,则无需在web.xml文件中手动加载Struts2的标签库,因为这些版本会自动加载标签库定义文件,如果Web容器使用的是Servlet2.3以前的版本,则不会自动加载Struts2框架的标签文件,需要在web.xml中手动配置,文件web.xml加载标签库的配置代码如下:
<!-- 手动配置Struts2的标签库 -->
<taglib>
<taglib-url>/s</taglib-url> <!-- 配置Struts2标签库的URL -->
<!-- 指定Struts2标签库定义文件的路径 -->
<taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
</taglib>
III、在前两个步骤中我们已经在web项目中增加了Struts2的支持,但是还不能再项目中使用Struts2的功能。为了能使用Struts2的功能,还需要添加Struts2的配置文件Struts.xml文件:
<struts>
<!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
<constant name="struts.devMode" value="true" />
<!-- 默认的视图主题 -->
<constant name="struts.ui.theme" value="simple" />
<!--<constant name="struts.objectFactory" value="spring" />-->
<!--解决乱码 -->
<constant name="struts.locale" value="zh_CN" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->
<constant name="struts.multipart.maxSize" value="10701096"/>
<!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir -->
<constant name="struts.multipart.saveDir " value="d:/tmp" />
<package name="struts_interceptor" extends="struts-default">
<interceptors>
<interceptor name="havenLoginInterceptor" class="com.jyw.interceptor.VidatorLoginInterceptor"></interceptor>
<interceptor-stack name="loginStack">
<interceptor-ref name="havenLoginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="loginStack"></default-interceptor-ref>
</package>
<package name="struts_token_interceptor" extends="struts-default">
<interceptors>
<interceptor-stack name="tokenStack">
<interceptor-ref name="token"/>
<interceptor-ref name="token-session"/>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="tokenStack"/>
</package>
<include file="struts_base.xml"></include>
<include file="struts_interceptor.xml"></include>
<include file="struts_json.xml"></include>
<include file="struts_token.xml"></include>
</struts>
我们可以看到struts.xml文件中有一个<package>标签,这个标签是关于包属性的一个标签,在Struts2框架中是通过包来管理action、result、interceptor、interceptor-stack等配置信息的。
2、Spring集成Hibernate
我们知道Hibernate的SessionFactory是一个非常重要的对象,一个Java Web应用一般都对应一个数据库,同时也对应一个SessionFactory对象,在使用Hibernate访问数据库时,应用程序先要创建SessionFactory实例,而使用Spring集成了Hibernate以后,则可以直接在Spring的配置文件中通过声明的方式来管理SessionFactory实例,同时,还可以利用Spring的IOC容器在配置SessionFactory时为其注入数据源的引用。在Spring的配置文件applicationContext.xml中配置数据源:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
">
<!-- 定义数据源 -->
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<!-- 指定连接数据库的驱动 -->
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost/spring</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean> <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<!-- 配置Hibernate的属性 -->
<property name="hibernateProperties">
<props>
<!-- 配置Hibernate的数据库方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
</props>
</property>
</bean>
</beans>
在Spring集成Hibernate的过程中主要是配置dataSource和sessionFactory,其中dataSource主要是配置数据的连接属性,这里也可以把单独的放在一个文件中,而SessionFactory主要是用来管理Hibernate的配置,在Spring的配置文件中完成对SessionFactory的配置后,便可以将SessionFactory Bean注入其他的Bean中。在Spring中配置好SessionFactory以后,就可以使用HibernateTemplate来进行数据库访问了。
3、Spring集成Struts
Spring框架允许将Struts作为Web框架无缝连接到基于Spring开发的业务层和持久层。下面将介绍Spring的上下文装载方式和Spring集成Struts2:
I、在web.xml文件中装载Spring 上下文。为了使Spring容器能够随着Web应用的启动而自动启动,可以利用下面两种配置方式来实现:ServletContextListener配置和load-on-startup Servlet配置。
采用ServletContextListener配置实际上是使用ServletContextListener的一个实现类ContextLoaderListener来完成配置的,ContextLoaderListener类可以作为一个监听器Listener使用,使用它完成配置的代码如下:
<context-param>
<!-- 参数名称为contextConfigLocation -->
<param-name>contextConfigLocation</param-name>
<!-- 指定配置文件 -->
<param-value>classpath:config.xml</param-value>
</context-param>
<!-- 监听器 -->
<listener>
<!-- 使用ContextLoaderListener初始化Spring容器 -->
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
注意:(1)ContextLoaderListener是由Spring提供的一个监听器类,它在创建时会自动查找位于WEB-INF/路径下的applicationContext.xml文件,这样,当只有一个配置文件时且配置文件的名字是:applicationContext.xml时,则只需要在web.xml文件中配置listener元素即可创建Spring容器。(2)使用context-param元素来指定配置文件的文件名,当ContextLoaderListener加载时,会自动查找名为contextConfigLocation的初始化参数,并使用该参数所指定的配置文件,此处为config.xml文件。如果未使用contextConfigLocation来指定配置文件,则Spring会自动查找applicationContext.xml文件,如果未找到,则Spring将无法正常启动。(3)如果有多个装载的Spring配置文件,同样需要使用context-param元素来进行设置。
II、Spring集成Struts2。Spring集成Struts2的目的是将Struts2中的Action的实例化工作交由Spring容器统一管理,同时使得Struts2中的Action实例能够访问Spring提供的业务逻辑组件资源。而Spring容器自身所具有的依赖注入的优势也可以充分发挥出来。Struts2与Spring集成时要用到Spring的插件包,这个包是随着Struts2一起发布的。struts2-spring-plugin-2.2.3.1.jar就是Struts2提供的用于集成到Spring中的类包,其中包含一个struts-plugin.xml配置文件。在struts-plugin.xml配置文件中定义了一个名为spring 的Bean,该Bean的实现类为org.apache.struts2.spring.StrutsSpringObjectFactory,定义这个Bean的目的就是方便将struts2中的Action类的管理工作委托给Spring容器进行处理。换句话说,配置了StrutsSpringObjectFactory以后,Struts2的配置文件就可以直接引用Spring容器中的Bean了。
struts-plugin.xml配置文件如下:
<struts>
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" /> <!-- Make the Spring object factory the automatic default -->
<constant name="struts.objectFactory" value="spring" /> <package name="spring-default">
<!--配置拦截器-->
<interceptors>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
</interceptors>
</package>
</struts>
代码中先定义一个名为spring的Bean,然后使用Spring的ObjectFactory在常量设置中将Struts2的常量struts.objectFactory覆盖,constant元素中的value属性设置为spring,与Bean配置中的name属性值spring相对应。struts.xml文件中的修改如下:
<struts> <constant name="struts.objectFactory" value="spring" /> </struts>
注意:Spring配置文件applicationContext.xml中配置Struts2的Action实例
Spring: <bean id="helloWorldBean" class="com.integrationhelloWorldBean"> <property name="message" value="Hello World"></property> </bean>
Struts:
<struts>
<package name="struts_base" namespace="/baseAction" extends="struts-default">
<action name="helloWorld" class="helloWorldBean">//如果没有集成这里应该是 com.integrationhelloWorldBean
<result name="success">/jsp/exma/ExmaContext.jsp</result>
</action>
</package>
</struts>
Spring集成Struts、Hibernate----三大框架SSH(Spring、Struts和hibernate)的更多相关文章
- Struts2,Spring, Hibernate三大框架SSH的整合步骤
整合步骤 创建web工程 引入相应的jar包 整合spring和hibernate框架 编写实体类pojo和hbm.xml文件 编写bean-base.xml文件 <!-- 1) 连接池实例 - ...
- Struts,spring,hibernate三大框架的面试
Struts,spring,hibernate三大框架的面试 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3 ...
- Struts2+Spring+Hibernate 三大框架的合并集成
这次来看看Struts2+Spring+Hibernate三大框架的整合应用,主要是Spring和Hibernate框架的整合,因为前边已经将Strtus2+Spring整合过了基本一样. 首先看一 ...
- 三大框架SSH整合
三大框架SSH整合 -------------------------------Spring整合Hibernate------------------------------- 一.为什么要整合Hi ...
- Spring集成Redis集群(含spring集成redis代码)
代码地址如下:http://www.demodashi.com/demo/11458.html 一.准备工作 安装 Redis 集群 安装参考: http://blog.csdn.net/zk6738 ...
- 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提 ...
- [转] 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6 ...
- SSH(Struts、Spring、Hibernate)三大框架整合
1. 新建数据库ssh_db -> 新建表user_tb(id为主键,自动递增) 2. 导入jar包(struts.hibernate 和 spring) 3. 注册页面reg.jsp,将表单的 ...
- 三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板
最近在学SSH三大框架的整合,在此对他们整合时相关配置文件做一简单的模板总结,方便以后复用! 首先是web.xml配置文件,这里面就配置一些简单的监听器.过滤器,包括spring核心配置文件appli ...
- Struts 2 Spring Hibernate三大框架的执行流程以及原理
Struts2框架 一.简介 Struts2是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架.它基于当年的WebWork和XWork框架,继承其优点,同时 ...
随机推荐
- JavaScript入门学习书籍的阶段选择
对于许多想学习 JavaScript 的朋友来说,无疑如何选择入门的书籍是他们最头疼的问题,或许也是他们一直畏惧,甚至放弃学习 JavaScript 的理由.在 JavaScript 方面,自己不是什 ...
- 软件测试工具MonkeyTalk使用方法
1.简单介绍 MonkeyTalk软件测试工具由两部分构成:MonkeyTalk IDE 和 MonkeyTalk Agents MonkeyTalk IDE是Eclipse平台的工具,工能是:对iO ...
- C++很“虚”
0引言:在学习C++时,碰到过以下四个以“虚”命名的概念,在系统理解这些高大上的术语后,才发现它们果真“名不虚传”. 为了方便捋清楚这些概念和之间的相互关系,本人对其进行了系统的总结,欢迎讨论. 1. ...
- Qt::WA_DeleteOnClose 造成的野指针问题
今天遇到了一个由Qt::WA_DeleteOnClose造成的野指针问题,在网上搜到的一个求助贴如下(http://bbs.csdn.net/topics/380182058): 主窗口类QMainW ...
- 关于Unity中UI中的Image节点以及它的Image组件
一.图片的Inspector面板属性 Texture Type:一般是选择sprite(2D and UI) Sprite Mode:一般是选择Single Packing Tag:打包的标志值,最后 ...
- JVM内存模型 小小结
可以看一下我的另一篇总结 JVM运行时数据区与JVM堆内存模型小结 推荐一篇文章,尚学堂的 Java内存模型深度解读 . 不方便全文转载,就摘录下吧. 以往的认知都是以基本类型.引用类型.常量.方法等 ...
- 第三百一十五节,Django框架,CSRF跨站请求伪造
第三百一十五节,Django框架,CSRF跨站请求伪造 全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...
- Mac 下,修改plist文件
/usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName $DISPLAY_NAME" "${PROJECT_TEMP_D ...
- 什么是代码?code?
概念描述: 程序代码?code? 应用程序是由一系列代码构成,那么什么是代码呢? 简单来说:代码也可以理解为命令,通过这个命令告诉计算机该做什么事情. 文档创建时间:2018年3月16日15:10:5 ...
- POJ 2229 Sumsets(技巧题, 背包变形)
discuss 看到有人讲完全背包可以过, 假如我自己做的话, 也只能想到完全背包了 思路: 1. 当 n 为奇数时, f[n] = f[n-1], 因为只需在所有的序列前添加一个 1 即可, 所有的 ...