文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>使用myeclipse集成struts,hibernate,spring的一个..

使用myeclipse集成struts,hibernate,spring的一个..

时间:2007-02-01  来源:xiaobian

时间走过了深秋,又走过了寒冬,走到一切都不能再回头,于是我们沉默着束手,看年华似水流......

使用myeclipse集成struts,hibernate,spring的一个示例程序

2006-10-05 10:47:43

天气: 晴朗 心情: 高兴

在java企业应用领域,ejb的功能强大同ejb的配置复杂,难于学习一样出名。但在以前我们又有什么办法呢?只有硬着头皮来学ejb。真有点“明知山有虎,偏向虎山行”的精神。现在形式有了乐观的变化,java开源的持续走红,使得开发java企业级应用不再局限于ejb领域。这里我主要介绍一下怎样采用开源的Spring,Hibernate以及Struts构建一个轻量级的架构。MyPlaces(自我空间 自由展现)b+SBa,I#fo*[
一、整体架构介绍
J-E$qtZjGuest在软件工程领域,为了降低模块耦合度,提高模块的可重用性,分层一直是广为采纳的一个方法。其实分层还可以使开发人员专注于某一层进行开发,使得软件开发的分工变细,提高生产效率(这一点上堪比福特发明的流水线生产汽车的做法,各个工人负责特定部件的生产,最后组装)。MyPlaces(自我空间 自由展现)'m|4]:W+Sb
一个企业级的java应用,通常分为以下几层:UI层,业务逻辑层,数据持久层,域对象层。下面对这几层分别作简要介绍:
Td4en0i(Qq.CGuest1.     UI层:负责与用户交互,包括:接受用户的请求,把处理结果返回给用户。这里我们采用struts来UI层,虽然比起Tapestry以及JSF这些事件驱动的表现层技术而言,Struts的设计显得有些老土,但它目前仍是表现层事实上的标准,所以我们还是选用它。
A.vc*L}"XGuest2.     业务逻辑层:主要负责具体的业务处理。通过Spring的IOC以及AOP实现各个功能的耦合相连MyPlaces(自我空间 自由展现)F"Q My5?L$F5}
3.     数据持久层:主要负责与底层的数据库打交道。这里我们采用Spring封装的Hibernate操作来简化实际的编码。主要的操作为CRUD(create ,read,update,delete)MyPlaces(自我空间 自由展现)M8E%I:NKP0`tG F e
4.     域对象层:具体的实体类,如老师,学生等等这些具体的类(注意:需要与数据库中的某一标对应)。
5@2[C5} hCQS6WGuest以上只是简单介绍了各个层的划分以及各层所对应的开源框架,要详细了解各层的具层信息,需要访问 struts,hibernate,spring的官方网站。
9d*lhn p;w:B qGuest二、实例分析MyPlaces(自我空间 自由展现)\,iuq.GtMh ] Y
实例说明:一个网站登录的例子,比较简单,但能说明各层是如何协调工作的。MyPlaces(自我空间 自由展现)%O-e M!d3^f/tGe
工具:jdk1.5,eclipse3.2,myeclipse5.0GA,mysql5.0,tomcat5.5,至于这几个工具到底该怎么装这里我就不多说了,大家不清楚的可以到网上搜搜。下面是具体操作步骤:MyPlaces(自我空间 自由展现)G:n&z[}I0|h
预备工作:用mysql创建一个test数据库,再创建一个user表,再创建两个字段username和password。脚本如下
-] KKFx,? CAtTGuestMyPlaces(自我空间 自由展现)5e m2siDK_yg
DROP DATABASE IF EXISTS `test`;MyPlaces(自我空间 自由展现)0x2N#?9^ia,N6v.FB
CREATE DATABASE `test` MyPlaces(自我空间 自由展现)1x&_co3F
USE `test`;MyPlaces(自我空间 自由展现)dxT[T9L#UCy
MyPlaces(自我空间 自由展现)h:T)xP5a^q
CREATE TABLE `user` (
/e WM/JAD@EGuest`id` int(11) NOT NULL auto_increment,MyPlaces(自我空间 自由展现)*v)RE.Tc#I
`username` varchar(30) NOT NULL default '',
M#k9u!uSLV:c4Y:NGuest`password` varchar(30) default '',
z@~)\1\^5a)H dGuestPRIMARY KEY (`id`)
~GJ"\ WHh9tzGuest) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
f;U,q+n(r[-^Guest打开myeclipse的database explore透视图
J}i&|2]cd:LfRGuestMyPlaces(自我空间 自由展现)j-X9\U+{?1K9NaS

'M2Uz9pVQb;K8S#B7HGuestMyPlaces(自我空间 自由展现)'YZKbU7mA:RN

\)Ljg tEl)v\Guest右键单击左侧的空白区域 ,点击 new 按钮
UGy X6S Jq E5],]NGuest
)gN A+UQa5V;|!y6E ~Guest
.b8Sq.N5C4gPYJGuest
8{+J%[email protected] pGuest单击“configure database driver”来配置数据库的驱动,你必须有mysql的jdbc驱动 ,没有的到mysql的官方网站上下载。
[6rO3GvZGuest
o+N7{G%`n0zGuestMyPlaces(自我空间 自由展现)\#` r~ `\7X H

