SSH框架简介(struts2、spring、hibernate)

一、SSH三大框架的概述

  集成SSH框架的系统从职责上分为四层:表示层业务逻辑层数据持久层域模块层(实体层),以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序

  struts2:  

    1、什么是struts2:

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

 解析:客户端发送请求(HttpServletRequest)到服务器,服务器接收到请求就先进入web.xml配置文件看看有没有配置过滤器,发现有struts2的过滤器,然后就找到struts.xml配置文件,struts.xml配置文件里有定义一个action,然后就去找到类名叫IndexAction这个类(此action类必须是继承ActionSupport接口),并且实现了execute()方法,返回一个字符串为"success"给struts.xml配置文件,struts.xml配置文件的action会默认调用IndexAction类的execute()方法,result接收到了返回的字符串,然后查找结果字符串对应的(Result),result就会调用你指定的jsp页面将结果呈现,最后响应回给客户端。

struts2配置文件详解

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>

    <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
    <include file="struts-default.xml"></include>
    
    
    <!-- package提供了将多个Action组织为一个模块的方式
        package的名字必须是唯一的 package可以扩展 当一个package扩展自
        另一个package时该package会在本身配置的基础上加入扩展的package
        的配置 父package必须在子package前配置 
        name:package名称
        extends:继承的父package名称
        abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
        namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
     -->
    <package name="com.kay.struts2" extends="struts-default" namespace="/test">
        <interceptors>
            <!-- 定义拦截器 
                name:拦截器名称
                class:拦截器类路径
             -->
            <interceptor name="timer" class="com.kay.timer"></interceptor>
            <interceptor name="logger" class="com.kay.logger"></interceptor>
            <!-- 定义拦截器栈 -->
            <interceptor-stack name="mystack">
                <interceptor-ref name="timer"></interceptor-ref>
                <interceptor-ref name="logger"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        
        <!-- 定义默认的拦截器 每个Action都会自动引用
         如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
        <default-interceptor-ref name="mystack"></default-interceptor-ref>
        
        
        <!-- 全局results配置 -->
        <global-results>
            <result name="input">/error.jsp</result>
        </global-results>
        
        <!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
             name:action名称
             class: 对应的类的路径
             method: 调用Action中的方法名
        -->
        <action name="hello" class="com.kay.struts2.Action.LoginAction">
            <!-- 引用拦截器
                name:拦截器名称或拦截器栈名称
             -->
            <interceptor-ref name="timer"></interceptor-ref>
        
            <!-- 节点配置
                name : result名称 和Action中返回的值相同
                type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
             -->
         <result name="success" type="dispatcher">/talk.jsp</result>
         <!-- 参数设置 
             name:对应Action中的get/set方法 
         -->
         <param name="url">http://www.sina.com</param>
        </action>
    </package>
</struts>

spring:

   1、什么是spring?

      Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。       

         轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 
        控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
        面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
        容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
        框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

spring配置文件详解
<code class="language-html"><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
	<!-- 定义使用C3P0连接池的数据源 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 指定连接数据库的JDBC驱动 -->
		<property name="driverClass">
			<value>com.mysql.jdbc.Driver</value>
		</property>
		<!-- 连接数据库所用的URL -->
		<property name="jdbcUrl">
			<value>jdbc:mysql://localhost:3306/eportal?useUnicode=
				true&characterEncoding=gbk</value>
		</property>
		<!-- 连接数据库的用户名 -->
		<property name="user">
			<value>root</value>
		</property>
		<!-- 连接数据库的密码 -->
		<property name="password">
			<value>root</value>
		</property>
		<!-- 设置数据库连接池的最大连接数 -->
		<property name="maxPoolSize">
			<value>20</value>
		</property>
		<!-- 设置数据库连接池的最小连接数 -->
		<property name="minPoolSize">
			<value>2</value>
		</property>
		<!-- 设置数据库连接池的初始化连接数 -->
		<property name="initialPoolSize">
			<value>2</value>
		</property>
		<!-- 设置数据库连接池的连接的最大空闲时间,单位为秒 -->
		<property name="maxIdleTime">
			<value>20</value>
		</property>
	</bean>
	<!-- 定义Hibernate的SessionFactory -->
	<bean id="sessionFactory"
		class="org.springframework.orm.
hibernate3.LocalSessionFactoryBean">
		<!-- 依赖注入上面定义的数据源dataSource -->
		<property name="dataSource" ref="dataSource" />
		<!-- 注册Hibernate的ORM映射文件 -->
		<property name="mappingResources">
			<list>
				<value>com/eportal/ORM/News.hbm.xml</value>
				<value>com/eportal/ORM/Category.hbm.xml</value>
				<value>com/eportal/ORM/Memberlevel.hbm.xml</value>
				<value>com/eportal/ORM/Cart.hbm.xml</value>
				<value>com/eportal/ORM/Traffic.hbm.xml</value>
				<value>com/eportal/ORM/Newsrule.hbm.xml</value>
				<value>com/eportal/ORM/Merchandise.hbm.xml</value>
				<value>com/eportal/ORM/Admin.hbm.xml</value>
				<value>com/eportal/ORM/Orders.hbm.xml</value>
				<value>com/eportal/ORM/Cartselectedmer.hbm.xml</value>
				<value>com/eportal/ORM/Newscolumns.hbm.xml</value>
				<value>com/eportal/ORM/Member.hbm.xml</value>
			</list>
		</property>
		<!-- 设置Hibernate的相关属性 -->
		<property name="hibernateProperties">
			<props>
				<!-- 设置Hibernate的数据库方言 -->
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
				<!-- 设置Hibernate是否在控制台输出SQL语句,开发调试阶段通常设为true -->
				<prop key="show_sql">true</prop>
				<!-- 设置Hibernate一个提交批次中的最大SQL语句数 -->
				<prop key="hibernate.jdbc.batch_size">50</prop>
				<prop key="show_sql">50</prop>
			</props>
		</property>
	</bean>
	<!--定义Hibernate的事务管理器HibernateTransactionManager -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<!-- 依赖注入上面定义的sessionFactory -->
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<!--定义Spring的事务拦截器TransactionInterceptor -->
	<bean id="transactionInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<!-- 依赖注入上面定义的事务管理器transactionManager -->
		<property name="transactionManager" ref="transactionManager" />
		<!-- 定义需要进行事务拦截的方法及所采用的事务控制类型 -->
		<property name="transactionAttributes">
			<props>
				<!-- 以browse、list、load、get及is开头的所有方法采用只读型事务控制类型 -->
				<prop key="browse*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
				<!-- 所有方法均进行事务控制,如果当前没有事务,则新建一个事务 -->
				<prop key="*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>
	<!-- 定义BeanNameAutoProxyCreatorf进行Spring的事务处理 -->
	<bean
		class="org.springframework.aop.framework.autoproxy.  
