一.Struts2的工作流程:
1.用户在客户端发起请求,客户端会初始化一个servlet容器请求;
2.servlet容器把请求会传递给context容器,context容器找到目标web工程。
3.进行解析web.xml中的struts标签中的配置:

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

4.然后进行struts的一系列的过滤器,如:ActionContextClearUp;
5.接着FilterDispatcher会被调用,它在转发到某个Actio之前,要先询问
ActionMapper(它会判断是否有Action要被执行);
6.如果有,FilterDispatch会将请求交给我们的ActionProxy(Action代理);
7.然后ActionProxy会通过Configure Manager询问框架的具体配置,找到action配置信息,在通过ActionInnvcation

实例Action对象;
8.执行Action对象的方法,返回结果;
9.根据返回结果在struts.xml中Action子标签result跳转具体的处理页面或另一个Action;
10.响应给我们的用户。

二.Hibernate的工作流程:

1.当我们使用myeclipse加入hibernate组件时,这个组件会为我们自动生成HibernateSessionFactory类和

hibernate.cfg.xml文件;
2.在hibernate.cfg.xml中主要进行了sessionFatory的配置,它包括数据库的连接信息,还有缓存信息;

<session-factory>
    <property name="dialect">
        org.hibernate.dialect.Oracle9Dialect
    </property>
    <property name="connection.url">
        jdbc:oracle:thin:@127.0.0.1:1521:orcl
    </property>
    <property name="connection.username">system</property>
    <property name="connection.password">java</property>
    <property name="connection.driver_class">
        oracle.jdbc.driver.OracleDriver
    </property>
    <property name="myeclipse.connection.profile">oeconn</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="cache.provider_class">
        org.hibernate.cache.EhCacheProvider
    </property>

</session-factory>

3.有谁来读取和解析这么重要的配置文件呢? 当然是HibernateSessionFactory了。
在这个类中有一段静态代码块:

private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private static org.hibernate.SessionFactory sessionFactory;

    private static Configuration configuration = new Configuration();
    private static ServiceRegistry serviceRegistry;

    static {
        try {
            configuration.configure();
            serviceRegistry = new ServiceRegistryBuilder().applySettings

(configuration.getProperties()).buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        } catch (Exception e) {
            System.err.println("%%%% Error Creating SessionFactory %%%%");
            e.printStackTrace();
        }
    }

在这个静态代码块中:通过Configuration类的configure方法加载解析hibernate.cfg.xml;同时也创建了

sessionFactory对象(它用来创建session对象的),所以在tomcat服务器启动时就会运行该段代码;
在这里顺便提提session创建过程:
1)为什么session要放在ThreadLocal<Session> 中?
我们的模板类虽然是通过资源池获取数据库连接或会话对象的,根据持久化技术的不同,模板类需要
绑定数据库连接和会话资源,但这些资源本身是非线程安全的,也就是不能被多个线程共享,所以它
Hibernate不需同步就可以解决线程安全问题,所以它将session放在了ThreadLocal中。
2)通过SessionFatory创建一个单例session

public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();

        if (session == null || !session.isOpen()) {
            if (sessionFactory == null) {
                rebuildSessionFactory();
            }
            session = (sessionFactory != null) ? sessionFactory.openSession()
                    : null;
            threadLocal.set(session);
        }

        return session;
    }

4.创建事务对象session.BeginTransaction方法
5.创建持久化对象session.createQuery方法
6.提交事务
7.关闭session、sessionFactory.

三.Spring的工作流程:
1.在myeclipse中加入Spring组件,产生一个applicationContext.xml文件。
2.在web.xml中加入以下配置:

 <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath:applicationContext.xml</param-value>
 </context-param>

web工程进入到web.xml中扫描,发现有ContextLoaderListener类,监听器,那就说明有Spring组件了。
在找发现<context-param>标签中有classpath值,然后流程转到applicationContext.xml中去;
在beans标签下会加入数据源信息(数据库的配置信息)。

<!-- 加入数据源 -->
    <bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName"
            value="oracle.jdbc.driver.OracleDriver">
        </property>
        <property name="url"
            value="jdbc:oracle:thin:@localhost:1521:orcl">
        </property>
        <property name="username" value="empdb"></property>
        <property name="password" value="java"></property>
    </bean>

3.然后通过Ioc控制反转注入bean。实现了对象不用自己new
,Spring会帮你完成,交给他托管。

