`
rainlife
  • 浏览: 230613 次
  • 性别: Icon_minigender_1
  • 来自: 我也来自火星?
社区版块
存档分类
最新评论

String,Struts,Hibernate集成

阅读更多
 
一、    Spring集成Hibernate

 先给出Spring的配置文件,applicationContext.xml: 

这种方式在整合的时候,有时会产生Action的无效,即不能正常实例化一个Action,一个原因是版本的问题,另一个原因是引入了Hibernateannotation库,估计仍然是版的问题。

    (2)web.xml文件中装载Spring上下文,如下:

如果不支持Servlet2.4,则采用下面的配置:

   Spring集成Struts的三种方式:

(1)    Struts的每一个具体的Action直接继承SpringActionSupport ,例如:

这样的话,就可以使用getWebApplicationContext().getBean()方式来使用在Spring的配置的Bean了。但使用这种方式的话,每一个Action都和Spring框架耦合在一起了,一般不采用。

 

  (2)  使用SpringDelegatingRequestProcessor覆盖StrutsRequestProcess,在Struts的配置文件struts-config.xml文件中加入如下内容:

<controller  processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
 

这样的话,就可以由SpringBean的方式来管理StrutsAction这种设计使 Struts 动作并不知道它正被 Spring 管理,并且使您能够利用 Spring框架的所有优点。由于Struts 动作注意不到 Spring 的存在,所以不需要重写Struts 代码就可以使用其他控制反转容器来替换掉 SpringDelegatingRequestProcessor 方法的确比第一种方法好,但是仍然存在一些问题。如果使用一个不同的 RequestProcessor,则需要手动整合 Spring DelegatingRequestProcessor

 

(3)  使用代理将StrutsAction委托给Spring管理

     先看一下在struts-config.xml中的Action的配置:

<action attribute="loginForm" 
             input="/login.jsp"
             name="loginForm" path="/login" scope="request"                   
             type="org.springframework.web.struts.DelegatingActionProxy">
            <forward name="success" path="/success.jsp" />
</action>
 

 

通过type属性指定为org.springframework.web.struts.DelegatingActionProxy将这个Action委托给Spring进行管理。它注册 Spring 代理类的名称,而不是声明动作的类名。DelegatingActionProxy 类使用动作映射名称查找 Spring 环境中的动作。

下面看一下Spring的配置文件中的配置:

<bean name="/login" 
          class="com.test.struts.action.LoginAction"
          singleton="false" autowire="byType">
</bean>
 

Bean的配置中,是通过name属性而不是id属性,因为id属性在DTD验证中的类型为ID,而ID类型,ID类型必须以字母、下划线或冒号开头,不允许使用非法字符,而”/”是非法字符。另外,name属性的值是非常重要的,它一定要和在struts-config.xml中配置的Actionpath属性的值一致。DelegatingActionProxy会通过path属性的值在Spring的上下文环境中查找真正的Action。而Beanclass属性则指定了真正实现StrutsAction的具体类。这样就将StrutsAction交给了Spring来管理。

public class LoginAction extends ActionSupport {
    private UserDAO getUserDAO() {
        return (UserDAO) getWebApplicationContext().getBean("userDAO");
    }

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        getUserDAO().save(User);
        return null;
    }
}
 

 

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
    
<servlet>
    <servlet-name>SpringContextServlet</servlet-name>
    <servlet-class>
        org.springframework.web.context.ContextLoaderServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
 

<context-param>
    <param-name>contextConfigLocation</param-name>
    param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- 这是Servlet2.4的规范,如果不支持Servlet2.4规范,则采用ContextLoaderServlet -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
        </property>
        <property name="url">
            <value>jdbc:microsoft:sqlserver://localhost:1433;database=bookstoressh</value>
        </property>
        <property name="username">
            <value>sa</value>
        </property>
        <property name="password">
            <value>123456</value>
        </property>
    </bean>

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
        <property name="dataSource">
            <ref local="dataSource"/>
        </property>
</bean>
 

在集成中主要是要配置dataSourcesessionFacotyrdataSource主要是配置数据库的连接属性,而sessionFactory主要是用来管理Hibernate的配置,通过classpath:hibernate.cfg.xml直接装入Hibernate的配置文件,这样就仍然可以采用Hibernate自己的方式来配置Hibernate

sessionFactory有一个dataSource属性,需要注入一个dataSource

实际上也可以在Spring的配置文件中来配置Hibernate如下:

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
        <property name="dataSource">
            <ref local="dataSource"/>
        </property>
        <property name="mappingResources">
            <list>
                <value><!-- 这里填写hibernate的映射文件路径 --></value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
            <!-- 配置Hibernate的方言 -->
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.SQLServerDialect
                </prop>
                <!-- 输入由Hibernate生成的SQL语句,如果在hibernate.cfg.xml中也指定的话,会生成两条语句,在产品中最好关闭,即设为false -->
                <prop key="show_sql">true</prop>
            </props>
        </property>
</bean>
 

 

SpringHibernate的集成比较简单,通过上面的配置,就已经完成了。

下面是SpringStruts的集成,这部分比较复杂。

一、    Spring集成Struts

Spring集成Struts主要有两种上下文装载方式和三种整合方法:

 两种上下文装载方式:

(1)    struts-config.xml中通过插件的方式装载Spring上下文,如下:


<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
             <set-property property="contextConfigLocation"
                     value="/WEB-INF/applicationContext.xml" />
</plug-in>
 
分享到:
评论

相关推荐

    struts+hibernate+spring集成开发

    让我们集成框架吧! import static java.lang.System.*; //静态导入 Public class TestPrintf{ public static void main(String... args){ //可变长参数 Integer i=1; //自动封箱 for(String s:args){ out.printf(”...

    小型oa办公管理系统

    这个是一个很好的小型oa办公管理系统,采用struts hibernate spring 三大框架集成 ……

    Struts2 in action中文版

    第9章 集成Spring和Hibernate/JPA 196 9.1 为什么在Struts 2中使用Spring 196 9.1.1 依赖注入能做些什么 197 9.1.2 Spring如何管理对象和注入依赖 199 9.1.3 使用接口隐藏实现 200 9.2 将Spring添加到Struts 2 202 ...

    Spring+String+hibenate

    订单系统:Struts+Spring+Hibernate(简称SSH)集成开发示例

    SSH三大框架 无冲突 集成jar包

    看到网上许多人都说SSH在加载jar文件的过程中出现关于jar包的错误,就把调试成功的jar包合集上传上来。下载后解压缩,放在一个固定文件目录下。

    Spring面试题

    6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入式设计,代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复杂性 10.Spring的高度开放...

    java面试题

    3:Spring ORM:Spring框架集成了若干ORM框架 4:Spring DAO:打开关闭数据库连接 5:Spring WEB:为基于WEB服务的应用程序提供上下文服务 6:Spring Context:向Spring框架提供上下文信息 7:Spring MVC:分离...

    OA项目SSH整合框架

    一,集成 Spring 与 Hibernate 1,配置SessionFactory 1,配置 ---------------------- applicationContext.xml ------------------------ &lt;!-- 配置SessionFactory(整合Hibernate) --&gt; ...

    Java学习笔记-个人整理的

    {3.3}String常量重利用}{70}{section.3.3} {3.4}正则表达式}{71}{section.3.4} {3.5}StringBuffer}{75}{section.3.5} {3.6}StringBuilder}{76}{section.3.6} {3.7}StringBuilder与StringBuffer的缺点}{76}{...

    spring 高性能 代码

    整个项目只使用了spring 没有struts,没有hibernate //就极简而言,一个数据库只需要一个Service,就可以查询这个数据库的任意一张表 //以下是我的测试用例 //@Test 查询基本类型 public void testObject() throws ...

    详解SSH框架和Redis的整合

    一个已有的Struts+Spring+Hibernate项目,以前使用MySQL数据库,现在想把Redis也整合进去。 1. 相关Jar文件 下载并导入以下3个Jar文件: commons-pool2-2.4.2.jar、jedis-2.3.1.jar、spring-data-redis-1.3.4....

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...

    JAVA上百实例源码以及开源项目

    百度云盘分享 简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景... String serverAddr=jtfServer.getText();...

    JAVA上百实例源码以及开源项目源代码

     String pass=jtfPass.getPassword().toString(); //得到密码  ftpClient.openServer(serverAddr); //连接到服务器  ftpClient.login(user,pass); //在服务器上注册  InputStream is=ftpClient.list(); //...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    SSH 为 Struts+Spring+Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久...

Global site tag (gtag.js) - Google Analytics