Java EE | 浅谈SSH三大框架及整合流程

什么是SSH
SSH是 struts + spring + hibernate 的一个集成框架,是目前比较流行的一种Web应用程序开源框架。

集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层),以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中 使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts(action)和hibernate(sessionFactory)。
 

对于三大框架的理解:首先是 struts2,就是一个控制器,负责接收页面数据并通过action调用视图层的方法返回所需要的数据,一般采用的是关系型数据库,java是面向对象的语言,hibernate负责数据库的操作,hibernate从原来的业务逻辑层分离出来持久层,对数据库进行操作不需要编写繁琐的sql语句,可以专注业务的开发,更加方便的对数据库进行操作。Spring是一个轻量级的控制反转(ioc)和面向切面(aop)的非侵入性的容器框架。Spring通过ioc的Di思想和各类相互依赖的关系放置在配置文件中,使得各类相对独立存在,调用关系由配置文件完成,这样就实现了各个层之间的解耦合,有利于提高各模块之间的复用,使系统各趋近于高内聚低耦合。

Spring:单单说Spring在SSH中的作用。
①管理Struts:在xml配置文件中为struts的action进行注入。
②管理hibernate:在xml配置文件中配置hibernate的配置信息(dataSource,sessionFactory),为hibernate的dao操作注入sessionFactory属性值。

Struts:用来响应用户的action,对应到相应的类进行处理。

Hibernate:用来把实体类对应到数据库。提供增删改查的基本底层操作。

Struts2
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2 是 Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
 

struts2框架的运行结构如下图所示:


客户端发送请求到服务器,服务器接收到请求就先进入web.xml配置文件查看是否配置了过滤器,发现有struts2的过滤器,然后就找到struts.xml配置文件,struts.xml配置文件里有定义一个action,然后就去找到类名叫UserAction这个类,返回相应的字符串为给struts.xml配置文件,struts.xml配置文件的action会调用UserAction类的Login()方法,result接收到了返回的字符串,然后查找结果字符串对应的(Result),result就会调用你指定的jsp页面将结果呈现,最后响应返回客户端。

配置文件
下面我们讲解Struts2 应用程序所需的两个基本配置文件:web.xml、struts.xml。

web.xml配置文件是一种J2EE配置文件,决定servlet容器的HTTP元素需求如何进行处理。它严格来说不是一个Struts2 配置文件,但它是Struts2 运作所需要进行配置的文件。这个文件为每个web应用程序提供接入点。在部署描述符(web.xml)中,Struts2 应用程序的接入点将会定义为一个过滤器。web.xml文件需要在WebContent/WEB-INF文件夹下创建。

<!-- Struts2核心过滤器 -->
  <!--下面的配置表示对于所有的请求都交给struts来处理 -->
  <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