<!-- 注入JdbcTemplate类 -->
    <bean id="jdbctemp" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 注入dao类 -->
    <bean id="bdao" class="com.dao.BankDao">
        <property name="jtemp" ref="jdbctemp"></property>
    </bean>

SSH三大框架的原理和核心(转)的更多相关文章

  1. SSH三大框架整合案例

    SSH三大框架的整合   SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 ...

  2. SSH三大框架的整合

    SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 1.4 Hibernate ...

  3. ssh三大框架的认识

    一.SSH三大框架的概述 ssh为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架.  集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层 ...

  4. eclipse中SSH三大框架环境搭建<三>

    相关链接: eclipse中SSH三大框架环境搭建<一> eclipse中SSH三大框架环境搭建<二> 引言:通过上两篇文章我们已经可以掌握struts2和spring的环境的 ...

  5. eclipse中SSH三大框架环境搭建<二>

    通过上一篇博客我们可以轻松搭建strtus2的环境,接下来由我来继续介绍spring的环境搭建以及spring注入的简单使用 相关链接:eclipse中SSH三大k框架环境搭建<一> ec ...

  6. eclipse中SSH三大框架环境搭建<一>

    这里先简单介绍一下我用的三大框架版本以及下载地址 相关链接:eclipse中SSH三大框架环境搭建<二> eclipse中SSH三大框架环境搭建<三> struts-2.3.3 ...

  7. SSH三大框架合辑的搭建步骤

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  8. Maven SSH三大框架整合的加载流程

    <Maven精品教程视频\day02视频\03ssh配置文件加载过程.avi;> 此课程中讲 SSH三大框架整合的加载流程,还可以,初步接触的朋友可以听一听. < \day02视频\ ...

  9. SSH三大框架的知识题

    Struts 谈谈你对Struts的理解. 答: 1.struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是Act ...

随机推荐

  1. 提高delete效率方法

    1 open c_1;   loop     fetch c_1 bulk collect       into t2 limit 100000;     exit when c_1%notfound ...

  2. ODOO引用Echarts数据展示

    作为一个后端开发,首先想到的是将需要的数据进行处理反馈给前端. 具体如下: 然后就是专门的echarts模块(我这样写主要是因为echarts会用到的地方比较多,后续直接调用) 1. 2.echart ...

  3. 005_关于HTTP协议中的保持连接

    缘起 中午在群里讨论,用ab测试 一台只提供静态文件服务, 不与其他任何系统交互的时候,为什么也会产生大量的TIME WAIT状态的. 首先,我们可以简单的理解,在TCP连接的两端,谁主动断开连接(先 ...

  4. 基于Golang设计一套微服务架构[转]

      article- @嘟嘟噜- May/26/2018 18:35:30 如何基于Golang设计一套微服务架构 微服务(Microservices),这个近几年我们经常听到.那么现在市面上的的微服 ...

  5. Win7 x64 svn 服务器搭建

    SVN服务器搭建和使用   Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了 ...

  6. ie7 下 float换行问题与vertical-align:middle; 失效问题

    声明:web小白的笔记,欢迎大神指点!联系QQ:1522025433. ie7 下 float换行问题 请直接看代码中和代码中的注释: <!doctype html> <html&g ...

  7. 双倍浮向(双倍边距)(只有IE6出现)

    声明: web前端学习笔记,欢迎大神指点.联系QQ:1522025433. 描述:在IE6中,一个居左(或居右)浮动的元素放置进一个容器盒(box),并在浮动元素上使用了左边距(或右边距) 在ie6内 ...

  8. Lucene.Net简介

    说明:Lucene.Net 只是一个全文检索开发包 .查询数据的时候从Lucene.Net查询数据.可以看做是一个提供了全文检索功能的数据库. 注意:只能搜索文本字符串. 重要概念:分词,基于词库的分 ...

  9. 方法名太多,使用方法的重载(overload)来解决

    package chapter04; /* 问题:方法名太多了,不容易记忆,有时会出错 使用方法的重载(overload)来解决 */public class C09_Method { public ...

  10. windows系统下ruby开发环境的搭建方法

    ruby是一种简单快捷的面向对象的脚本语言,非常直观.下面说一下windows系统下ruby开发环境的搭建方法. 工具/原料 rubyinstaller.exe 方法/步骤 1 到如下网站去下载最新的 ...