BeanNameAutoProxyCreator">
		<!-- 针对指定的bean自动生成业务代理 -->
		<property name="beanNames">
			<list>
				<value>adminService</value>
				<value>columnsService</value>
				<value>newsService</value>
				<value>crawlService</value>
				<value>memberLevelService</value>
				<value>memberService</value>
				<value>categoryService</value>
				<value>merService</value>
				<value>cartService</value>
				<value>ordersService</value>
				<value>trafficService</value>
			</list>
		</property>
		<!-- 这个属性为true时,表示被代理的是目标类本身而不是目标类的接口 -->
		<property name="proxyTargetClass">
			<value>true</value>
		</property>
		<!-- 依赖注入上面定义的事务拦截器transactionInterceptor -->
		<property name="interceptorNames">
			<list>
				<value>transactionInterceptor</value>
			</list>
		</property>
	</bean>
	<!-- 装配通用数据库访问类BaseDAOImpl -->
	<bean id="dao" class="com.eportal.DAO.BaseDAOImpl">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<!-- 部署系统用户管理业务逻辑组件AdminServiceImpl -->
	<bean id="adminService" class="com.eportal.service.AdminServiceImpl">
		<property name="dao" ref="dao" />
	</bean>
	<!-- 部署新闻栏目管理业务逻辑组件ColumnsServiceImpl -->
	<bean id="columnsService" class="com.eportal.service.ColumnsServiceImpl">
		<property name="dao" ref="dao" />
	</bean>
	
	<!-- 部署订单管理业务逻辑组件OrderServiceImpl -->
	<bean id="ordersService" class="com.eportal.service.OrderServiceImpl">
		<property name="dao" ref="dao" />
	</bean>
	<!-- 部署流量统计业务逻辑组件TrafficServiceImpl -->
	<bean id="trafficService" class="com.eportal.service.TrafficServiceImpl">
		<property name="dao" ref="dao" />
	</bean>
	<!-- 部署Struts 2负责系统用户管理的控制器AdminAction -->
	<bean id="adminAction" class="com.eportal.struts.action.
AdminAction"
		scope="prototype">
		<property name="service" ref="adminService" />
	</bean>
	<!-- 部署Struts 2负责新闻栏目管理的控制器ColumnsAction -->
	<bean id="columnsAction" class="com.eportal.struts.action.
ColumnsAction"
		scope="prototype">
		<property name="service" ref="columnsService" />
	</bean>
	<!-- 部署Struts 2负责新闻管理的控制器NewsAction -->
	<bean id="newsAction" class="com.eportal.struts.action.
NewsAction"
		scope="prototype">
		<property name="service" ref="newsService" />
		<property name="columnsService" ref="columnsService" />
	</bean>
	<!-- 部署Struts 2负责新闻采集规则管理的控制器CrawlAction -->
	<bean id="crawlAction" class="com.eportal.struts.action.
CrawlAction"
		scope="prototype">
		<property name="service" ref="crawlService" />
		<property name="columnsService" ref="columnsService" />
	</bean>
	
</beans> 
</code>



hibernate:

   1、什么是hibernate?

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

        2、为什么使用Hibernate?

     1). 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

    2)、Hibernate是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作,将软件开发人员从大量相同的数据持久层相关编程工作中解放出来,使开发更对象化了。

    3)、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。

    4)、支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。

hibernate配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 连接数据库的信息 -->
        <!-- mysql驱动信息 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
        <!-- mysql数据库用户名 -->
        <property name="hibernate.connection.username">root</property>
        <!-- mysql数据库密码 -->
        <property name="hibernate.connection.password">root</property>

        <!-- 数据库的方言:根据底层的数据库生成不同的SQL -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 配置显示SQL -->
        <property name="hibernate.show_sql">true</property>
        <!-- 配置格式化SQL -->
        <property name="hibernate.format_sql">true</property>
        <!-- 配置hbm2ddl -->
        <property name="hibernate.hbm2ddl.auto">validate</property>

        <!-- 配置C3P0连接池 -->
        <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
        <!--在连接池中可用的数据库连接的最少数目 -->
        <property name="c3p0.min_size">5</property>
        <!--在连接池中所有数据库连接的最大数目  -->
        <property name="c3p0.max_size">20</property>
        <!--设定数据库连接的过期时间,以秒为单位,
        如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
        <property name="c3p0.timeout">120</property>
         <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
        <property name="c3p0.idle_test_period">3000</property>

        <!-- 加载映射文件 -->
        <mapping resource="com/weiwei/hibernate/domain/Customer.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值