TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。( ] W: ~" j) R$ m+ @& x$ M$ ~
) m2 d6 a# u% w
集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。2 \9 t f$ F! Y- a
5 d) m3 x% l8 U4 ]! p2 h
Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持。Spring一方面作为一个轻量级的IoC容器,负责查找、定位、创建和管理对象及对象之间的依赖关系,另一方面能使Struts和Hibernate更好地工作。
3 Y$ q# ~% a% G" y ~" j: L' d- i$ j/ z; T( _0 t2 s
项目分层结构:action、 service、dao 5 D( u2 {) X7 [9 P# X$ S1 T0 Q
项目配置自定义异常错误实现、重写拦截器对用户进行拦截判断、使用过滤器 统一设置字符集。
4 G% k- j( X: Q/ H
0 B4 W2 R( h/ a7 x功能实现:基本的登陆、失败或者成功的跳转以及登陆成功后用户数据的新增操作。数据库表自建。
" O8 e) ~- D) s2 @
& L+ U/ m C! p1 a: E* m( }8 UapplicationContext-common.xml:
. `$ n" ?+ z7 \+ _$ @# ?) A1 v- t" D0 c L/ g% c
- <?xml version="1.0" encoding="UTF-8"?>
4 r" b! @2 { z, O" D - <beans xmlns="http://www.springframework.org/schema/beans"
0 O1 R9 F# x# @. k - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"" C8 d+ x! S7 V7 }
- xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
3 w9 S7 F. t8 d% ~ - xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
7 X9 m: L% g& } - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd1 m/ l& p+ R% [: g: E( ] R: Z& k
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
: y* H4 A; h7 U3 z7 G8 |. x) @" z - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
$ J3 k5 |) ^, e, C9 x7 R" i
# {; o! Q _0 e7 m2 h+ x K/ ?- <!-- 启用spring注解支持 -->5 F$ A8 M8 L, {% K* b4 M
- <context:annotation-config />: [- k* C6 P: b9 Z; F; l
- 9 _3 D6 ?' K5 d( X
- <!--配数据源 -->
! N- E0 e, \: g+ c } - <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"4 l8 N/ W8 b6 J: i
- destroy-method="close">
W% c; O) Z) G. C - <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
# f& f' ~. _# X& H$ R - <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />* e+ r. v. F- B# d; X1 C* f
- <property name="username" value="ssh" />
: m' h$ C, ~& R; j( @ - <property name="password" value="ssh" />3 C( H* T0 ~4 s P
- </bean>
9 q+ Y" P9 G. c' {( t$ C - & K, n) R( o, l1 E# q7 Z! z: _, C! @
- <bean id="sessionFactory"
# _; K$ b% D2 F/ j/ c - class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">0 N4 T# Q+ u5 Q3 A% l6 J
- <property name="dataSource" ref="dataSource" />! F U, L( |1 Y+ u% e
- ~, Q( `% s- R! X; k- <property name="hibernateProperties">* C+ W; w+ j3 D2 U6 L
- <props>
6 t5 r8 x5 J( s0 S% ~& f - <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>8 G" ?" j6 H; f' m( q3 v' K2 I
- <prop key="hibernate.show_sql">true</prop>
% K9 g+ a8 i# E" d - <prop key="hibernate.hbm2ddl.auto">update</prop>7 W% I( f! ]( I! p z5 F2 E& W N
- <prop key="default_schema">ssh</prop>& \0 _; e* Y O2 I* A7 F: U
- . {9 Y, m+ N* o! i, n) |1 ~. i' x
- </props>( W( J, ?7 j' x) S# v
- </property>
4 M- B/ U4 L& b8 R. a$ W - <!-- 如果使用配置文件 -->- }& M5 F) R9 K
- <!-- <property name="mappingLocations"> <list> <value>classpath:com/jialin/entity/User.hbm.xml</value> ; u% h# f' {1 T' p. O# k. d
- </list> </property> -->
1 E' p$ }" w4 T3 y - <property name="annotatedClasses">3 p7 c8 ~2 e, T8 X
- <list># M, ` b( J& O+ E$ m
- <value>com.jialin.entity.User</value>
/ A$ d# a0 H$ ?! m - </list>
4 \0 a3 A8 h6 P( G; a - </property>
! r+ P0 a. y1 r ?% s# h1 N
+ d+ a* x( H8 O- V9 W2 ` G1 f- </bean>
0 K; D" |0 A( d: u, i - 2 V3 _5 Z8 ^3 r0 d# C7 @0 z) h; J. A
- , o: O$ k* s" Q8 X) u/ Z v1 r* @. v
- <!-- 配置事务管理器 -->2 P- W& G9 ]5 ]: k3 R& ]; ^2 d" L! E
- <bean id="transactionManager"! p) `2 L& b8 O- _7 X6 _8 H" q9 b
- class="org.springframework.orm.hibernate4.HibernateTransactionManager">
4 t% c( l2 G1 n/ z - <property name="sessionFactory" ref="sessionFactory" />
) }. t6 T6 q3 e) P$ q - </bean>. T: B+ b+ C3 f6 O
5 ^) @; F( [' V% h$ f- <!-- 事务的传播特性 -->
4 `# x0 t1 P4 F - <tx:advice id="txadvice" transaction-manager="transactionManager">
& @# d2 q% z. w- h - <tx:attributes>$ v2 [2 @. j9 S( f {2 K7 `
- <tx:method name="add*" propagation="REQUIRED" />8 q% W9 x {( d; r- t
- <tx:method name="delete*" propagation="REQUIRED" />
+ d5 p& s5 J u7 p( g% z - <tx:method name="modify*" propagation="REQUIRED" />: l' ?8 i+ K+ o2 k5 e
-
/ {( g2 R" d# q - <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->9 W0 G. w" o- M! h4 t6 v
- <tx:method name="*" propagation="REQUIRED" read-only="true" />+ ^$ b1 M- C/ w# t1 X
- </tx:attributes>
, K! A! z: I4 v v - </tx:advice>( t/ t! S0 O8 {
- 2 k- m+ |8 z- M
- <!-- 那些类那些方法使用事务 -->9 H5 ]$ P) G' d/ t6 R
- <aop:config>
7 F0 R6 f, c# y: o* X( ?' G - <!-- 只对业务逻辑层实施事务 -->
. T+ m) k# U7 @/ i - <aop:pointcut id="allManagerMethod"
- a* q; `" a; @9 n/ S4 u - expression="execution(* com.jialin.service.*.*(..))" />
2 @3 M; P: h* r - <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txadvice" />
) M5 P0 W0 Z5 u, Y - </aop:config>
$ c" M6 W' h4 K1 c" u - 2 m6 G2 a- u( w& N: ~
- 5 M0 A* i! c( \2 {7 Z
- </beans>
/ Q3 |2 n6 c: ^% l9 u" ?
复制代码
+ s/ U1 w E- \ C2 |7 S. v" L" n" c
struts2+spring+hibernate整合案例代码5 z- e/ U+ [$ j
" H" `3 D5 |( T9 I" a" f% M; R
$ ]2 S; e. h) _: N1 ~( x |
|