Spring集成Struts、Hibernate----三大框架SSH(Spring、Struts和hibernate)

Spring 框架可以完成业务层的设计任务,Struts框架可以将表示层和业务层分离,而Hibernate框架可以提供灵活的持久层支持。下面介绍三大框架的集成环境:

1、配置Struts2.

  I、导入相关的JAR包。

  II、修改web.xml文件。Struts2的核心控制是通过过滤器(Filter)来实习的,所以在web.xml文件中需要进行过滤器的配置一边加载strust2框架。web.xml文件的代码如下:

    

 1 <!-- 配置Struts2框架的核心Filter -->
 2     <filter>
 3         <!-- 指定核心Filter的名字 -->
 4         <filter-name>struts2</filter-name>
 5         <!-- 指定核心Filter的实现类 -->
 6         <filter-class>
 7             org.apache.struts2.dispatcher.FilterDispatcher
 8         </filter-class>
 9     </filter>
10 <!-- 配置Filter拦截的URL -->
11     <filter-mapping>
12         <filter-name>struts2</filter-name>
13         <url-pattern>/*</url-pattern>
14     </filter-mapping>

需要注意的是,如果Web容器使用的是Servlet2.4及以上规范,则无需在web.xml文件中手动加载Struts2的标签库,因为这些版本会自动加载标签库定义文件,如果Web容器使用的是Servlet2.3以前的版本,则不会自动加载Struts2框架的标签文件,需要在web.xml中手动配置,文件web.xml加载标签库的配置代码如下:

1 <!-- 手动配置Struts2的标签库 -->
2     <taglib>
3         <taglib-url>/s</taglib-url> <!-- 配置Struts2标签库的URL -->
4         <!-- 指定Struts2标签库定义文件的路径 -->
5         <taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
6     </taglib>

  III、在前两个步骤中我们已经在web项目中增加了Struts2的支持,但是还不能再项目中使用Struts2的功能。为了能使用Struts2的功能,还需要添加Struts2的配置文件Struts.xml文件:

    

 1 <struts>
 2
 3      <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
 4      <constant name="struts.serve.static.browserCache" value="false" />
 5      <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
 6      <constant name="struts.configuration.xml.reload" value="true" />
 7      <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
 8      <constant name="struts.devMode" value="true" />
 9      <!-- 默认的视图主题 -->
10      <constant name="struts.ui.theme" value="simple" />
11      <!--<constant name="struts.objectFactory" value="spring" />-->
12      <!--解决乱码    -->
13      <constant name="struts.locale" value="zh_CN" />
14      <constant name="struts.i18n.encoding" value="UTF-8" />
15      <!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->
16      <constant name="struts.multipart.maxSize" value="10701096"/>
17      <!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir -->
18      <constant name="struts.multipart.saveDir " value="d:/tmp" />
19     <package name="struts_interceptor" extends="struts-default">
20             <interceptors>
21                 <interceptor name="havenLoginInterceptor" class="com.jyw.interceptor.VidatorLoginInterceptor"></interceptor>
22                 <interceptor-stack name="loginStack">
23                     <interceptor-ref name="havenLoginInterceptor"></interceptor-ref>
24                     <interceptor-ref name="defaultStack"/>
25                 </interceptor-stack>
26             </interceptors>
27             <default-interceptor-ref name="loginStack"></default-interceptor-ref>
28     </package>
29
30     <package name="struts_token_interceptor" extends="struts-default">
31             <interceptors>
32                 <interceptor-stack name="tokenStack">
33                     <interceptor-ref name="token"/>
34                     <interceptor-ref name="token-session"/>
35                     <interceptor-ref name="defaultStack" />
36                 </interceptor-stack>
37             </interceptors>
38             <default-interceptor-ref name="tokenStack"/>
39     </package>
40
41     <include file="struts_base.xml"></include>
42     <include file="struts_interceptor.xml"></include>
43     <include file="struts_json.xml"></include>
44     <include file="struts_token.xml"></include>
45     </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中配置数据源:

  

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans
 3  xmlns="http://www.springframework.org/schema/beans"
 4  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5  xmlns:context="http://www.springframework.org/schema/context"
 6  xmlns:aop="http://www.springframework.org/schema/aop"
 7  xmlns:tx="http://www.springframework.org/schema/tx"
 8  xsi:schemaLocation="http://www.springframework.org/schema/beans
 9                     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
10                     http://www.springframework.org/schema/context
11                     http://www.springframework.org/schema/context/spring-context-2.5.xsd
12                     http://www.springframework.org/schema/aop
13                     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
14                     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
15                    ">
16 <!-- 定义数据源 -->
17     <bean id="dataSource"
18         class="org.springframework.jndi.JndiObjectFactoryBean">
19         <!-- 指定连接数据库的驱动 -->
20         <property name="driverClassName">
21             <value>com.mysql.jdbc.Driver</value>
22         </property>
23         <property name="url">
24             <value>jdbc:mysql://localhost/spring</value>
25         </property>
26         <property name="username">
27             <value>root</value>
28         </property>
29         <property name="password">
30             <value>root</value>
31         </property>
32     </bean>
33
34     <bean id="sessionFactory"
35         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
36         <property name="dataSource">
37             <ref bean="dataSource" />
38         </property>
39         <property name="configLocation">
40             <value>classpath:hibernate.cfg.xml</value>
41         </property>
42         <!-- 配置Hibernate的属性 -->
43         <property name="hibernateProperties">
44         <props>
45         <!-- 配置Hibernate的数据库方言 -->
46         <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
47         <prop key="show_sql">true</prop>
48         </props>
49         </property>
50     </bean>
51 </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使用,使用它完成配置的代码如下:

 1 <context-param>
 2         <!-- 参数名称为contextConfigLocation -->
 3         <param-name>contextConfigLocation</param-name>
 4         <!-- 指定配置文件 -->
 5         <param-value>classpath:config.xml</param-value>
 6     </context-param>
 7 <!-- 监听器 -->
 8     <listener>
 9         <!-- 使用ContextLoaderListener初始化Spring容器 -->
10         <listener-class>
11             org.springframework.web.context.ContextLoaderListener
12         </listener-class>
13     </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: 1 <bean id="helloWorldBean" class="com.integrationhelloWorldBean"> 2 <property name="message" value="Hello World"></property> 3 </bean>

  Struts:

1 <struts>
2     <package name="struts_base" namespace="/baseAction" extends="struts-default">
3         <action name="helloWorld" class="helloWorldBean">//如果没有集成这里应该是 com.integrationhelloWorldBean
4             <result name="success">/jsp/exma/ExmaContext.jsp</result>
5         </action>
6 </package>
7 </struts>
时间: 2024-08-08 12:44:49

Spring集成Struts、Hibernate----三大框架SSH(Spring、Struts和hibernate)的相关文章

Struts2,Spring, Hibernate三大框架SSH的整合步骤

整合步骤 创建web工程 引入相应的jar包 整合spring和hibernate框架 编写实体类pojo和hbm.xml文件 编写bean-base.xml文件 <!-- 1) 连接池实例 -->    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">        <property name="driverClass"

Struts,spring,hibernate三大框架的面试

Struts,spring,hibernate三大框架的面试 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory  为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码. 2. Hibernate是一个基于JDBC的主流持久

Struts,Spring,Hibernate三大框架 面试题

Struts,Spring,Hibernate三大框架 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码. 2. Hibernate是一个基于JDBC的主流持久化框架,

Struts2+Spring+Hibernate 三大框架的合并集成

这次来看看Struts2+Spring+Hibernate三大框架的整合应用,主要是Spring和Hibernate框架的整合,因为前边已经将Strtus2+Spring整合过了基本一样.  首先看一下分工吧: Struts2做的MVC的流程框架,主要完成从客户端访问到选择action的过程,其中过滤器起到了Controller的作用,action属于model,而jsp则是view页面的展示. Spring主要利用Ioc的特长来管理各种对象:action,service,dao,数据访问源,H

[转]JAVA三大框架SSH和MVC理解

Java—SSH(MVC) JAVA三大框架的各自作用 hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就是Model; struts提供的丰富标签是用于显示层View;同时struts也充当了实现Control的功能(不管是Struts1,还是Struts2),接收参数,视图分发. Spring是用于降低层与层间耦合度的,就是所有的类都可以由spring统一创建,用时只需注入即可(IOC) 从功能上来说

使用MyEclipse整合ssh(Struts、Spring、Hibernate)三大框架(环境搭载+实例源码下载)

前言 SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层.数据持久层和域模块层(实体层). Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持.Spring一方面作为一个轻量级的IoC容器,负责查找.定位.创建和管理对象及

浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓

hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码. 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现.他很大程度的简化DAO层的编码工作 3. hib

[转] 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓

hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码. 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现.他很大程度的简化DAO层的编码工作 3. hib

SSH(Struts、Spring、Hibernate)三大框架整合

1. 新建数据库ssh_db -> 新建表user_tb(id为主键,自动递增) 2. 导入jar包(struts.hibernate 和 spring) 3. 注册页面reg.jsp,将表单的 action 属性设置为 handleAction,input 元素的 name 属性值加上前缀“user.”,如user.username <%@ page language="java" contentType="text/html; charset=UTF-8&qu

SSH(struts2+spring+hibernate)三大框架整合

SSH框架整合理论: 在SSH框架的JAVAweb项目的开发过程中,WEB层通常使用的是Struts2+jsp,service层使用的是javaBean,DAO层使用的是hibernate,而spring的使用覆盖三层. 使用了spring框架之后,我们可以把对象交给spring来管理.在WEB层中,所有action对象的创建和管理都可以交给spring来完成,这样Struts2就不用自己来new一个action,这一切都可以交给spring,直接向spring来要action对象. 在DAO层