TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。
! }3 [2 B4 `# [& ?
1 S6 ?3 }2 z4 h3 ^" ^. ~集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。, R. ?4 s. b# o# W' k" `4 n( H, p
! H1 F: i7 G- o' ]Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持。Spring一方面作为一个轻量级的IoC容器,负责查找、定位、创建和管理对象及对象之间的依赖关系,另一方面能使Struts和Hibernate更好地工作。
; a' Z A: X2 ?, a( z1 i) N" Z! |+ Y9 {+ X# k- K) k7 f
项目分层结构:action、 service、dao * }# \' \3 O$ R+ x" z
项目配置自定义异常错误实现、重写拦截器对用户进行拦截判断、使用过滤器 统一设置字符集。. A ^9 c- V% n2 c+ O! Q: ]
' k. ]; c# k" I- W
功能实现:基本的登陆、失败或者成功的跳转以及登陆成功后用户数据的新增操作。数据库表自建。7 _, c/ u9 l8 p* A+ S8 o7 S u
( \. B& Q, |7 E7 O$ @5 b! M+ o7 ^applicationContext-common.xml:; _; J9 D8 ?1 X/ N& G
! V- V1 Q! m% f9 P- <?xml version="1.0" encoding="UTF-8"?> Z! d' @* ~9 }8 g& J
- <beans xmlns="http://www.springframework.org/schema/beans"% D7 y" w, T" Q+ ^
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"! n* a1 X/ s2 E: ^
- xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
, I9 `. a% Q+ z: p* J - xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
' ^! `4 x: O: M - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd; ^1 x+ L* K$ W, B9 T
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd3 C, f+ b# t# l0 u
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
' B. j/ p2 W7 v4 X/ m$ a% I
5 c6 m% D% h. t' Z- <!-- 启用spring注解支持 -->
# [% B1 _$ _4 Q! C; Y - <context:annotation-config />
- k$ q3 g' D h0 D. Y5 _ - " a( Y- f" `% [; E: ]
- <!--配数据源 -->
: T8 P# W" v* a0 L) e) ` - <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"- B* P4 x$ X' R9 n! R' d
- destroy-method="close">6 K$ T7 S2 m" P1 z* _- Z
- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />- Z* p9 f1 B0 x
- <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />& w6 A) w9 ^( A) A/ p
- <property name="username" value="ssh" />
1 q7 t5 ]8 N3 U+ r1 L$ ]8 i - <property name="password" value="ssh" />2 o" a/ I0 [$ I, U
- </bean>
! S- w' W+ w( R1 h6 Y - + C( f6 m; O8 C$ @
- <bean id="sessionFactory"+ |: `7 E) S' v0 k6 {3 @
- class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
9 [' c- V0 ^" Q3 O, H3 N9 M% @ - <property name="dataSource" ref="dataSource" />8 s; ]: C) z0 v* A2 \8 p. b& y0 J9 r
6 d" Y/ _1 G; K) B& h" u" a- <property name="hibernateProperties">" T, Q x7 k* n6 ?2 b
- <props>
) _! f5 P4 [! h9 A - <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>, v4 I9 M1 |' k' F* w3 I$ w
- <prop key="hibernate.show_sql">true</prop>
. s& R, o7 F- S+ }) h - <prop key="hibernate.hbm2ddl.auto">update</prop>
( j" J( K8 V* p+ e' I - <prop key="default_schema">ssh</prop>: z1 ^) _" ?4 f5 b' H% Z" u
- - h) Z3 H7 \* {
- </props>
4 u* B- F- B" z4 ^+ u4 i; m3 V - </property>8 b6 Y5 ]7 q* ^. T. I' @( J
- <!-- 如果使用配置文件 -->8 h5 j4 }$ u& Z# [3 R. S
- <!-- <property name="mappingLocations"> <list> <value>classpath:com/jialin/entity/User.hbm.xml</value> 2 X" {) Y% M2 E6 z$ p5 m
- </list> </property> -->
" R9 ]- U. G# O - <property name="annotatedClasses">
5 o! }7 ^0 X: M* C6 E# {# m$ T - <list>' C7 s7 S0 Y7 c5 V
- <value>com.jialin.entity.User</value>
7 _, \* F, H3 |% W2 _% c$ l( F- Y - </list>
" k) k. _% Y! E7 \ - </property>
6 l; W8 e- g2 @: g4 b - ; a& X: i! P& F9 ?
- </bean>, O& i& S3 G* y1 _
-
. J, S9 y$ c& v6 F7 F# j7 K
9 a0 H2 K: {, s' v! w- U- <!-- 配置事务管理器 -->( a" O& u: x1 U3 ?; v" Y; u7 C. Z8 u
- <bean id="transactionManager"
" k, D$ S) z; \: h, J; ? - class="org.springframework.orm.hibernate4.HibernateTransactionManager">
; ]1 z+ Y0 u% @) g5 ? - <property name="sessionFactory" ref="sessionFactory" />
' a8 C' Q' J, q# G. f2 L7 g$ u9 A. J - </bean>
+ y: X/ i; S* b/ }5 G: @0 z Z: Z
3 }" @3 F# t; e4 h( w- <!-- 事务的传播特性 -->
& s: Q# _ [% U8 w% q4 Q7 D) s7 z - <tx:advice id="txadvice" transaction-manager="transactionManager"># X; [* n# V$ P
- <tx:attributes>& r) y0 B' I) |
- <tx:method name="add*" propagation="REQUIRED" />
( H+ | t1 J0 f% @ - <tx:method name="delete*" propagation="REQUIRED" />: H3 W! g' f3 X5 s4 q8 m( W# h
- <tx:method name="modify*" propagation="REQUIRED" />3 n3 j/ n" T& Y9 h$ ?/ w
-
) D4 m( `4 d4 D- n* m/ j - <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->0 V9 L7 V% C5 J* H! `' }
- <tx:method name="*" propagation="REQUIRED" read-only="true" />
/ @! n9 @: k7 l( ]( X. Q( L% z - </tx:attributes>& W0 m! \: X" D z, a
- </tx:advice>2 ?2 I# e+ W! Z: T1 D) F6 d
# t4 l0 c# V8 \2 S5 S- <!-- 那些类那些方法使用事务 -->
# {7 k# B* w6 n1 a! |$ h - <aop:config>1 h: A( |6 @' ]% X& U6 s
- <!-- 只对业务逻辑层实施事务 -->) k1 m% E' y* M% x8 ^
- <aop:pointcut id="allManagerMethod": W0 X5 r8 \! q
- expression="execution(* com.jialin.service.*.*(..))" />
3 D9 s$ Q7 b" H! F; |( V - <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txadvice" />1 @) ~' K* a& p* |
- </aop:config>
3 M! `9 v( d1 u+ h) `+ l
. ^1 _$ ~5 N9 Y- ! `/ m, q: ^) g
- </beans>; L+ E7 i& f) u6 k! T; K- `7 {6 @
复制代码
+ ?" G+ ], }! q* ?3 r1 J, V6 N
* J4 ^, R* V' D0 }& H
struts2+spring+hibernate整合案例代码
# M8 s; ]% t3 x* z( h3 n
% D7 Q5 q' C* _# J. |2 D, j& u* [* M; c
|
|