TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。2 m4 o' u& P+ W5 E" U
) x2 h7 P6 Y3 X+ w1 a
集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。
: x4 j: e7 P6 f" B
1 F! \# I% a N! w* }1 X- A0 v, TStruts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持。Spring一方面作为一个轻量级的IoC容器,负责查找、定位、创建和管理对象及对象之间的依赖关系,另一方面能使Struts和Hibernate更好地工作。
- l ?7 m5 K# V' l9 ?3 ]9 b% M& D& D0 k2 U* S
项目分层结构:action、 service、dao . k# ?7 ^' e1 |4 ~
项目配置自定义异常错误实现、重写拦截器对用户进行拦截判断、使用过滤器 统一设置字符集。5 X# Q/ E6 y2 T. ]5 p! \3 t
2 {5 r1 U: |7 w, u9 K功能实现:基本的登陆、失败或者成功的跳转以及登陆成功后用户数据的新增操作。数据库表自建。- T4 M7 B7 [+ E/ z
4 G$ o; J! [1 ?3 @7 K1 K
applicationContext-common.xml:- X' e3 S. Z+ W
3 u5 W) k _6 o& x: r# D- <?xml version="1.0" encoding="UTF-8"?>
* x, e) L# y$ d# o( s& v - <beans xmlns="http://www.springframework.org/schema/beans"
! ]1 D K* r( F9 ] - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"% p8 Z T5 ?* S& V8 `
- xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"" R; x* Z# Y' s2 e1 r* W' I6 H
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd! v8 ]- [% L# _ A( x- g6 O
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd$ P" \* S: M- a# E
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
3 @" y0 o, m/ o3 q5 w - http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">; Q+ v6 ]1 Z& \; ]6 x
5 @7 |1 J7 l7 x0 b/ r5 o- <!-- 启用spring注解支持 -->
: z+ `' p9 C0 l, I' d8 ]0 E - <context:annotation-config />
+ e& l# C8 [7 d, F4 [ - ( e8 i" m* \3 ~6 N- R+ R* {
- <!--配数据源 -->
7 S2 r! g; M* C- G5 T2 [4 Z( R5 l9 k - <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"/ R, v2 ^* {3 y6 q) ]* K) w
- destroy-method="close">8 ?+ V7 y, V+ V" I. }6 C# j8 T
- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />5 S, T+ K) P8 _0 S% {, P& V
- <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
. p- n4 C* F m - <property name="username" value="ssh" />" x/ Z. Z! e R7 H% e, h6 S) V
- <property name="password" value="ssh" />! T% a9 q0 f* f3 t: g. ~
- </bean>. C# F9 {1 J2 P. x1 f. o- {
- , {+ F( j- c0 {5 Q& @1 `$ g
- <bean id="sessionFactory"
1 V0 {) v/ X0 H) C! r% s7 [, P - class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
: [. \: W$ D, [/ i' W( D1 z - <property name="dataSource" ref="dataSource" />
$ ~+ {! @0 h |$ o8 h z$ x - # k/ j/ r. Z; [1 |# F) ~7 ~
- <property name="hibernateProperties">
" E2 ^' |" m8 W7 e' h4 l, s - <props>$ K7 w2 D) i9 \+ |! V8 ]
- <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
# p+ S# U- d" n: n( | - <prop key="hibernate.show_sql">true</prop>
7 [4 Q! D) I; B2 A2 @! L! U" i- H - <prop key="hibernate.hbm2ddl.auto">update</prop>
# U& G: X( j, k1 F/ L4 N/ \. p - <prop key="default_schema">ssh</prop>
m3 t' w9 u* {) j. w- M - 5 s& g. D' H9 r5 A
- </props>4 m' j' [9 H: K6 w- b+ A
- </property>4 b/ k9 y1 B: E1 }# r8 u
- <!-- 如果使用配置文件 -->
% I7 D4 B& C1 ~* |& G - <!-- <property name="mappingLocations"> <list> <value>classpath:com/jialin/entity/User.hbm.xml</value>
, \0 R, s" Y! b/ k& b - </list> </property> -->: ^' @$ t1 d! C R6 ^
- <property name="annotatedClasses">
2 O! ~7 E& Z0 y G4 j - <list>
# Q8 W- f2 C& ~* H - <value>com.jialin.entity.User</value>
2 T1 M, P; \- L+ B% m8 E8 ` - </list>$ [; S6 l0 x# M; D# L+ l
- </property>
9 i, z. J0 _0 @' m1 V
* r9 F1 ^2 D# V+ a! y' q6 U7 t- </bean>9 t3 L( o# _$ p
-
; B+ ]5 i) e ^0 S9 [: n9 { - 2 v: P" C7 I0 r, T6 ^
- <!-- 配置事务管理器 -->' {" `7 v+ u A8 Y+ s8 |! \
- <bean id="transactionManager"
& v4 n& ^- q+ F) W9 c2 b* @# w - class="org.springframework.orm.hibernate4.HibernateTransactionManager">
* ^! Y7 t2 `6 f' D ` - <property name="sessionFactory" ref="sessionFactory" />/ b- r/ M1 T" \# j$ I0 m" B
- </bean>+ ]1 W9 u0 ^& F9 ~9 Z
# r7 Z+ t9 D6 q; f$ b- <!-- 事务的传播特性 -->/ C; _# S4 e5 J
- <tx:advice id="txadvice" transaction-manager="transactionManager">; ~/ y H5 h6 P* Y7 [; b0 Q8 f
- <tx:attributes>
& l7 J& m. R! n) K: D, } - <tx:method name="add*" propagation="REQUIRED" />
0 U( ^2 c/ c( |4 I& z$ v - <tx:method name="delete*" propagation="REQUIRED" /> o9 m f3 N% H8 ~, t+ K+ Y9 V
- <tx:method name="modify*" propagation="REQUIRED" />
7 r0 d/ S- F$ c6 S% l$ k8 X -
; e" V" ?0 e" @+ |* T1 W0 W - <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->
1 n% S- d/ [) }+ S0 P - <tx:method name="*" propagation="REQUIRED" read-only="true" />2 g6 o% t; z' b+ d' H
- </tx:attributes>
; }0 x$ _# v9 g8 Y7 ]6 ] - </tx:advice>0 v7 a4 l9 Q' I
- " f% u7 L* L3 h) r
- <!-- 那些类那些方法使用事务 -->
+ d1 K i1 M: w& J/ F8 l# z3 Y - <aop:config>3 W6 F: E- [+ D, v% V: `" ?6 E2 J
- <!-- 只对业务逻辑层实施事务 -->
1 p! G; k& ]: q - <aop:pointcut id="allManagerMethod"
" j g9 U4 K4 P1 b" v5 C& w6 U - expression="execution(* com.jialin.service.*.*(..))" />
7 |8 _" Y; [" L - <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txadvice" />* L, d; D- t3 l0 i1 v
- </aop:config>$ h$ L9 B; w6 y$ F# `% [: x- T7 m6 [4 E
- # Q y3 g5 _" b6 n: ], [4 J: Y
- 6 \2 K$ t$ n/ I! q
- </beans>2 n5 Y2 w" E- M8 o5 M, o
复制代码
2 H6 E& v3 V3 Q+ R" T3 v
" }8 m! K- Y$ J4 L' p% ^
struts2+spring+hibernate整合案例代码- X# J3 t) y: A: V3 c9 e; \
0 M- _9 d+ _; m; d+ j/ y3 @! m& Q H x7 t6 C9 K8 Z. }8 M1 I8 ~
|
|