TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。
/ e( k" M4 q3 V% H0 t( h2 ~* P7 }( I7 @
集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。. C, F9 ~7 c L0 d
: [0 z9 ~) Y' k, BStruts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持。Spring一方面作为一个轻量级的IoC容器,负责查找、定位、创建和管理对象及对象之间的依赖关系,另一方面能使Struts和Hibernate更好地工作。& i/ t9 u- w$ }3 F) f9 k: l8 d
8 [. c/ g- i: Q! f" P" k; q+ {
项目分层结构:action、 service、dao 4 o. @, a2 Y, S. X9 q
项目配置自定义异常错误实现、重写拦截器对用户进行拦截判断、使用过滤器 统一设置字符集。
9 i* }" {( B$ g. w* U. Y( o
1 O/ o7 k3 ]. V# _; [9 I功能实现:基本的登陆、失败或者成功的跳转以及登陆成功后用户数据的新增操作。数据库表自建。: S) ^9 u4 ?3 X. F: P
( s5 V. T4 u" h+ H8 JapplicationContext-common.xml:" N7 L9 d, A- R! d; L5 N
' m* {5 {0 N8 v- O1 _2 U- <?xml version="1.0" encoding="UTF-8"?>+ ^0 a3 _4 d8 k& X: V
- <beans xmlns="http://www.springframework.org/schema/beans"% h8 i2 v2 R. K5 R0 m& l
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"& x h) J2 C. q+ x9 ], h: h
- xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"0 j" W3 L) `2 L1 `' s, i+ f, D
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
* z- ~# Q/ b- U% P! H* Y - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd) ~* X2 ]$ ^7 p; X& A Q
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
( u% O4 q5 X. D3 C* G ~( Q" I9 Q% t - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">! p! }9 X6 m# z( Q5 {# Z/ {
1 b9 _1 J4 [2 T) \, W; v) g- <!-- 启用spring注解支持 -->
' P; G0 D' `2 d: p/ q - <context:annotation-config />: ]% H( I5 n6 z: j. V/ o
" _8 l! O. w2 D9 j- <!--配数据源 -->$ l e9 v& R P4 H: h# v5 U
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"5 V4 \+ M s6 w9 P$ o; | i
- destroy-method="close">
3 D+ O8 l9 f& _ - <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
' R% {1 X: O8 Q% l/ S - <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />$ i5 L" ?/ b; W: z0 D, d6 v
- <property name="username" value="ssh" />6 \- K( w' J7 N# _2 o# ?3 n+ S: I
- <property name="password" value="ssh" />
6 X% U% M/ O% O1 u5 _, b2 w c) B - </bean>& J+ G' x" H( e! u! P
6 u- y1 k% P% O! z2 B- <bean id="sessionFactory"1 e6 \1 a+ u: [* c$ h
- class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
! Q8 [. N- v5 T5 C3 f* H - <property name="dataSource" ref="dataSource" />
2 ?; ^2 N& w3 G7 g1 n* Z7 L - ; r; m( e; A7 L8 [, G- f
- <property name="hibernateProperties">
' Z. u6 U) c, ~/ @0 [ - <props>
) k! F r, p0 C5 T( q - <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
) R1 z4 }# b6 Y j' X! z. D% t - <prop key="hibernate.show_sql">true</prop>. ~* u8 [+ |+ U% \( h P3 R
- <prop key="hibernate.hbm2ddl.auto">update</prop> e+ j6 |, P, s; J( w2 c8 G. w, d
- <prop key="default_schema">ssh</prop>
/ [8 {) v. R2 C4 k8 n4 v
! J4 F# ]8 }- J4 G- </props>
, M! q! j( ~* a5 ~+ J; m. R6 R - </property>
9 J+ j3 d# O# p p9 \2 h - <!-- 如果使用配置文件 -->
2 ]2 r; F- e+ \3 A, y - <!-- <property name="mappingLocations"> <list> <value>classpath:com/jialin/entity/User.hbm.xml</value> " ]7 ~ ^6 O" p" f3 ^+ f" Q' S5 G
- </list> </property> -->
2 E% y |: E) M, j" L6 w - <property name="annotatedClasses">: J8 `" f& X4 b/ s
- <list>: ^4 i7 @2 q/ X- q
- <value>com.jialin.entity.User</value># ^% L3 K- j9 X% t. W- ?! Q. g7 b
- </list>
- G$ V5 K5 C1 E) I - </property> _2 T$ Z2 w9 T- V+ v, F
! _/ [# K+ Z4 Y- </bean>
# ?9 Y" _7 c' i* P# g- o - * o. O* J. ~+ r [
- 3 E3 U. }% l: t( p. B! W
- <!-- 配置事务管理器 -->1 q( v; F: n R& o& Z2 Q1 o
- <bean id="transactionManager"
, F9 a" X+ o) s! L; b' U - class="org.springframework.orm.hibernate4.HibernateTransactionManager">9 c/ H. j5 b$ d7 b
- <property name="sessionFactory" ref="sessionFactory" />$ m& {* D; n* d3 c4 N$ R4 ?3 z! @
- </bean>
, c3 \4 a9 W7 g0 k9 e - 3 ^& @) \8 T b
- <!-- 事务的传播特性 -->8 q' e# S$ ^/ F0 ^4 k8 s! @
- <tx:advice id="txadvice" transaction-manager="transactionManager">
- Q* ]- z w4 j" D1 c - <tx:attributes>( S" o7 Z" k6 C- v/ d E1 t
- <tx:method name="add*" propagation="REQUIRED" />% }3 B% G, i) k/ q- q3 [9 n7 E
- <tx:method name="delete*" propagation="REQUIRED" />* c z, a, z7 ~
- <tx:method name="modify*" propagation="REQUIRED" />6 Z! F* A' n2 W
- ' v; Q \& m" x/ T7 C
- <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->" n% C/ S5 X( y+ y
- <tx:method name="*" propagation="REQUIRED" read-only="true" />
! @3 X6 f' m) z9 u; G, B - </tx:attributes>% u7 U- L' B! \! Q @: ]( z
- </tx:advice>
) m) G& e& E. o, }* I$ N+ h" d
& G1 W7 A* e# v3 F$ P" m6 D- <!-- 那些类那些方法使用事务 -->
# x" ^4 o. `9 T( W8 ^1 G - <aop:config>
0 n! g7 e0 s1 u6 i0 f: X - <!-- 只对业务逻辑层实施事务 -->' L" Q. h' p: F" c$ T
- <aop:pointcut id="allManagerMethod"
7 F- x) q, O8 q& y4 d+ S# n7 Z4 A - expression="execution(* com.jialin.service.*.*(..))" />
M6 S& ~% V3 ~* H- Z) \ - <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txadvice" />- [$ X4 x7 e9 F3 H3 W
- </aop:config>
" t) M/ _$ p |5 D0 s# y
2 c* D* R3 M% C! E" l/ y- 6 B0 K) _/ b' d! F2 @/ g* Z
- </beans>8 X0 S: n8 V2 }% U7 C! H
复制代码
$ B1 I- m* V( N- m
9 y* ^0 q7 t$ K5 h+ O0 Y8 U
struts2+spring+hibernate整合案例代码
; B6 i6 ^* h6 c. [3 f' m; u. c+ H" L' ? C' p5 B
" V7 w0 j; O: S6 Q2 j% ]
|
|