Work hard

[原创]Struts2+Spring+Hibernate整合

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

查看( 24 ) / 评论( 0 )
海岸线网络聚合W&U4~c_2[eF

由于struts2目前还没有插件可以支持Eclipse,因此需要手工配制。我们先在eclipse下创建一个web project命名为SSHDemo海岸线网络聚合-x bYH_0nd A
然后我们下载这3个框架来配制我们所需要的开发环境。下图显示所需要的lib
海岸线网络聚合M?&v4x%J#B

0SZU(H @t0`0

U@u/CY_%T&dR0第一步,在web.xml中配置struts2spring海岸线网络聚合] j1e]l trPE U3J
    <listener>
^a6G O^ D ml0        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
p-`$zSYV l'?T0    </listener>
QnZ^a)W2H J C ~0    <filter>海岸线网络聚合(N*RZ7l B!x K
        <filter-name>struts2</filter-name>海岸线网络聚合gV(ZC5I5u
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
x&dH!z:Z2\7I0    </filter>海岸线网络聚合:P5\I#]%s.k'W2RK
    <filter-mapping>
8J6Q&}]8Svdv0        <filter-name>struts2</filter-name>
"Y?t5C%j8{^!i0p Zb/l0        <url-pattern>/*</url-pattern>海岸线网络聚合6m s g!R!b1D
    </filter-mapping>
Zf'WR;F0第二步,在spring的配置文件applicationContext.xml中配置数据源海岸线网络聚合Y)~H"lt;GL9E!f
    <!-- 定义数据源Bean,使用C3P0数据源实现 -->海岸线网络聚合-V4CB~D$~.[{6a
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">海岸线网络聚合w8cd([(R&aNu
       <!-- 指定连接数据库的驱动 -->海岸线网络聚合3Q p.[ x+QnY"m
       <property name="driverClass" value="com.mysql.jdbc.Driver"/>
"bV+E!Wr7~1N EC0       <!-- 指定连接数据库的URL -->
SDo \!DU(c'm%]s0       <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/sshdemo"/>
_|9u1_8]BS2P0       <!-- 指定连接数据库的用户名 -->
,l!m-K7iifE0       <property name="user" value="root"/>
D~i%AH$mf4k0       <!-- 指定连接数据库的密码 -->
'r,DTC)a"xkZ0       <property name="password" value="715523715"/>海岸线网络聚合 W*w{;xt6o:l
       <!-- 指定连接数据库连接池的最大连接数 -->海岸线网络聚合g"p*\0DrU$y
       <property name="maxPoolSize" value="20"/>海岸线网络聚合4Z^^ o:]}
       <!-- 指定连接数据库连接池的最小连接数 -->
c \n}*W4T$Y6hg0       <property name="minPoolSize" value="1"/>海岸线网络聚合bruN6rQ!ei
       <!-- 指定连接数据库连接池的初始化连接数 -->
5x6L&}^oKz Y0       <property name="initialPoolSize" value="1"/>海岸线网络聚合TNLi R3G_#J*r
       <!-- 指定连接数据库连接池的连接的最大空闲时间 -->
o`O*m^4Bo0       <property name="maxIdleTime" value="20"/>海岸线网络聚合I$WN2aO})P
   </bean>海岸线网络聚合K+D0j+w"j$|.PA\
第三步,开始编码,下图显示项目的是包的结构
p*a6Wk5?\ V;U0海岸线网络聚合d8gyG)g%WoH

F7S7d4F'd/IJ.CM0创建一个User海岸线网络聚合*} R y&_#\fe
public class User implements Serializable{
"n*^t(Q8N?vA0    private int id;
0oH'rx"i0    private String user;海岸线网络聚合%Wtu ~%U!Ot#w7y;i
    private String pass;海岸线网络聚合FC:n%r O MV`
    private String email;
r0M_2vn gp0    
6^n3kz A8MP(K L9J0    public int getId() {海岸线网络聚合5|$Y)qm-e
       return id;
6gZ{q3b~0    }
.WTlU1V+i)c7w W h}"w0    public void setId(int id) {
&f y NC.G*U D0       this.id = id;海岸线网络聚合.V1CkOl\ d4g
    }