注意,我们将Struts2 过滤器映射到 /* ,而不是 /*.action ,这意味着所有的url都会被Struts过滤器解析。

struts.xml文件包含有随着Actions的开发你将要修改的配置信息。

<constant name="struts.custom.i18n.resources" value="globalMessages" /><!-- 
                指定国际化资源文件 -->
        <constant name="struts.i18n.encoding" value="UTF-8" /><!-- 指定编码方式 -->
        <!--name:package名称
        extends:继承的父package名称
        namespace:定义package命名空间 该命名空间影响到url的地址 -->
        <package name="json" namespace="/" extends="json-default,struts-default">
                <!-- 定义拦截器 -->
                <interceptors>
                        <interceptor name="userAuthority" class="com.bbs.interceptor.UserInterceptor"></interceptor>
                        <interceptor name="adminAuthority" class="com.bbs.interceptor.AdminInterceptor"></interceptor>
                </interceptors>
                
                <!-- 全局result配置 -->
                <global-results>
                        <result name="login">/login.jsp</result>
                </global-results>
                <!-- action名称 类路径 调用方法 -->
                <action name="user_CheckName" class="UserAction" method="CheckName">
                        <result type="json">
                        </result>
                </action>

action中的method方法还有以下写法:

<!-- method中的{1}代表通配符中的第一个* -->
                <action name="user_*" class="UserAction" method="{1}">
1
2
action与拦截器
Actions是Struts2框架的核心,因为它们适用于任何MVC(Model View Controller)框架。 每个URL映射到特定的action,其提供处理来自用户的请求所需的处理逻辑。

但action还有另外两个重要的功能:

action在将数据从请求传递到视图(无论是JSP还是其他类型的结果)方面起着重要作用。
action必须协助框架确定哪个结果应该呈现在响应请求的视图中。

拦截器在概念上与servlet过滤器或JDK代理类相同。拦截器允许横切功能,把action以及框架分开实现。你可以使用拦截器实现以下操作:

在调用action之前提供预处理逻辑。
在调用action后提供后处理逻辑。
捕获异常,以便可以执行备用处理。
Struts2框架中提供的许多功能都是使用拦截器实现的,包括异常处理,文件上传,生命周期回调和验证等。

如下图:左边是自定义拦截器类,右边是在配置文件中定义拦截器。


Structs2 标签
Struts2 标签分为控制标签、数据标签、表单标签、Ajax标签。

Hibernate
Hibernate 是一个高性能的对象关系型持久化存储和查询的服务,是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate 不仅关注于从 Java 类到数据库表的映射,也有 Java 数据类型到 SQL 数据类型的映射,另外也提供了数据查询和检索服务。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。

下面是一个详细的 Hibernate 应用程序体系结构视图以及一些重要的类。
 
配置对象是你在任何 Hibernate 应用程序中创造的第一个 Hibernate 对象,并且经常只在应用程序初始化期间创造。它代表了 Hibernate 所需一个配置或属性文件。配置对象提供了两种基础组件。

数据库连接:由 Hibernate 支持的一个或多个配置文件处理。这些文件是 hibernate.properties 和 hibernate.cfg.xml(Spring整合后取消)。
类映射设置:这个组件创造了 Java 类和数据库表之间的联系。
SessionFactory 对象

配置对象被用于创造一个 SessionFactory 对象,使用提供的配置文件为应用程序依次配置 Hibernate,并允许实例化一个会话对象。SessionFactory 是一个线程安全对象并由应用程序所有的线程所使用。

SessionFactory 是一个重量级对象所以通常它都是在应用程序启动时创造然后留存为以后使用。每个数据库需要一个 SessionFactory 对象使用一个单独的配置文件。所以若使用多种数据库那么你要创造多种 SessionFactory 对象。

Session 对象

一个会话被用于与数据库的物理连接。Session 对象是轻量级的,并被设计为每次实例化都需要与数据库的交互。持久对象通过 Session 对象保存和检索。

Session 对象不应该长时间保持开启状态因为它们通常情况下并非线程安全,并且它们应该按照所需创造和销毁。

Transaction 对象

一个事务代表了与数据库工作的一个单元并且大部分 RDBMS 支持事务功能。在 Hibernate 中事务由底层事务管理器和事务(来自 JDBC 或者 JTA)处理。

这是一个选择性对象,Hibernate 应用程序可能不选择使用这个接口,而是在自己应用程序代码中管理事务。

Query 对象

Query 对象使用 SQL 或者 Hibernate 查询语言(HQL) 字符串在数据库中来检索数据并创造对象。一个查询的实例被用于连结查询参数,限制由查询返回的结果数量,并最终执行查询。

Criteria 对象

Criteria 对象被用于创造和执行面向规则查询的对象来检索对象

常用方法
增删改的操作:

添加:save(Object obj);
修改:update(Object obj);
删除:delete(Object obj);
查询的操作:

查询一条记录:
Object get(Class c,Serializable id);
Object load(Class c,Serializable id);
查询多条记录:

List find(String hql,Object… args);
配置文件
配置数据库连接池 database.p

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值