/Tu%M%m8k+s \/R9?9]Guest测试数据库配置是否成功。
u UJ.Tm|1s C FGuest
dmpc q;F9|#eGuest
;U/Rm-E|(h*TmGuest
*YJ_ RX7}GuestMyPlaces(自我空间 自由展现)\wYW#fQ{0k
1.     新建一个myeclipse的web工程MyPlaces(自我空间 自由展现)XDJ"Oj(K_
MyPlaces(自我空间 自由展现)kN F4z[b

oR,@ reGuest
i;ZZP@2[ L2} xwwGuestMyPlaces(自我空间 自由展现) su;t1W)P"?:lj
2.     引入Spring包
(j%@hW @(sGuest右键工程名
md L*D"ge"pGuestMyPlaces(自我空间 自由展现)9d&cj7vpO[4u|1e&Y|
MyPlaces(自我空间 自由展现)$CQ SP rg v3b)J

p7V Br.R)hgrGuest
B`,][$iqpGuestMyPlaces(自我空间 自由展现)&f5nB,s)fc4Z$Y
MyPlaces(自我空间 自由展现).x)oWHGweva(s(@
MyPlaces(自我空间 自由展现)I h;HRxLuX)F?e5r_
注意:这里为了省得以后再添加spring的相关包,所以一次性的选中了所有的包。选中
z-zmr2D2B nu0[i-SGuestCopy选项,它会把这些包拷贝到/WebRoot/WEB-INF/lib目录下,方便以后的实际部署。MyPlaces(自我空间 自由展现)|z\7e sD)q j3h
3.     添加hibernate包MyPlaces(自我空间 自由展现)QC^Z1QYo5|-x7t

e*Mw i8y%NfGuestMyPlaces(自我空间 自由展现)#Q:i{A;F?@@ m'a;m

-@F6S wA%cC+U ^Guest系统会检测到该工程已经添加了Spring包,选择使用Spring的配置文件MyPlaces(自我空间 自由展现)-r]?i7x/O _ dN

:q.sFp6mR-lGuest
%o"ky.?9Dw[v]XGuestMyPlaces(自我空间 自由展现)m/[nC rx@ K
点击 next
9Zc\+K_Wk @LQzGuestMyPlaces(自我空间 自由展现).FZMC Z,CR
MyPlaces(自我空间 自由展现)WOT O xv+w'q}&I

%M?G8S/P3O4hQGuest点击 next
K-A ^i_!x!B"XGuestMyPlaces(自我空间 自由展现)rg%N6_ i+z(J
MyPlaces(自我空间 自由展现)U z;S$q_nmP$i
MyPlaces(自我空间 自由展现)2plU2ZA/n A
点击 nextMyPlaces(自我空间 自由展现)4~D-C? {-c

]DyUu}A*EGuestMyPlaces(自我空间 自由展现)r xw7^0_{+Nl
MyPlaces(自我空间 自由展现))_F$a8n MO
最后点击Finish按钮即可。MyPlaces(自我空间 自由展现))NP*Z:p[x*i
4切换到database explore视图,右键 点击 user 表的“Hibrnate Reverse Engineering”MyPlaces(自我空间 自由展现)}W ~e+VS;iJX
MyPlaces(自我空间 自由展现)~;mO/r.[T
MyPlaces(自我空间 自由展现)z(~ QRz
MyPlaces(自我空间 自由展现)X7~ ~Fx\)q)P?
弹出如下窗口MyPlaces(自我空间 自由展现)8W j4KCvl.]z

.sl9s6RgLTyaGuestMyPlaces(自我空间 自由展现)2WQ:m(u)u j

|9N\"E!H(KG,c{Guest点击 “next”MyPlaces(自我空间 自由展现).wQaIq
MyPlaces(自我空间 自由展现)E#bQUFebbDN N
MyPlaces(自我空间 自由展现)k0a(esF-a7C.G

!N(}aVvGuest再单击finishMyPlaces(自我空间 自由展现) |;S6D{/PhD;kw
    在包视图中 可以看到 src下多了一个名为vo的package以及该包下的四个文件
l$t(K;u Vc,QGuestMyPlaces(自我空间 自由展现);e2`*?*^r}9Ic+?