%B#o0Z @2S$Fr/]/m,M9W0    public String getUser() {海岸线网络聚合 \1S0c1TyLd
       return user;
^ I v g/e0    }
1d \ _9a\!OF0    public void setUser(String user) {
K)mw*m4@t0       this.user = user;
A\4a,dX,}u$P0    }海岸线网络聚合Nh'xwu^
    public String getPass() {海岸线网络聚合!Y~Ss1Gw)oB8n,^
       return pass;海岸线网络聚合!tw'F:|O\ p*\
    }海岸线网络聚合AO.C0` T-_
    public void setPass(String pass) {海岸线网络聚合8zM;s{i f
       this.pass = pass;
c ^m j[!^F q5Q'G0    }
x\-B7qVp#S%h,{;m0    public String getEmail() {
J&B|3eE R&\0       return email;
1cIOC!J.U0    }
r;w&SX h3U1X K+a0    public void setEmail(String email) {海岸线网络聚合S S/R x6B} { H0u
       this.email = email;
']%y$nY M^)s0    }  
(j:ls9yAJ5cqm7Ukm0}
#Fjd0|W ^ Z0User.hbm.xml就省略了。
O'['du0KuE6U+^0海岸线网络聚合y[\XJN lf
在applicationContext.xml中配置sessionFactory
9OK x3d0h8m%G1}e7\0    <!--定义了Hibernate的SessionFactory -->海岸线网络聚合H#}D]"\2F2ry
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">海岸线网络聚合 T"K;i!l rd3\ ^;nI/fZ
        <property name="dataSource" ref="dataSource"/>海岸线网络聚合geIy}E"`wXU:G!r
        <property name="mappingResources">
)r5Rim!U3a*{w!Q0            <list>海岸线网络聚合3FMkT*w,}wd,z \,y
              <value>com/hopeteam/model/User.hbm.xml</value>海岸线网络聚合)a#A5zmmCQ.}
            </list>
3KWcFu&L'GN ^0        </property>
FveEf&O'K*U0        <property name="hibernateProperties">海岸线网络聚合T,H L1W,v5u
            <props>
'E6q _7~8v fW0                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>海岸线网络聚合q7I R$b1^ S&vN gVp*Pt
                <prop key="show_sql">true</prop>海岸线网络聚合;wVD+V:ay
                <prop key="hibernate.hbm2ddl.auto">update</prop>海岸线网络聚合.^M K EAQ,IU#G!y-g
                <prop key="hibernate.jdbc.batch_size">20</prop> 海岸线网络聚合@ A%Apr$b!F
            </props>海岸线网络聚合-j.i PD7y`
        </property>海岸线网络聚合wZ$Z3MI'| h%P
    </bean>海岸线网络聚合l]z!pQ5t
创建Dao海岸线网络聚合-l,w Y3Q1o&SG]U
public interface UserDao {
$V*s(B-TO+jw0    /**海岸线网络聚合,nhO+iHv"lMsY
     * 根据id查找用户海岸线网络聚合_T8I4R A
     * @param id 需要查找的种类id海岸线网络聚合0E2V8rh)M7V a Bw6m
     */  海岸线网络聚合.yx$^K)F5@
    User get(int id);
4t9orL1P-C%d0    /**
&ta}KOk;Y0     * 增加种类海岸线网络聚合~ b!y\c gc7j%?
     * @param user 需要增加的种类海岸线网络聚合hITi PB;L/dn
     */      
U$?b(vmG/mN0    void save(User user);
\5W@ `L5yQ0K ?0
s OLz.I~0    /**海岸线网络聚合'P V'PY(Q?6fa-zq
     * 修改用户
BXF:O8km5x*zA)m6_0     * @param user 需要修改的用户
#c;p"DmS0     */  
/Jj3F qo D0    void update(User user);海岸线网络聚合)i%z:kc o+E2_'o.}2wS3`
海岸线网络聚合WG6J0x7oi2O
    /**
1li%V-yi9[,x_0     * 删除用户海岸线网络聚合`5AN6@5p~}~
     * @param id 需要删除的用户id海岸线网络聚合.B.Q s%Q S
     */  海岸线网络聚合.JJ:AlH"D/v
    void delete(int id);
