Work hard

[原创]Struts2+Spring+Hibernate整合

上一篇 / 下一篇  2008-05-11 23:59:15 / 个人分类:Web Framework

查看( 50 ) / 评论( 0 )
海岸线网络聚合9aU3X6D/G3x8_"Rixp2K

由于struts2目前还没有插件可以支持Eclipse,因此需要手工配制。我们先在eclipse下创建一个web project命名为SSHDemo海岸线网络聚合;F\H.v$P
然后我们下载这3个框架来配制我们所需要的开发环境。下图显示所需要的lib

yw u ~3r,\;W0海岸线网络聚合@T$ai%vl

9|)BrG{T&UX8U0第一步,在web.xml中配置struts2spring
Y DF[||6tT0
    <listener>海岸线网络聚合 MP e&Vu
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
zWi;?`+}7`-F%I0    </listener>海岸线网络聚合 p$ioS8~Yg!I*a
    <filter>海岸线网络聚合0y7G*q,tm o W#p8G
        <filter-name>struts2</filter-name>
\j;h$U\$@X,S3h0        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>海岸线网络聚合2['c5}3P'o`
    </filter>海岸线网络聚合ZXMB2o LoZ
    <filter-mapping>
~/VLMw ~ V5T s/y0        <filter-name>struts2</filter-name>
H RVT8P [%b0        <url-pattern>/*</url-pattern>
&E0M3Nlv~:]9n%V0    </filter-mapping>海岸线网络聚合0L9]0z nRs'E5N
第二步,在spring的配置文件applicationContext.xml中配置数据源海岸线网络聚合Z6F!J.h/@ G4\
    <!-- 定义数据源Bean,使用C3P0数据源实现 -->
j#k*j!rj` qU4?0    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">海岸线网络聚合Ty uP1v H;FQ+{V&S
       <!-- 指定连接数据库的驱动 -->海岸线网络聚合-MR D5b"EA8T'up
       <property name="driverClass" value="com.mysql.jdbc.Driver"/>海岸线网络聚合 O7Z8i+hJu3@ O p
       <!-- 指定连接数据库的URL -->海岸线网络聚合 Vm3Q5n9D v.D
       <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/sshdemo"/>海岸线网络聚合6zp3rC%J3Bq
       <!-- 指定连接数据库的用户名 -->
ki{GY Kk,v0       <property name="user" value="root"/>海岸线网络聚合GA)`1C {/fijW
       <!-- 指定连接数据库的密码 -->
+hU(REP*@k0       <property name="password" value="715523715"/>海岸线网络聚合1t.wQK)L&P
       <!-- 指定连接数据库连接池的最大连接数 -->海岸线网络聚合w&PW8@(KA ~
       <property name="maxPoolSize" value="20"/>海岸线网络聚合J+|H'z q8Y$Z
       <!-- 指定连接数据库连接池的最小连接数 -->海岸线网络聚合7vhS{s
       <property name="minPoolSize" value="1"/>
"hh,XYCG0       <!-- 指定连接数据库连接池的初始化连接数 -->
D5L&H!e/bA+j#n%@0       <property name="initialPoolSize" value="1"/>
jsv9dc/?W0       <!-- 指定连接数据库连接池的连接的最大空闲时间 -->海岸线网络聚合5W%oEjf u:M9A5[:~
       <property name="maxIdleTime" value="20"/>海岸线网络聚合E"w!q.i7Q8U8Q
   </bean>
Z&C7D"GQ&X"i^ X0第三步,开始编码,下图显示项目的是包的结构海岸线网络聚合2C~$r*?-b

S?Ry(V]*}MA^0

{QCi y$f5mJ;^8_t0创建一个User
}G&D,L-m!]n4}0
public class User implements Serializable{
,o1NE-|\/I p0    private int id;海岸线网络聚合2p+jd7n-E~Y @4]
    private String user;海岸线网络聚合!wTmm F X]ry
    private String pass;
%t#D+Y2]$\9l0    private String email;海岸线网络聚合uf9[C*}%ot
    
P;p,` }(pN5b['z$g0    public int getId() {
#rJWnXo0       return id;海岸线网络聚合Nd$M:N:Qj|E:s
    }海岸线网络聚合q%^'z I&q Fa
    public void setId(int id) {
Z$Qo.@K.j6Vf+f,r0       this.id = id;
HoKf M3F0    }海岸线网络聚合z[h/bjN
    public String getUser() {
NmC/?d$d0       return user;海岸线网络聚合 X YD6iVC*S;?
    }
zeI w7o+VpY2x0    public void setUser(String user) {海岸线网络聚合A K-R$yOwp2q
       this.user = user;
(~;yy*y/[(@"cS+K0    }海岸线网络聚合Bv:inQ6J y!v
    public String getPass() {海岸线网络聚合/A/l,u S ? ~3mX}2F
       return pass;海岸线网络聚合JYW'K;]i
    }海岸线网络聚合Y@cV)X!oc
    public void setPass(String pass) {海岸线网络聚合 \Hd9mvgc
       this.pass = pass;海岸线网络聚合A9a j'RD;bn.M})k x3d
    }海岸线网络聚合5b%GS9S7QS
    public String getEmail() {海岸线网络聚合,gr%i` P|4Z0pO
       return email;
^b6h vzu0    }
[NsNR$VX0    public void setEmail(String email) {海岸线网络聚合{8k `T)^m_(w"x
       this.email = email;
$Lj{H9^0    }   海岸线网络聚合FD^1Y&s0s3G,`Z
}海岸线网络聚合 x ^+|'uLc#hK
User.hbm.xml就省略了。
v'A }$[TF {~v0海岸线网络聚合X:JP#hE
在applicationContext.xml中配置sessionFactory海岸线网络聚合a"Zo%d Z'C
    <!--定义了Hibernate的SessionFactory -->海岸线网络聚合z7x+U#y"t-{}-D.b
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">海岸线网络聚合!lNa3qR8CU E\ u
        <property name="dataSource" ref="dataSource"/>海岸线网络聚合1\t9u7i#{Gd
        <property name="mappingResources">海岸线网络聚合]3]%t.?f
            <list>海岸线网络聚合Lv7e6^IFR!_
              <value>com/hopeteam/model/User.hbm.xml</value>
`NVy8xM(l0            </list>
)f/g h ru*\[7t6s0        </property>海岸线网络聚合(j^bV|Z
        <property name="hibernateProperties">
1V3m0bhzQ R,m|0            <props>海岸线网络聚合!XOP*h\,Ji+gU7_
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
1h%V XGQs7A0                <prop key="show_sql">true</prop>
/`3W/@]-A(cPG(V1y W0                <prop key="hibernate.hbm2ddl.auto">update</prop>海岸线网络聚合*k+G r{1}#I
                <prop key="hibernate.jdbc.batch_size">20</prop> 海岸线网络聚合 X1V!P&q(gO
            </props>海岸线网络聚合1UC.~M M-y+}I
        </property>
f^ IS7c8s+[!h0    </bean>
c/v$SV2W*BJ8\z0创建Dao
sf ^] K Y0public interface UserDao {
.u)wS4BC5A OK)F0    /**
UE4W9to}3k0     * 根据id查找用户
Jv*x P$OvR0     * @param id 需要查找的种类id海岸线网络聚合 SZ.d/NK
     */  
O!p9UvC7U]1a0    User get(int id);
E^-tQ(@Bt0    /**
w{5TE1f:F [/sL0     * 增加种类海岸线网络聚合%j|+|pO%ge5oG
     * @param user 需要增加的种类
m o? P#h5BT'H0     */      
*_yTG ^I0u0    void save(User user);
T:d(avQa0
-jI }+}.\GV v0    /**海岸线网络聚合'\h|B$d7d cZe
     * 修改用户海岸线网络聚合3I'x mvW
     * @param user 需要修改的用户海岸线网络聚合 {&]G)`X6b
     */  
z"s"o j!n3T'A*n5xM0    void update(User user);海岸线网络聚合8u&HZ9e%pU;\[f-K'l`

g2y Og4\0    /**
G_h ev`@\G Y0     * 删除用户海岸线网络聚合 p} H&YW(QT
     * @param id 需要删除的用户id
3A#~bOxZ0     */  海岸线网络聚合c oI0oi,iE
    void delete(int id);海岸线网络聚合"g0?xz t&D

4L%x,\.m%cA'x0    /**
.f#M[g(| _I!M+Ky0     * 删除用户海岸线网络聚合!?/A]'C?SAx
     * @param user 需要删除的用户海岸线网络聚合 G lW8^[M;q6B7i
     */  海岸线网络聚合7mYE*H N&}et
    void delete(User user);
j_:[@~)oacZ `1{Q0海岸线网络聚合![*h6gqwX^3\*x
    /**海岸线网络聚合;L T@^L SJ
     * 查询全部用户
T*cU0{2mk0     * @return 获得全部用户
"n| S5e CfY?0     */
i_7T.Ju.E Q/o\0    List<User> findAll();
MB1A#}wj0海岸线网络聚合)D S;[ OB,Y
    /**海岸线网络聚合q*O-e,g(Aw8f0o
     * 根据用户名,密码查找用户
HSJ fF0     * @param user 查询所需的用户名海岸线网络聚合*Oh8]!L i}*}
     * @param pass 查询所需的密码海岸线网络聚合1or?2S/ssS7k
     * @return 对应的用户海岸线网络聚合Rbn7L)?^8At
     */ 海岸线网络聚合ex1CM%nZ _5X
    User findUserByNameAndPass(String user , String pass);海岸线网络聚合B3c0l%Iv

u7PK5NTaK9Q0    /**海岸线网络聚合Qu%{c)|x7k:H
     * 根据用户名查找用户
1O2[4oY2r,R*z0     * @param user 查询所需的用户名
W Ka:];gxnl+U0     * @return 对应的用户
8eq4I,VS0     */
x%r ?L0U0    User findUserByName(String user);
XBxBGpGy!~0}海岸线网络聚合&j| m6i.a
创建Service
%x@*Hc4L0^6H0public interface UserService {海岸线网络聚合Aq4MBD8R'}
    /**海岸线网络聚合4s~ S;E,\kf%a
     * 新增用户海岸线网络聚合#q.QA;W7L
     * @param user 新增用户的用户名海岸线网络聚合*D4s@6NH5t``W
     * @param pass 新增用户的密码
qF3c |I D7B'Ft0     * @param email 新增用户的电子邮件
)Lw(E:[};VC$}0     * @return 新增用户的主键
*yWP;T%m0     */
B:wu)Q I0    int addUser(String user , String pass , String email)
M._g;GOi0       throws Exception;
*JQ,qhx&L0海岸线网络聚合K+_:Y$Yj
    /**海岸线网络聚合k%\D x0wW'X { `
     * 验证用户登陆海岸线网络聚合osHfRa,N*a/{
     * @param user 需要登陆的用户名海岸线网络聚合'og;t5n g`o"o
     * @param pass 需要登陆的密码
cC+K1S2a1{ zv%@0     * @return 是否登陆成功海岸线网络聚合m$hH+Tkyr~
     */
-RZ_n!i0    int loginValid(String user , String pass)
#\D"P@]'w X T0~0       throws Exception;
t%_h#[y6G5H7@0
:X5|K+A-v0}海岸线网络聚合j|Jc7_,}t

C4~JJY0创建Action:LoginAction和RegistAction
/UY1C6W#T1E0public class LoginAction extends ActionSupport {海岸线网络聚合%j,Rz*k4C O{.kR6r
    private String user;海岸线网络聚合*Ky(y!@1A4|!G
    private String pass;海岸线网络聚合B qiD,fjf
    private UserService us;
\{ HOC:Y1h#v0~9BK0    海岸线网络聚合%}Rc0m#AY E M&?
    public void setUs(UserService us)
1lPoKg4e0    {
.]U-Us'c0        this.us = us;海岸线网络聚合9O2`5_.?Lt-M!E
    }
([5P EL1qP?0
9C`/gs s+`r0    @Override海岸线网络聚合3Z8]e cy Z
    public String execute() throws Exception海岸线网络聚合({EUDt0|/B
    {
Mw,FXwP0       Map session = ActionContext.getContext().getSession();海岸线网络聚合|u k;V[
海岸线网络聚合)b_^1~'I:^/g K2o
        int userId = us.loginValid(user, pass);
6z4E7uq%Uco0       if (userId > 0) {海岸线网络聚合r8er-Wo&va/K&R0rW+r
           session.put("userId", userId);海岸线网络聚合 @,| {'h%r B ~9`
           return SUCCESS;海岸线网络聚合Evy Op4TwZ
       } else {海岸线网络聚合k qvb$S0BV JXy1A.}
           addActionError("用户名/密码不匹配");
5AS_6BZ|0       }海岸线网络聚合+a5^/a#Utn t Y5?5A
海岸线网络聚合3?)Q2t@BY4o
海岸线网络聚合I8f*EjH$g
       return "failure";海岸线网络聚合s _!uwF g
    }海岸线网络聚合(b(j"a5Y1X@Fpg.H
海岸线网络聚合#M*q+Q9k(v%G"N
    public void setUser(String user)海岸线网络聚合e1^6f0B$N(|
    {海岸线网络聚合~ Qag ^ m(]
       this.user = user;海岸线网络聚合TG`G2d!v3s f:l \g
    }海岸线网络聚合XZk3hX1q$o0y
    public String getUser()海岸线网络聚合 Rz{8["Dt#U2v1VE
    {海岸线网络聚合mwf*F+a{b
        return this.user;
0P&b%O1d{w,[0    }
|*Q9N?,PF:ryE?0
(N1L#f0@:Sr_0    public void setPass(String pass)
N RzV }vu0    {海岸线网络聚合5|S.@;o7Am~ _8ao;?t
       this.pass = pass;海岸线网络聚合#U;kT|D$y
    }
PM"w'htY H8O^8U0    public String getPass()
X [ |*m"KH/ac0    {海岸线网络聚合m`3a0uuL
        return this.pass;海岸线网络聚合;D![E`v#et
    }
"cs0j l(Us G0    
_[ yz&bY)bp0}
yiLlt0
6\ R2K\)m](y0海岸线网络聚合l*Z jQU3N
public class RegistAction extends ActionSupport{海岸线网络聚合)x(@^ ^V4En
    private String user;海岸线网络聚合vgf0T7m)N)Y!i
    private String pass;
MX*n5Dj;H_*| }-Fg0    private String email;
9f0o/upgad)l0    private UserService us;
7P,`5g9zi#V0海岸线网络聚合(f-m(JE j
    public void setUs(UserService us)
$QXP9wG B0    {海岸线网络聚合 ZZ b7w0Y b
        this.us = us;海岸线网络聚合5?b1Jh#mE/GD+Q N@3N
    }海岸线网络聚合 FzW Ak7g7E?
    
4n9BC'I5b Ps0    @Override海岸线网络聚合 ]Jmj]eC
    public String execute() throws Exception
{~f^/{0    {
O;Q Qjs g,]K0       Map session = ActionContext.getContext().getSession();海岸线网络聚合@@yY w'v)h"OE3c

0k/FXf&a;J2]m:LX0海岸线网络聚合(e[4S6d0O
       if (us.addUser(user, pass, email) > 0) {海岸线网络聚合B8I#SgP ?vr+v J
           return SUCCESS;海岸线网络聚合b:{ k)i0E
       } else {
(c{D FQw0           addActionError("注册失败,请重试!");海岸线网络聚合B$VpdM8T F6{*~C Kt@
           return "failure";
u7Pk"N$A;B$i0       }
^$cL5JP p-xkY0    }
9fH}5m4pY.N,E-M2S#}0海岸线网络聚合1v"N0P#D,vq"edM

iNG/fnF0    public void setUser(String user)
/OZ_&Ry0    {海岸线网络聚合4qB"W!{#hZ#R'M$b b
       this.user = user;
1B[m3w\M;P0    }
]F.^o-W e/o0    public String getUser()海岸线网络聚合1e5s|1h_!dY"C'h'X
    {
#I }7Y\X7_0        return this.user;海岸线网络聚合4Mu7`d^(sR J
    }
Ue1i5ve M GK@l0海岸线网络聚合7T'A/t9qJTw E8g/_Ci
    public void setPass(String pass)
,m0L5l0a c7z){7H0    {海岸线网络聚合2t a/v:n)f
       this.pass = pass;
5h7m,uCK4S w&r0    }
}K,Q Ueh0    public String getPass()海岸线网络聚合jX*fab0P,C6z,[ B u.r
    {
T8_M-s0a-Y1T0        return this.pass;海岸线网络聚合7[R pq6D*qE4j,B
    }海岸线网络聚合 h+trp0M"iS

-rc5v1k!Re(J]O0    public void setEmail(String email)海岸线网络聚合oziBzO
    {
HL.E$z.yF0       this.email = email;海岸线网络聚合3V2PI-bB:P0f
    }海岸线网络聚合)`_T7M3w8l;z
    public String getEmail()
#|-McqU+F@0    {
md'zqQM+Z0        return this.email;
1^m^D3kh{Vf0    }海岸线网络聚合8|\"fE,Q0rE

"wS0Zz4F#d0}
h5[0LnX)v#e0海岸线网络聚合:?*B"~!c1@#]:T
第四步:配置struts.xml中的actionapplicationContxt.xml中的bean海岸线网络聚合xRjzuR$\
Struts.xml海岸线网络聚合IRY6hx{,x

$m3O*R_2}Of.C)z \0<struts>
P l/m;@!`,U7kt+@JU2J8O$p0    <include file ="struts-default.xml"/> 海岸线网络聚合 c3M wsjPU PI
    海岸线网络聚合2Z W,j"?7})M
    <constant name="struts.i18n.encoding" value="GBK"/>海岸线网络聚合"[jZWx,cn:b a7mF
    <constant name="struts.objectFactory" value="spring"/>海岸线网络聚合apg+b(@#pwV:A
    
hz2C,l6Q S0    <package name="fengzhizi" extends="struts-default">海岸线网络聚合0{H@XZ QJ9a
海岸线网络聚合|;x&X4j+@)Q g
       <global-results>海岸线网络聚合4Qjg i:[r+q
           <!-- 下面定义的结果对所有的Action都有效 -->
Yw&v%N` u7PQ0           <result name="exception">/error.jsp</result>海岸线网络聚合d sz+T%`+p sSX
           <result name="success">/success.jsp</result>海岸线网络聚合;w8b-K'?5ur:[)fc
        </global-results>
X)?,Usfh.X#e0海岸线网络聚合w}Ey9R2G vd
        <global-exception-mappings>海岸线网络聚合*J L6yF'PQ8KP
           <!-- 指Action抛出Exception异常时,转入名为exception的结果。 -->海岸线网络聚合\y0Bhf9_!W
           <exception-mapping exception="java.lang.Exception" result="exception"/>海岸线网络聚合:h$PM$|o1G8l
       </global-exception-mappings> 海岸线网络聚合's2V;T6|y a9b:B8S
海岸线网络聚合]z S'xq!|']
       <action name="Regist" class="com.hopeteam.struts.actions.RegistAction">海岸线网络聚合+|Y|:}$d;GwN}
           <result name="failure">/Regist.jsp</result>海岸线网络聚合$b_(LT4Vev#h*m
        </action>
4G${ [-B j0
fU,J;_C*S_z?{(|0       <action name="Login" class="com.hopeteam.struts.actions.LoginAction">海岸线网络聚合#z4dyyw qc\,z+F
           <result name="failure">/Login.jsp</result>
d(|`A;Z.H8Z0        </action>海岸线网络聚合 [#{9o8A%@+Z
海岸线网络聚合'DK!`7C$\-C0aF"R^
    </package>
@/T3T:c:m Y?,C0海岸线网络聚合Q!h n G5JJ9B'_2V
</struts>海岸线网络聚合uoS IN
海岸线网络聚合&Awm,`^ p RE-t
applicationContext.xml中的事务处理,和servicedao bean的配置
~/JAO;KI0    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">海岸线网络聚合(y1y$h*X#~*D M(z2GWk
        <property name="sessionFactory" ref="sessionFactory"/>
0e S)}+R {1z0    </bean>海岸线网络聚合}U9GLZ ^

!ybU+w-I['kng'S0    <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
-\ qR p3sMO KH0        <!--  事务拦截器bean需要依赖注入一个事务管理器 -->海岸线网络聚合'Gi%qTs2k$A~0n
        <property name="transactionManager" ref="transactionManager"/>海岸线网络聚合Y0b D+kP
    <property name="transactionAttributes">
5H7BsN)eK5U0           <!--  下面定义事务传播属性-->
f UL$[Q[0           <props>海岸线网络聚合!e{-{4D9S@ D sj"Q
               <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>海岸线网络聚合^/JY"b C8K |
           <prop key="*">PROPAGATION_REQUIRED</prop>海岸线网络聚合-l#D0rpw j0s_
           </props>
E%U ?5FLa$Gn!K0        </property>海岸线网络聚合 ~(Y m9}7r}"[7B
    </bean>
z'gK"QUc\.|!e0
3h h+|jF3hU |1[0    <!-- 定义BeanNameAutoProxyCreator-->
HEi't!^MK't0    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">海岸线网络聚合-e m4Fz$}3Cu3~pX
        <!--  指定对满足哪些bean name的bean自动生成业务代理 -->
)dFt*h(C&o [2?0        <property name="beanNames">海岸线网络聚合bF+G1B8E }&KC
             <value>us</value>海岸线网络聚合,m.iwF7iu0G%Pz
        </property>
1m"y'yN#N&KvD0        <!--  下面定义BeanNameAutoProxyCreator所需的事务拦截器-->海岸线网络聚合*w.e0v#C?&phu.u
        <property name="interceptorNames">
j F6l8j0{iE\P;R0            <list>海岸线网络聚合 Kv-uq\fbW-is
                <!-- 此处可增加其他新的Interceptor -->海岸线网络聚合9K~1r|\
                <value>transactionInterceptor</value>
4{+qon-m/h2L5]g0            </list>海岸线网络聚合#U7rt6z y
        </property>海岸线网络聚合(_SW8iX,K |
    </bean>
r5| Mn5B[}*{+A0    <bean id="us" class="com.hopeteam.service.impl.UserServiceImpl">
L3z3XC'L5Z.Fz4s0         <property name="userDao" ref="userDao"/>海岸线网络聚合R ZK6v.bv!J\)T3v[
    </bean>
*LXQ2XA0海岸线网络聚合 Ld+BNVN-F
    <bean id="userDao" class="com.hopeteam.dao.impl.UserDaoImpl">海岸线网络聚合+B/y1Mz:g6Y-F
       <property name="sessionFactory" ref="sessionFactory"/>海岸线网络聚合4VRop5R5bMId
</bean>海岸线网络聚合.}F0Z!q7G5jS3d_{

{%bj9W S:p)o0第五步,编写jsp,然后部署web工程海岸线网络聚合 ]kz9b9} Spj$~9r
给出截图吧,jsp页面就省略了海岸线网络聚合4Q v2B\q
海岸线网络聚合)V'h_P"z


TAG: hibernate 原创 Spring Hibernate

我来说两句

(可选)

日历

« 2009-07-05  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 1285
  • 日志数: 23
  • 建立时间: 2007-05-21
  • 更新时间: 2008-05-18

RSS订阅

Open Toolbar