TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。( v6 }) G' J( p% N, c
( L8 E0 g' u; x' V: \
集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。4 x7 Q( W7 X8 s+ Y8 p- I6 `
" u! I H' W. L/ N
Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持。Spring一方面作为一个轻量级的IoC容器,负责查找、定位、创建和管理对象及对象之间的依赖关系,另一方面能使Struts和Hibernate更好地工作。
. `& c+ x9 o) a' c) s r* l
# x( `3 I" [! S C1 g; }3 B# Z* d项目分层结构:action、 service、dao
0 j: g$ V; x+ i3 y$ ?. x: t6 w项目配置自定义异常错误实现、重写拦截器对用户进行拦截判断、使用过滤器 统一设置字符集。
: M$ j, S; N3 ^# _
2 y! S- {% F, P/ F: s/ m9 v, B) x- F: B$ A功能实现:基本的登陆、失败或者成功的跳转以及登陆成功后用户数据的新增操作。数据库表自建。
2 ?1 i7 `* e- }8 f" N; f4 m0 Z+ i [( X
applicationContext-common.xml:
, E( L3 Y! k7 d4 k& i6 Y) p7 o3 ^7 S2 f9 d2 y* h# _. a
- <?xml version="1.0" encoding="UTF-8"?>
6 ~+ k* ?$ g- @2 ] - <beans xmlns="http://www.springframework.org/schema/beans": W& ~8 q* d2 l4 d0 n
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"4 K* t3 e8 J" G1 d$ O4 z+ i
- xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
" G3 W' ^7 L4 I) d! U) ^) I - xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
. \ n+ p, K/ T% I; P$ z - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
' x) m+ x' _$ _) ^% ]5 P) t - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd2 N: C5 z. {. N4 |: T- J; E' \
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">* q9 A' O4 [0 ?3 [% C
- ! h" e7 n; U- U# Q; w& m; F8 L
- <!-- 启用spring注解支持 --># h6 Y+ Y4 a& L( ]# F/ m) v
- <context:annotation-config />
4 U7 p; Y5 E0 K6 r% S, {* C8 K - & v" x; t* N% y6 H+ Y
- <!--配数据源 -->
! t# ^; A: h6 e& r- @+ [1 ]) k! J - <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
1 ^2 v, x* j$ @) X4 q6 M; H: D - destroy-method="close">
+ i2 ~' B- Z, F+ E( [ - <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />& f; v/ ]9 n/ x$ c
- <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />2 k& P" w" T6 s" a% D
- <property name="username" value="ssh" />
* r9 R* W; N$ D6 \& M8 | - <property name="password" value="ssh" />
3 i* P; w& r) R4 d6 W$ Z* o - </bean>
/ G2 z0 T1 ?, u! [$ H7 s
' X; V& Y1 n. {# q- <bean id="sessionFactory"
, A; v% T+ f. H6 c' S+ F( ] - class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
; g9 i+ `9 o1 ?9 ]) n0 v# y/ K( W - <property name="dataSource" ref="dataSource" />
7 s, P% C% E+ @1 q: @4 E4 F - 0 n1 d/ E2 R! {* L# x3 Y
- <property name="hibernateProperties">
; l* d. J( N7 b3 k( D; \ - <props>
" Y# Q! N; o7 F9 @0 l - <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
+ R: ^" i4 V6 a. w% k) s' _3 U - <prop key="hibernate.show_sql">true</prop>* B' O0 y% r c# ~. e& j
- <prop key="hibernate.hbm2ddl.auto">update</prop>
- y) V4 J* Y! H; x - <prop key="default_schema">ssh</prop>3 ]/ ]& h. ~: g: z. ]
- / f* I% l7 A- t& v
- </props>
& ?& A1 t- Q) s3 A' ` - </property>
1 q/ T$ @5 E5 L4 l9 K5 |, B' u - <!-- 如果使用配置文件 -->8 Z+ _2 {0 a! ?* \1 J
- <!-- <property name="mappingLocations"> <list> <value>classpath:com/jialin/entity/User.hbm.xml</value>
% M* `) y) N/ q4 n9 s; @; | - </list> </property> -->* ?' c ~- E4 T& t. x* x3 U
- <property name="annotatedClasses">* Y$ l# i6 D& Y& h8 M& M! b
- <list>
1 Y5 @+ A% m! q% |" w1 {8 q - <value>com.jialin.entity.User</value>+ m8 |; q, q/ k ~. E6 }
- </list>( \, i0 h5 h7 K# z3 B9 G4 v4 G4 J
- </property>
0 H: M0 F1 }, }7 ~) z
. w* M/ X( X+ I% J4 R6 z6 q- </bean>
% ]/ Z, j% y- k' p# t3 D4 J -
# v9 j" S( J4 S6 u/ s" c
4 h! Y0 ]1 F8 N- <!-- 配置事务管理器 -->: n) W2 o/ S( Y9 X
- <bean id="transactionManager"* k# W/ P$ a- i" K. i2 j" _ i6 m4 O
- class="org.springframework.orm.hibernate4.HibernateTransactionManager">
) l( }2 v3 h' P - <property name="sessionFactory" ref="sessionFactory" />: M2 n7 L6 u7 O' c
- </bean>" g: @5 N' q8 N. `; ^; o. R
- 1 p( b+ @, z+ o u% ^
- <!-- 事务的传播特性 -->
# L; K, J+ Y' T8 h. A - <tx:advice id="txadvice" transaction-manager="transactionManager">8 K& d! R2 w$ D. Q6 R! K& w6 O
- <tx:attributes>8 |$ Z3 G! r) u; a
- <tx:method name="add*" propagation="REQUIRED" />
4 H0 i. `1 s' B% Z3 h( k* p - <tx:method name="delete*" propagation="REQUIRED" />7 O1 F! g2 u) M
- <tx:method name="modify*" propagation="REQUIRED" />
* R/ p' X! |! b# Q( z+ } - 7 }8 Z% _6 }- _
- <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->
# _$ p% r) U! e; ` - <tx:method name="*" propagation="REQUIRED" read-only="true" />
1 s0 S6 n0 H# X6 Q( H) K- ?( f - </tx:attributes>9 f; J; \4 H% L' _9 a" O4 ?
- </tx:advice>% I+ N7 p$ E" `/ C) v x
1 K! \# ]7 ~6 a/ G+ h5 M( g- <!-- 那些类那些方法使用事务 -->
2 d1 Z3 {# b+ C8 z4 p( S! _" q - <aop:config>
; B, D3 H+ Q7 a# c/ W' _ - <!-- 只对业务逻辑层实施事务 -->
# C9 v& x& n. H" X: ]3 q) m) x- u - <aop:pointcut id="allManagerMethod"- `% t: q. h- L3 t
- expression="execution(* com.jialin.service.*.*(..))" />$ B& r% O# d% q' k
- <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txadvice" />
( k' z5 v. J5 N( S; y6 ]2 R - </aop:config>9 a! _) U! K- B' o: Z( u3 p
- - c% r6 e( }6 Z6 K, B3 [& a
- 2 J; |& h1 Y) D) b/ \4 N7 L2 V
- </beans># I+ H2 d) o6 S& n0 _: E' ^
复制代码
8 r% M6 q- I. F: ~& A: K: B
/ A% U8 m/ ]4 U! ?6 d% z1 z/ pstruts2+spring+hibernate整合案例代码 ^0 }+ \" U9 j- Q5 C
# B6 n3 o' ?9 o0 N# k! u; m& y
9 x: m/ ^5 k% @. W |
|