一.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. eclipse 反编译

    Eclipse Class Decompiler安装此插件,可以编译源代码且调试

  2. IIS8.5 运行WCF

    背景 这是一个项目给其它项目提供接口,其实现在哪有用WCF的了,都是restful.不过.net在这方面还是不错,比java强些,java竟然很多采用自己解析xml方式来做Web服务.难以理解. 但是 ...

  3. adb启动和停止android app方法

    一.启动app adb shell am start  包名/MainActivity 上面涉及到的包名及mainactivity获取办法 方法一: 1.adb shell 2.dumpsys act ...

  4. rsa加密解密, 非对称加密

    2016年3月17日 17:21:08 星期四 现在越来越懒了.... 参考: http://www.xuebuyuan.com/1399981.html 左边是加密流程, 右边是解密流程 呃...有 ...

  5. 转载:gc的概念,如果A和B对象循环引用,是否可以被GC?

    原文:https://www.cnblogs.com/zhchoutai/p/6784929.html ①首先说一下,GC里边在JVM其中是使用的ROOT算法,ROOT算法,什么称作为ROOT呢,就是 ...

  6. 转载:configure生成的文件(1.5.3)《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19620.html 当configure执行成功时会生成objs目录,并在该目录下产生以下目录和文件:|---ngx_auto_hea ...

  7. (转)eclipse 创建maven web项目

    1.新建Maven项目 1.1 File -> New -> Other 1.2 选择Maven Project ,单击Next 1.3 保持默认即可,单击Next 1.4 选择Arche ...

  8. Android 动画:你真的会使用插值器与估值器吗?

    目录   目录 1. 插值器(Interpolator) 1.1 简介 定义:一个接口 作用:设置 属性值 从初始值过渡到结束值 的变化规律 如匀速.加速 & 减速 等等 即确定了 动画效果变 ...

  9. spring-boot 多线程

    //配置类 package test; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import ...

  10. Python 3 官方文档学习(1)

    本文系官方文档翻译之作,不当之处,敬请原谅! range()函数 如果需要遍历一个数字序列,可以使用内置的range函数.该函数会生成等差序列. 1 2 3 range(5)# 范围[0, 5) ra ...