TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。* T: z' s ?2 M' n
$ a) v& i% Q6 a3 K( l集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。
/ w- M6 K& c! d% l& n# H* J4 d8 X2 |! q' u+ o. R
Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持。Spring一方面作为一个轻量级的IoC容器,负责查找、定位、创建和管理对象及对象之间的依赖关系,另一方面能使Struts和Hibernate更好地工作。' S) q' L4 H' J* t% W0 h
* O4 v+ S* x3 r1 F2 S
项目分层结构:action、 service、dao 4 J9 e6 K& f- f) \( ?/ L
项目配置自定义异常错误实现、重写拦截器对用户进行拦截判断、使用过滤器 统一设置字符集。
8 J' f/ ?% T# q3 `) n7 h \: `
& T8 n: T3 `3 t5 C9 d# Z% T6 B功能实现:基本的登陆、失败或者成功的跳转以及登陆成功后用户数据的新增操作。数据库表自建。; J# ]4 E( A$ y) q$ {8 E: t/ K8 M
: G& ]: i0 t! T$ G' _' ]
applicationContext-common.xml:
+ Y* M6 }- W( \5 d: |
|8 \. z I% F- <?xml version="1.0" encoding="UTF-8"?> k I* i1 J @, p. g* V$ L
- <beans xmlns="http://www.springframework.org/schema/beans"
! e. T3 u" f1 t4 j% n; m$ X - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"+ r, r" x& T0 |/ X F( {
- xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"+ o0 e7 T- w7 }2 c- S
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
. ^& T+ H0 x, L2 S% D5 m% l - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
4 H0 G z9 ~$ X2 y$ r4 R. H - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
9 z$ c: D" X) u# d - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> \- V- i; N+ {$ a: _- P- I4 H
4 z8 a( x( h7 E& v, e$ n- <!-- 启用spring注解支持 -->
8 y9 ^2 Z3 i4 W& W - <context:annotation-config />
# g* R4 {; r3 z& m9 }" `* N1 H& s
. `/ g- i f: q7 u) s9 C! u- <!--配数据源 -->
; i6 h8 [9 A& s/ p - <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
% s7 a2 }' ]! p9 i3 F4 [ - destroy-method="close">
. H: c9 G0 ~/ t9 |5 }' Q3 s - <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />; N/ \! w% g3 z$ _' N
- <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
: |& H0 J: Q j1 p9 f0 R" g - <property name="username" value="ssh" />1 K. o" {9 D" i" T0 q
- <property name="password" value="ssh" />! b% X9 H0 q2 E6 O0 }
- </bean>
7 u' W @! T1 n4 ]8 y* Q9 T - - L5 h+ O) O9 s, f
- <bean id="sessionFactory"
. q1 P1 t C8 O& t- H - class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">8 Y% h; W) `& A+ U
- <property name="dataSource" ref="dataSource" /> D; f4 Q4 s+ a- E9 {' h
- ; e5 A7 e) f% ]! G6 M9 c2 i
- <property name="hibernateProperties">) n# L" e9 [& l. j' U! r, X1 v* V
- <props>) H: F3 g2 H7 c6 E7 ~6 W; f- Z+ b
- <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop># y% j9 X& F1 y3 i& S% B
- <prop key="hibernate.show_sql">true</prop>+ L5 X3 y6 h3 r7 \/ a& B
- <prop key="hibernate.hbm2ddl.auto">update</prop>
! v8 m/ ?% [- q w% S& i - <prop key="default_schema">ssh</prop>* q3 A6 @6 f1 G% R
- $ D; @8 D4 Z' E, ^0 t; H
- </props>7 E% e1 C* w/ S# P2 y Z8 U
- </property>
- l1 v3 {3 C9 P2 C" d' e - <!-- 如果使用配置文件 -->
' ~1 S% H0 e1 f2 o8 k - <!-- <property name="mappingLocations"> <list> <value>classpath:com/jialin/entity/User.hbm.xml</value>
8 z" m8 d; T& F( V0 ]" ?5 d9 T/ u - </list> </property> -->1 H1 J* E2 T0 w3 K- S" e! Y
- <property name="annotatedClasses">
/ ~$ B; ^3 Y3 Y5 V; b+ _- E7 S" K4 t6 P - <list>. _9 ^; X* Q2 u8 j& ]
- <value>com.jialin.entity.User</value>
4 Z* P) r f6 ] - </list>
! U8 i; o* u; J$ [5 F - </property>4 K2 j6 t7 s) W; N8 G+ _ [
; W/ t) T6 ~+ i' R9 k- </bean>
9 @- E3 p5 V) W; m. Y -
* k/ g8 A/ |; k, p% }& r( e+ P. Z" J
& f2 m# Z2 }2 l8 y, Q! h! x- <!-- 配置事务管理器 -->
; ~' K4 v' Q6 b& y& Z1 O - <bean id="transactionManager"
* G8 `/ {" y, b& G" X' e - class="org.springframework.orm.hibernate4.HibernateTransactionManager">) W7 q7 I# k) {- H: y( n b$ c3 Z& `
- <property name="sessionFactory" ref="sessionFactory" />
* y4 E! E: @6 t5 k2 Q9 r - </bean>
4 }& V; e6 V2 N) J% p- `: Y
* _0 e) z' A/ Z) _. ^7 a/ {- <!-- 事务的传播特性 -->
1 |' o- w' p- u, x$ P - <tx:advice id="txadvice" transaction-manager="transactionManager">8 m7 S! `1 a+ m. i6 ]
- <tx:attributes>
3 {" g' K. ]) n& D, X0 N6 P/ ?# w - <tx:method name="add*" propagation="REQUIRED" />: n; ~3 X6 V' _" _: B* n
- <tx:method name="delete*" propagation="REQUIRED" />+ l8 B5 O! k, A8 a
- <tx:method name="modify*" propagation="REQUIRED" />: H! d# T, i: M5 I* O6 \
-
8 x' w+ G2 m$ y3 C) f - <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->+ O# ]" w; m B2 \0 B B
- <tx:method name="*" propagation="REQUIRED" read-only="true" /> Q+ \! ^% B) i* Z* y% }
- </tx:attributes>
* D$ \! l( S6 r) l - </tx:advice>, l1 I" s' _5 M8 f
- 1 B2 {& j+ t' ] g, \
- <!-- 那些类那些方法使用事务 -->
, H" S" S S* O' Q - <aop:config>' u" k2 `( H) K1 v2 H/ p
- <!-- 只对业务逻辑层实施事务 -->
$ Y6 c$ H$ J& j - <aop:pointcut id="allManagerMethod"
5 O" E9 m4 l1 m! N, |8 M - expression="execution(* com.jialin.service.*.*(..))" />
% r5 ~, r( F* d. Y% f - <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txadvice" />
1 `" V# y U& Y; h5 c - </aop:config>4 q& Y" d+ C6 h8 p) C. _" s, V
- ' O& d0 q7 B. v! R n' {
- * W& n1 j+ d1 b/ r3 X
- </beans>
' F/ l) w D" ?& V( }. ]" l
复制代码
7 c8 {; Z( n I) l8 H
/ |% J4 z4 X1 g$ K6 |3 e* y- s
struts2+spring+hibernate整合案例代码
0 Y! V' b' g2 s5 Z( Y M% S6 b6 m% m5 _
* S- x G) ]; m& ~# W; S
|
|