TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。& a# l" \4 x: V! D+ l
2 M, h8 ^7 w. P
集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。
7 `$ K0 d4 E# ]1 I: T O9 a4 Z% I. y, t+ P d
Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持。Spring一方面作为一个轻量级的IoC容器,负责查找、定位、创建和管理对象及对象之间的依赖关系,另一方面能使Struts和Hibernate更好地工作。
" b; N# q& c& x8 d$ S4 @7 M0 R5 ? P! F1 J/ T! j
项目分层结构:action、 service、dao
3 `) ^+ r, }; M* y: T0 w项目配置自定义异常错误实现、重写拦截器对用户进行拦截判断、使用过滤器 统一设置字符集。: ~/ M; K1 M; Z/ Q9 g$ B1 n. }
$ \6 j( r7 i ]/ J
功能实现:基本的登陆、失败或者成功的跳转以及登陆成功后用户数据的新增操作。数据库表自建。$ A7 L. q; u" Z
& p) j0 Z$ G, V1 ^applicationContext-common.xml:
3 D. b: N+ F) K; a
* d4 P; k, N9 L- <?xml version="1.0" encoding="UTF-8"?>6 }* w) U% U- c2 M# c! I& K1 ], ]! y
- <beans xmlns="http://www.springframework.org/schema/beans"! ~0 t; y7 X. V, l/ s
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
8 M* [+ A8 v7 W% V - xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"7 r' o( Y: F8 ~, y1 b! \0 g
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
4 I4 J3 h* f$ d/ b' G, C - http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd3 q5 p5 I; M& l
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
+ c0 Y9 `5 ?" R$ T! Z/ b. A* m - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">, C- P0 M/ e& s. s% m* m
6 a( y, P" X# m- <!-- 启用spring注解支持 -->
1 P7 Q+ A$ r' v& a - <context:annotation-config />! j# r2 s6 H- k
6 M3 k' q e8 i7 _. }6 |- <!--配数据源 --> U& m) t, J; q, r' d, l* [
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" {) O, i* s) [9 ~* R) G
- destroy-method="close">
. k- p9 f4 K( ]/ E - <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />) Q" \! W5 Y* f% p) \
- <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />1 O& S3 e, F* M8 [$ d/ e* r. g: ]
- <property name="username" value="ssh" />2 A/ J S) M9 J) h3 X
- <property name="password" value="ssh" />
3 C4 c4 @8 S4 r - </bean>, `0 M( R7 S% O5 W
2 {) X9 S, W6 ]- <bean id="sessionFactory". y# b3 Y7 A: ^5 Q
- class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">, E& w; y9 R! K7 V
- <property name="dataSource" ref="dataSource" />
2 j) S G& H, n @3 p - + K2 a U; |4 p8 e! E4 Y0 F# `
- <property name="hibernateProperties">
2 G( Z% v" D( L0 ^( f, s. @5 k - <props>
& g- @- w: H; L0 X2 `9 g" {; P# V7 K! ? - <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>7 D* X8 q5 L. d3 m
- <prop key="hibernate.show_sql">true</prop>
8 S: R; x+ `! g7 J - <prop key="hibernate.hbm2ddl.auto">update</prop>
/ x' h0 W; m) r. [ - <prop key="default_schema">ssh</prop>/ S5 m* k: g$ N2 j. q0 `# ~ l
- 3 W4 u, J0 Q) l" D7 h2 O9 ~
- </props>* k% E( Q6 g; ^
- </property>9 G) s v! B V# p9 M1 r
- <!-- 如果使用配置文件 -->- D0 g& l V3 p2 {% U. t
- <!-- <property name="mappingLocations"> <list> <value>classpath:com/jialin/entity/User.hbm.xml</value> % c% F2 C' S/ @) o
- </list> </property> -->
1 ?5 ]" g- o& L' X. ] - <property name="annotatedClasses">- J$ Q3 z* a6 w& [3 J
- <list>
v2 ] a+ V! Q- M5 w' o. [0 a) g( I/ T - <value>com.jialin.entity.User</value>! {% b2 a/ f U
- </list>
! l/ a/ \5 L: M- o - </property>
7 @# d* H5 r6 P. @
/ \1 I/ @0 W7 |& c* o- </bean>+ A) F- k5 y# i% D) {+ D, L" _7 m
-
5 D( \; r+ Y, R - ; Q4 g, g( K: C# q
- <!-- 配置事务管理器 -->$ p8 G" r1 I' C3 \# F
- <bean id="transactionManager"/ B2 D& M' j" i& |
- class="org.springframework.orm.hibernate4.HibernateTransactionManager">
* M% M# J+ O! q7 c9 t! J7 F - <property name="sessionFactory" ref="sessionFactory" />
4 ]2 L Q+ y, c& W6 U: K# e$ _3 a - </bean>
, r) Y# b$ ?/ [: j7 b - * V3 P u. a4 @( ]
- <!-- 事务的传播特性 -->
& }* M" ?5 x* P6 h - <tx:advice id="txadvice" transaction-manager="transactionManager">
; D% _; x4 Q- u K- Y! l - <tx:attributes>7 S6 H- ?+ V9 G' M" G
- <tx:method name="add*" propagation="REQUIRED" />3 J* s* u& k' B8 s) I, f6 l
- <tx:method name="delete*" propagation="REQUIRED" />5 ^/ }. m) A& H% ]% N5 k
- <tx:method name="modify*" propagation="REQUIRED" />
- b. c( F% p, h7 m% ?3 W% h: ] -
% k+ k+ h6 \& |! H! { - <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->
/ J) e0 g4 B4 d: m* r8 o7 t5 Y2 b2 x( b - <tx:method name="*" propagation="REQUIRED" read-only="true" />
; F& e. l" B2 ]$ y - </tx:attributes>' a, ?& P, R3 T
- </tx:advice>
5 [% d) C7 W6 w1 V# O - ! d# @4 O" \, l
- <!-- 那些类那些方法使用事务 -->1 g& i( Z5 g4 k. t
- <aop:config>
/ C' A* m2 Y9 H+ ~# P - <!-- 只对业务逻辑层实施事务 -->/ K& b5 J; n$ Q
- <aop:pointcut id="allManagerMethod"' e: `8 @1 `' P+ a$ E5 y- v
- expression="execution(* com.jialin.service.*.*(..))" />. z% A( Z |- s& K
- <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txadvice" />' b+ i7 u3 r' Z+ K
- </aop:config>
* r' B4 E" K& D& N1 Z+ m/ N# S - 4 P5 D3 n7 }( R. v: [
- 9 z0 a; I0 c1 h G( z* C
- </beans>
% C x2 a$ [% u3 ~
复制代码
% M* n! `/ {8 m5 I# L
* C: B2 V) R. Q7 q% y
struts2+spring+hibernate整合案例代码: i }) _3 t+ P7 N, H1 R x; p4 ~# X
- H! n7 _9 U- k
- ~( \; P4 f" x/ t$ C, F+ ~
|
|