M KF9H^#blfGuestMyPlaces(自我空间 自由展现)*Rf Evw'tR
为了更加直观地显示分层,我另建了一个名为dao的package,并把UserDAO.java移到dao中MyPlaces(自我空间 自由展现) J5w,J7\RV{\p
MyPlaces(自我空间 自由展现)(z6?M[t&aR @
MyPlaces(自我空间 自由展现)4isE#s[&o5O3B2h"\^
MyPlaces(自我空间 自由展现)[5~o![?W
同时注意在applicationContext.xml中把对UserDAO的引用部分也作相应修改。MyPlaces(自我空间 自由展现)+gI A['xRD9V
5.     建立业务逻辑层代码MyPlaces(自我空间 自由展现) awi'B?8[@
新建一个名为service的包,再在里面建立一个Service类,代码如下
*xYs E&M(AGuestpackage service;MyPlaces(自我空间 自由展现)R9O7_ ~k7\] A
MyPlaces(自我空间 自由展现)i6} xM:Z-Om0X
import java.util.List;
}4|%Z(xBKGuestMyPlaces(自我空间 自由展现)eB ASF"W
import vo.User;MyPlaces(自我空间 自由展现) {0}[j6gT)W.wX"W
import dao.UserDAO;
jim;mwP6AGuest
c+y?O{1~)T.MZGuestpublic class Service {
_VQ R4^%A$Y:s$iGuestMyPlaces(自我空间 自由展现)yv3] ]l&@ ~
    private UserDAO userDao;MyPlaces(自我空间 自由展现)?O8n!yb5~ ?(\%I
MyPlaces(自我空间 自由展现)*s!x{8y'kV0M
    public UserDAO getUserDao() {MyPlaces(自我空间 自由展现) r;[ ` [XjXj5Y/Y
        return userDao;MyPlaces(自我空间 自由展现)O(@o3L2I)m
    }MyPlaces(自我空间 自由展现)|+Y5`aaw
MyPlaces(自我空间 自由展现)[6RC3nua@6N
    public void setUserDao(UserDAO userDao) {MyPlaces(自我空间 自由展现)v*o1b&h }3Sp
        this.userDao = userDao;
? @$R rYOe#_*fGuest    }
WnaB*_N#\c Uo'fGuest
eGb$A'X"b?_~Guest    public boolean isValid(User user) {//判断用户是否合法MyPlaces(自我空间 自由展现).DM,WRnPJ
MyPlaces(自我空间 自由展现) }(M,F SO%f
        List result = userDao.findByExample(user);MyPlaces(自我空间 自由展现)Z"I!l:fW#NS
MyPlaces(自我空间 自由展现)"b0X!f6Uf
        if (result.size() > 0)MyPlaces(自我空间 自由展现) EY2^`'Vh
              return true;MyPlaces(自我空间 自由展现)qa7{kR9e*j
        elseMyPlaces(自我空间 自由展现)Z},}#oq
              return false;MyPlaces(自我空间 自由展现)?6B/{q.E._

.[KiN(eGuest    }MyPlaces(自我空间 自由展现)#w.j F(@ wZ!m7f c:D)F!j@

6}5G"xi#M+?w+t E-yGuest}
@(GaD.q { FGuest同时在applicationContext.xml中添加如下配置
e{#q3i4\]8_ a'OGuest<bean id="service" class="service.Service" singleton="false">
v0BW(]m&HGuest        <property name="userDao">
$g3L]Qn3^Guest              <ref bean="userDao" />MyPlaces(自我空间 自由展现)#uO+S r_X
        </property>
)SI C6yJ O _Guest    </bean>
0y[dS LU8Gl)BD&uGuest6.配置UI层
$A8XcSh5j eGuest添加struts包,方法同添加spring一样
Q`z mLKGuest
'NxM x,I&\3PGuest
&bu6Y6P4@\1E Xj9yGuest
Q"f ]j S`Guest配置struts-config.xml文件,在空白区域右键单击 new 一个 action ,actionForm ,jspMyPlaces(自我空间 自由展现)y(mv"h$Y r,@7|-ZK

BN#IGfX1eGuestMyPlaces(自我空间 自由展现)7hZm-j0q3v

ZcrT0bd |5c ?8T,T,CGuestMyPlaces(自我空间 自由展现))[3y7Hngq6a4dO

Tr"^;iZ'KiGuestMyPlaces(自我空间 自由展现)$]E~b b&b7^

u;VI1\2Q-i dGuest
!o$G&~ ?2o Bh'{Guest
? JJw3e(U q r!PGuest
;v:j;i7d6Mm3Z)MGuest下一步MyPlaces(自我空间 自由展现)t*t2Gz;@1p_
对forward作设置,增加succeed转到welcome.jsp,fail转到login.jspMyPlaces(自我空间 自由展现)Y xUTA E@C1V

.jvDdj7t/YGuest在WebRoot目录下建立一个welcome.jsp文件,显示用户登录成功后的欢迎信息。
pxHQk*?N t"p c:eGuest6.     把struts和spring连接起来
'i%Q"n7m*~ M~*eGuest6.1修改struts-config.xml注意红色字体部分MyPlaces(自我空间 自由展现)x4L]0cd^6xM
<actionMyPlaces(自我空间 自由展现)sK4L{M3hy
    attribute="loginForm"MyPlaces(自我空间 自由展现)/[*}IR|Yc-wmG*d
    input="/login.jsp"MyPlaces(自我空间 自由展现)r xCVtE;b
    name="loginForm"MyPlaces(自我空间 自由展现)8x+^LFyB
    path="/login"MyPlaces(自我空间 自由展现) |Z't6T,q/dy Qk
    scope="request"
0q O pr+Fjz0a| _8xfGuest    type="org.springframework.web.struts.DelegatingActionProxy">MyPlaces(自我空间 自由展现)0X9W3o4e yp'oI$}O1b
    <forward name="fail" path="/login.jsp" />
2sF1EA8YW)QGuest    <forward name="succeed" path="/welcome.jsp" />MyPlaces(自我空间 自由展现)jT*@K ^|
</action>MyPlaces(自我空间 自由展现) f~#{;~vYAJ

b2H7SYm"~0?DGuest再在strut-config.xml中添加如下代码
Mos @s(x `8fGuest<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
P{W.~ ~%sz~%_wGuest<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />MyPlaces(自我空间 自由展现)zg!P*mw+eZ"O-o
</plug-in>>MyPlaces(自我空间 自由展现))P6ed9P T3V \%px
6.2修改applicationContext,增加以下内容MyPlaces(自我空间 自由展现)YOJ%\5wg#}XF
<bean name="/login" class="web.action.LoginAction"MyPlaces(自我空间 自由展现) R*l8~ MS}F6H
        singleton="false">MyPlaces(自我空间 自由展现)#VU*c-Tm$@eo*j!eo
        <property name="service">
&Sn5s[ U2R4w@Guest              <ref bean="service" />
MhH Q H%kJ@Guest        </property>
HBg6A"b fmm{Guest</bean>MyPlaces(自我空间 自由展现)!QI/r7T$F!h/MJ
6.3修改LoginAction.java部分代码,增加一个service变量,以及其 get/set方法(主要用于Spring IOC)。代码如下:
LJ,x*J$V_,?Guest/*
dG"M%GK'Eg_Guest* Generated by MyEclipse StrutsMyPlaces(自我空间 自由展现)3O+I'`1Y_\
* Template path: templates/java/JavaClass.vtlMyPlaces(自我空间 自由展现)K%V0G`Jr
*/MyPlaces(自我空间 自由展现)]An gD7R8BI
package web.action;MyPlaces(自我空间 自由展现) Y9| ~;|P N

%`Z.a/xj3P`*gGuestimport javax.servlet.http.HttpServletRequest;MyPlaces(自我空间 自由展现)pPd^.@4OBxx/A
import javax.servlet.http.HttpServletResponse;
pX-Q B"~ _"CDZGuestimport org.apache.struts.action.Action;MyPlaces(自我空间 自由展现) w5kw j!MG3on
import org.apache.struts.action.ActionForm;
sLW*vy,}acR9ZGuestimport org.apache.struts.action.ActionForward;
Z.\ro"RcCjbGuestimport org.apache.struts.action.ActionMapping;MyPlaces(自我空间 自由展现)-n v$Z Tc@*~.v
import web.form.LoginForm;
KxH4`-Up9Uf$BGuestimport service.Service;
2M5J5G/eVP)?/A.qGuestimport vo.User;MyPlaces(自我空间 自由展现)O5`_pa b

!tH f^7XGuest/**MyPlaces(自我空间 自由展现)/~PioN U6K,\
* MyEclipse Struts Creation date: 09-27-2006
6C|K)TN+WGuest*
/G,[o H6hYGuest* XDoclet definition:
hZ YK8txm#z6{QGuest* MyPlaces(自我空间 自由展现)x1h3Z*I"NK|'] Af
* @struts.action path="/login" name="loginForm" input="/login.jsp"
7D&d;caT(ji+Y3aGuest*           scope="request" validate="true"MyPlaces(自我空间 自由展现):ZQ [ u z Wdd/b
* @struts.action-forward name="fail" path="/login.jsp"
AN t$X\tBGuest* @struts.action-forward name="succeed" path="/welcome.jsp"MyPlaces(自我空间 自由展现)(|{xh~{:O
*/
6Ih \`KK$[ hS1dqGuestpublic class LoginAction extends Action {
kr$h6{-Q*s)M/u y?Guest    /*
6fV"V&B.e|BQ5[Guest    * Generated Methods
6zN \}DP?Mn&QGuest    */MyPlaces(自我空间 自由展现)X1yH?#a}CQK
MyPlaces(自我空间 自由展现)9a;ytS"Q"}
    /**
S?;rk mG xoGuest    * Method execute
#N}s+ry B~-dQGuest    *
X~/b-],c2PGuest    * @param mapping
{`7S%P8ls'V%U'ZGuest    * @param form
xzGV-b+a K*NXrUGuest    * @param requestMyPlaces(自我空间 自由展现)_0CKq0_JvQ g'Q
    * @param response
`,PV%Lpk.h?HFGGuest    * @return ActionForward
l1@0o%^r"{\Guest    */
/W3Lwo5EGuest
e]9lL'c;d1]Guest    private Service service;MyPlaces(自我空间 自由展现) A.b$wU+|F;q

&GdRhp4J4G#O-AGuest    public void setService(Service service) {MyPlaces(自我空间 自由展现)/K7d8v,XD^5v$TE
        this.service = service;
/?hE3{+^|)m ?3`!l+_5J*zGuest    }
6pY z(FRIL LGuestMyPlaces(自我空间 自由展现)@9T"J?9D&^9o \+lS
    public Service getService() {
%t3A_9FlSGuest        return service;
k${8EeJ,cI[Guest    }
c8hZ\4z;D qGuest
@"a5w f(J{ fGuest    public ActionForward execute(ActionMapping mapping, ActionForm form,MyPlaces(自我空间 自由展现)&jI2K l3eG.L7D3Z#t
              HttpServletRequest request, HttpServletResponse response) {MyPlaces(自我空间 自由展现):uEq:O)Jw }'P
        LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method
3qx3n;g \JGuest                                                        // stub
$C _TMElGuest        User user = new User();
Nl0vx `@#m{HGuest        user.setPassword(loginForm.getPassword());MyPlaces(自我空间 自由展现)-J B&f3qc e:RM,h(R
        user.setUsername(loginForm.getUserName());MyPlaces(自我空间 自由展现)/w5Gs8G;\
        if (service.isValid(user))MyPlaces(自我空间 自由展现)Fk&`\'E5ko ^
              return mapping.findForward("succeed");
P`ZD8D7WXGuest        else
#F0z4V5t*t u8vLdGuest              return mapping.findForward("fail");MyPlaces(自我空间 自由展现)r8y |*WH9g*]
    }MyPlaces(自我空间 自由展现)s,[yr `2mE5ed
}MyPlaces(自我空间 自由展现) L8S [ IWWk;` Q
至此一个简单的登录已经做成。剩下的工作就是打包并发布你的应用了。
g WskGGuest
URL:http://www.myplaces.com.cn/index.php/action/viewspace/itemid/16991
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载