WjpJ,Lc'U*b4`0
R8g$b3A'RJ b0    /**海岸线网络聚合A(O xU7p }&KT!V
     * 删除用户海岸线网络聚合-Z*aoN&zY&I$T
     * @param user 需要删除的用户海岸线网络聚合w"mvM;\.zd
     */  
4u7G5rp0fN_.bLC0    void delete(User user);海岸线网络聚合$A5PsT&?(U2AI
海岸线网络聚合eYnm0v~dX"fY%Y
    /**海岸线网络聚合3M stO1P'W0K%N
     * 查询全部用户海岸线网络聚合d Qq@I
     * @return 获得全部用户
9} O_] M0rI0     */ 海岸线网络聚合D_0D%zdo Q
    List<User> findAll();海岸线网络聚合 Uv4\+ij/|1|%w
海岸线网络聚合+tGk-pLs~
    /**
lE f}Zj0     * 根据用户名,密码查找用户海岸线网络聚合n'O+AA;C%m
     * @param user 查询所需的用户名海岸线网络聚合*{ S;y,A,_$aer+]
     * @param pass 查询所需的密码海岸线网络聚合'sT(r8f'u~s
     * @return 对应的用户
$O a0e2kTukK0     */
fw+s~L9u/C7Y0    User findUserByNameAndPass(String user , String pass);
G7N9a8N&u}GygK0海岸线网络聚合%o*sW&WD7uTL
    /**海岸线网络聚合}O7j8K8u
     * 根据用户名查找用户
m ?H Wx%_!HVriA0     * @param user 查询所需的用户名
)V7~ JDf0     * @return 对应的用户
Sam @-X#p.n?0     */
?Z5et$r(y:B0    User findUserByName(String user);
O x2TnB`0}
yB*|5vq0X%LU0创建Service海岸线网络聚合0f u)ZiN]9u/U Im
public interface UserService {
2Cp*M?M F0    /**
"K3B?1g*oGPG(n0     * 新增用户海岸线网络聚合R'U{I[?&q
     * @param user 新增用户的用户名海岸线网络聚合?8I0IBSZEt
     * @param pass 新增用户的密码海岸线网络聚合)n7NBY4ICI
     * @param email 新增用户的电子邮件海岸线网络聚合3arc$z|u8CI k
     * @return 新增用户的主键海岸线网络聚合GX[$z5Zm#SnZ X
     */
-A9{HA3wx u!S0    int addUser(String user , String pass , String email) 海岸线网络聚合yyzR/U
       throws Exception;
"K4sB[h-x;Lu0
.X:m!iF1X tE0    /**海岸线网络聚合.ryu1|)C$u
     * 验证用户登陆
&J6IK"K-za,|zi0     * @param user 需要登陆的用户名
ic.W _tc0     * @param pass 需要登陆的密码
']8o.is PYXKZ7G0     * @return 是否登陆成功海岸线网络聚合&{.}j6N j,|
     */
$ChC"G1p`9S9B5X[[0    int loginValid(String user , String pass) 海岸线网络聚合0r;R\%Q8kHb!^+S
       throws Exception;海岸线网络聚合uV c&D9V&h%A!Ro

_r`3} u4rD7t0}海岸线网络聚合G&SQ0Tv@^b
海岸线网络聚合fU1L#OwI"i3O0TA
创建Action:LoginAction和RegistAction海岸线网络聚合Kp|"N'U9e
public class LoginAction extends ActionSupport {海岸线网络聚合C}.qq2J d OHe.R
    private String user;海岸线网络聚合&u#}-J@*t-f3gW8n1l
    private String pass;海岸线网络聚合"Q2p9q}{i`#@5^/J
    private UserService us;海岸线网络聚合X Q{*n E1OS-E"zJ
    海岸线网络聚合Ohf,s4?jM
    public void setUs(UserService us)海岸线网络聚合 r B\BS#B u%EO
    {
6P8UXAS1?Z.t$E0        this.us = us;
{UhF"? f#o a0    }
3KJ'yg}L:xq0
4u(~+];L_0    @Override海岸线网络聚合pTFZg"X-L
    public String execute() throws Exception海岸线网络聚合Z6}|,[-CS-jiXX;[#x
    {海岸线网络聚合4o4?8`3CR:Hy
       Map session = ActionContext.getContext().getSession();海岸线网络聚合u+JBe!d3JH*~]-Y6D

d-K-U8Y\C\ K3a0        int userId = us.loginValid(user, pass);海岸线网络聚合!q"c y4z&n5a$I:xu
       if (userId > 0) {海岸线网络聚合6ZrO*BBZ};r2C@
           session.put("userId", userId);
Y0M)em9?F2}/C3[vl0           return SUCCESS;
{ev)eI@8aiD/c0       } else {海岸线网络聚合N*nRh)} ~{Hyy@
           addActionError("用户名/密码不匹配");海岸线网络聚合 P1\q(SE]\1Z D
       }海岸线网络聚合"Vt.{@i4NY*sm

ym{5{'PYOUMio0海岸线网络聚合M[.Q C"G'O)l&Z
       return "failure";海岸线网络聚合-]do t'\$ZM{
    }海岸线网络聚合Q*^7lJ4c/G
海岸线网络聚合_M+ZZx M"@
    public void setUser(String user)海岸线网络聚合)`B*p[(L0r8R+h'_9k||
    {海岸线网络聚合_6[|'W@@ [N
       this.user = user;
YD8zT^u6I0    }海岸线网络聚合8q`5^L-KKJ:F F(]
    public String getUser()
.K ^(P9\*OKv0    {海岸线网络聚合"IL ~.C(C0kP
        return this.user;
{Pdgwy@x|0    }
GJ{ o a'R(PDN+B0海岸线网络聚合`b g f~,PR4~\
    public void setPass(String pass)
*D'h6ykS4A4hZ0    {
q2n/C O({"x-WE\0       this.pass = pass;
*B Xq*]2R5`0    }
(tE||d2t[0    public String getPass()
L-y:g)iA.V%|2V0    {海岸线网络聚合;fZ5W{&mj
        return this.pass;海岸线网络聚合t+f;o2BoAv
    }海岸线网络聚合;C]U.g&a
    海岸线网络聚合 de'_W(w&g6x:`
}海岸线网络聚合G$kkt"c:cBDu2`:U
海岸线网络聚合,CN"MurU

5fR0}!M"Ds0public class RegistAction extends ActionSupport{
/AY(c"|%NJf:q0    private String user;海岸线网络聚合Hx N|#Q]~
    private String pass;海岸线网络聚合W2a2ki0]:T
    private String email;
/W9R#VMYlB'k0    private UserService us;海岸线网络聚合3yi!P[aW
海岸线网络聚合W2mw3}E?p
    public void setUs(UserService us)
3ow&C&TgSLI D0    {
3}h4RPP0        this.us = us;
-jW r;m3C#zl#z:un0    }海岸线网络聚合7h;F'L,L}#RG2mz
    海岸线网络聚合(mj,lX:c1H
    @Override海岸线网络聚合|sX8OG:yrg ]y3{8Q
    public String execute() throws Exception海岸线网络聚合+V1\~vs)I^X
    {
Lo-fXh4H*_!_ m0       Map session = ActionContext.getContext().getSession();海岸线网络聚合A#`:A*Kn]6g8I%@h
海岸线网络聚合/ozQ4L]A

%Eo@ qfc T0       if (us.addUser(user, pass, email) > 0) {
8l t5o8g K4t P0           return SUCCESS;
p.SKE/d@0~&d"vU%o;o0       } else {海岸线网络聚合'Us%{ t z5Q N
           addActionError("注册失败,请重试!");
HKm3V4^u4J-yJOu0           return "failure";海岸线网络聚合{4T p${F,IR
       }
P[i5e'm0    }海岸线网络聚合n7l\u!Wvo

8m Ti2]!}Mot8I$z0
_ h2\'~kl(At`0    public void setUser(String user)
9M-xj%~Biq(T0    {海岸线网络聚合P!m&eF9K [!|
       this.user = user;海岸线网络聚合+F ? | _4A X f B
    }
9Q7VI%de:jB~u.X^0    public String getUser()海岸线网络聚合v(Z8GB l5SQrp9gM
    {
ak?W S bjv0        return this.user;海岸线网络聚合1V+uv_4maq
    }
R ~9v {5g,z-_0海岸线网络聚合:c}s3Ji!ORE t+y D
    public void setPass(String pass)
5g2Oc'e!E8f#R0T0    {海岸线网络聚合2^Vf&n8F$o"F
       this.pass = pass;
6E"b3e$|J(_i0    }
jD6J\{2yw0    public String getPass()
R\2l*pwn2ID\,t0    {
U)E6p8[9v:`-xw0        return this.pass;海岸线网络聚合k1z~W4z:nQ9j;k
    }
?/V$w'g}jQ$`!d4U |0
8i1uE)v9h;h3H A%s0    public void setEmail(String email)海岸线网络聚合q)}i8j9M7fj
    {海岸线网络聚合"Bx!s1M3[l5B!D}
       this.email = email;
(A4GJ{7Na-t3T%x0    }
j$u]rz)w#ucX%W0    public String getEmail()
9v Ko2wD8g(\I!?'J0    {
})b&q0` L f0        return this.email;
.t/O'_Q'A0    }海岸线网络聚合!I p|9SN[7QJ&\7bX$Ql

-SM$p7Tn)`J-G0}海岸线网络聚合$`l iB-nwnKR

rh3oh9yA^hK7X*pe v0第四步:配置struts.xml中的actionapplicationContxt.xml中的bean
`$Wh.I L0Struts.xml
s ~1jD"wDS%o0海岸线网络聚合s\v&T/qv
<struts>海岸线网络聚合p$y$h%vv"eG@
    <include file ="struts-default.xml"/> 海岸线网络聚合(l RUye+]
    海岸线网络聚合EAB/ep2vFA-u
    <constant name="struts.i18n.encoding" value="GBK"/>
Q"ZW6^uV0    <constant name="struts.objectFactory" value="spring"/>
]2F i/O3E6B/SO;u0    
+Ph6w+v'Ty7V0    <package name="fengzhizi" extends="struts-default">海岸线网络聚合gTi6?"p8@*Nr)I

x/D!nNV@*q0       <global-results>海岸线网络聚合(XNi#a*\cc6`
           <!-- 下面定义的结果对所有的Action都有效 -->海岸线网络聚合a |R)}7f0[n6mfGm}
           <result name="exception">/error.jsp</result>海岸线网络聚合(? }/n3\Kx s
           <result name="success">/success.jsp</result>
U0]o g'p,K0        </global-results>
-H8Z JijE0
&T V4i,cubj)M0        <global-exception-mappings>
r0kaP2[3[_8?*Sw0           <!-- 指Action抛出Exception异常时,转入名为exception的结果。 -->
2a\W U'I"W/PdTy)x0           <exception-mapping exception="java.lang.Exception" result="exception"/>
VA[ [#XP-dl0       </global-exception-mappings> 海岸线网络聚合"I[oc;l S
海岸线网络聚合p"f;\Y,_K}Qi;C
       <action name="Regist" class="com.hopeteam.struts.actions.RegistAction">海岸线网络聚合1r/I:w*{)@k
           <result name="failure">/Regist.jsp</result>
L9Cy`:X6x4AN0        </action>
Tu;D%gq3w0海岸线网络聚合'v$C5y;H2G:Bu8g/TT
       <action name="Login" class="com.hopeteam.struts.actions.LoginAction">
WO%Q9v p$V.cq0           <result name="failure">/Login.jsp</result>海岸线网络聚合*| @/CY`F;mXY
        </action>海岸线网络聚合)de*|J X
海岸线网络聚合n V5[F T"Y
    </package> 海岸线网络聚合z6hqg"V w#{AN

\k0F-]H9n3n(Qr\F0</struts>
-p4Q!|I+f4R+|0
} c g h I7@`0applicationContext.xml中的事务处理,和servicedao bean的配置
] xwsC GV/gV0    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">海岸线网络聚合)g/x#L9Ukm8G
        <property name="sessionFactory" ref="sessionFactory"/>海岸线网络聚合ubyD\l zD(cm
    </bean>海岸线网络聚合 k!a ?-ru["d
海岸线网络聚合/W}m0o:x}/v9@!P
    <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">海岸线网络聚合-]|1h&e8J3n#^L
        <!--  事务拦截器bean需要依赖注入一个事务管理器 -->
'o$C g:|t$[:w0        <property name="transactionManager" ref="transactionManager"/>海岸线网络聚合/`+x w5~FrL
    <property name="transactionAttributes">海岸线网络聚合C } Kj1sfSW
           <!--  下面定义事务传播属性-->
W:m.Q1J:jG]C0           <props>
IuO)L q*n vL [0               <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
^T9@U#lT]?)@d0           <prop key="*">PROPAGATION_REQUIRED</prop>
d B,C5rI)K2B8}0           </props>
&S},l3U[#hm H{0        </property>
:b)U0p,F2`Zh0    </bean>海岸线网络聚合-}?d;{7oc,et

t*n#I6V5h0    <!-- 定义BeanNameAutoProxyCreator-->
2Jy|mSO]2ye3q&w9cP0    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">海岸线网络聚合y9ew?CoqkK
        <!--  指定对满足哪些bean name的bean自动生成业务代理 -->
I3\)g*Y#WFGl N3e)u*m0        <property name="beanNames">海岸线网络聚合%B%L~V5v;xM;RAcN n
             <value>us</value>海岸线网络聚合1C!Dg;Lu#qx
        </property>海岸线网络聚合Ht I R)xm(a
        <!--  下面定义BeanNameAutoProxyCreator所需的事务拦截器-->海岸线网络聚合*Se&@)u!?C IETD
        <property name="interceptorNames">海岸线网络聚合 XW3S@;e9v d
            <list>海岸线网络聚合n+d1]7C"T
                <!-- 此处可增加其他新的Interceptor -->
nEL Yb I|EJVY0                <value>transactionInterceptor</value> 海岸线网络聚合 B9}|8ML&j
            </list>海岸线网络聚合0gg+|(B1wui
        </property>海岸线网络聚合*zja!Y1K
    </bean>
.oK5m`s8n0    <bean id="us" class="com.hopeteam.service.impl.UserServiceImpl">
?$ekfo rT~#e0         <property name="userDao" ref="userDao"/>
Qe[b}!L"P0    </bean>海岸线网络聚合 p2w,{'YV {HK*S
海岸线网络聚合"O%o+F4t|:n)`,F#|
    <bean id="userDao" class="com.hopeteam.dao.impl.UserDaoImpl">海岸线网络聚合 zf1Eygc5C
       <property name="sessionFactory" ref="sessionFactory"/>海岸线网络聚合+R;wXm'~#k7U
</bean>海岸线网络聚合r~ ]vW,\aa Z

s:T6D SJs0第五步,编写jsp,然后部署web工程海岸线网络聚合CE%O.?9F!o^3ljLA%C
给出截图吧,jsp页面就省略了海岸线网络聚合(uR0n:H4_#?m

5?[Y Wq?0

TAG: hibernate 原创 Spring Hibernate

我来说两句

(可选)

日历

« 2008-11-21  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

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

RSS订阅

Open Toolbar