Jakarta-Struts是Apache軟件組織提供的一項(xiàng)開放源代碼項(xiàng)目,它為Java Web應(yīng)用提供了模型-視圖-控制器(MVC)框架,尤其適用于開發(fā)大型可擴(kuò)展的Web應(yīng)用. Struts為Web應(yīng)用提供了一個(gè)通用的框架,使得開發(fā)人員可以把精力集中在如何解決實(shí)際業(yè)務(wù)問題上. 此外,Struts框架提供了許多可供擴(kuò)展和定制的地方使得應(yīng)用程序可以方便的擴(kuò)展框架,來更好的適應(yīng)用戶的實(shí)際需求.
本文是一篇介紹利用MyEclipse進(jìn)行Struts開發(fā)的基礎(chǔ)教程,通過詳細(xì)的描述和大量的圖片來展現(xiàn)Struts開發(fā)的具體過程. 這里所采用的是我們經(jīng)常會(huì)遇到的用戶登陸的實(shí)例,如果用戶登陸成功進(jìn)入程序的主界面(main.jsp),否則返回登陸頁(yè)面并提示錯(cuò)誤信息.
n 創(chuàng)建Web項(xiàng)目
在菜單中依次點(diǎn)擊File→New→Project,然后在彈出的窗口中選擇J2EE→Web Project,啟動(dòng)Web項(xiàng)目創(chuàng)建向?qū)А?/span>
點(diǎn)擊下一步,在項(xiàng)目名稱中,我們輸入StrutsDemo,然后修改Context root URL為/hello,其他我們使用默認(rèn)的設(shè)置,最后點(diǎn)擊Finish按鈕完成創(chuàng)建工作.
在項(xiàng)目創(chuàng)建后,我們需要讓它支持Struts功能. 在菜單中選擇MyEclipse→Add Struts Capabilities. 在彈出的對(duì)話框中, 將Struts specification修改為1.2,將Base package for new classes修改為我們喜歡的包名,如com.study.struts,修改完成后點(diǎn)擊Finish按鈕.
在Package Explore中,我們可以看到增加了Struts能力后,MyEclipse在Web項(xiàng)目中增加了很多jar文件和tld文件,請(qǐng)參考下圖:
n 創(chuàng)建JSP文件
在我們的登陸程序中一共需要兩個(gè)JSP文件. 一個(gè)是index.jsp,作為用戶登陸的界面和登陸失敗后的返回界面. 一個(gè)是main.jsp,作為登陸成功后的主界面.
在Package Explore中雙擊struts-config.xml將其打開,在源代碼窗口中點(diǎn)擊左側(cè)工具欄中的
,在彈出的JSP文件創(chuàng)建向?qū)е行薷奈募麨?/span>index.jsp,選擇5]Standard JSP using Struts 1.2 with a form模板,然后點(diǎn)擊Finish按鈕. MyEclipse會(huì)為我們創(chuàng)建一個(gè)名為index.jsp的帶一個(gè)Form的JSP文件.
按照同樣的方法創(chuàng)建main.jsp. 由于我們只是簡(jiǎn)單的在主界面中顯示成功登陸的信息,因此在創(chuàng)建的時(shí)候,我們選擇的是第一個(gè)缺省的模板.
JSP文件創(chuàng)建后,我們可以根據(jù)自己的需要來修改其中的內(nèi)容. 對(duì)于index.jsp,我們修改Form的action屬性和提交參數(shù)的名字, 并增加了<html:error>標(biāo)簽,可參考下面的代碼:
<%@ page language="java"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html locale="true">
<head>
<html:base />
<title>index.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<center><html:errors/></center>
<html:form action="/login.do" method="post" focus="login">
<table border="0">
<tr>
<td>Login:</td>
<td><html:text property="name" /></td>
</tr>
<tr>
<td>Password:</td>
<td><html:password property="password" /></td>
</tr>
<tr>
<td colspan="2" align="center"><html:submit /></td>
</tr>
</table>
</html:form>
</body>
</html:html>
對(duì)于main.jsp,我們修改<body>中的輸出信息,提示用戶登陸成功,代碼如下:
<body>
You have logged in!<br>
</body>
保存兩個(gè)JSP文件和struts-config.xml文件.
n 創(chuàng)建ActionForm
在我們的登陸程序中需要用戶提交用戶名和密碼,因此我們需要?jiǎng)?chuàng)建一個(gè)ActionForm Bean來保存提交的HTML表單數(shù)據(jù).
將源代碼窗口中的標(biāo)簽切換到struts-config.xml,右上角的Outline窗口內(nèi)容如下:
選中其中的form-beans,右鍵單擊,在彈出的菜單中選擇New Form. 在Form Bean創(chuàng)建向?qū)?duì)話框中,輸入Use case的名字login,然后在下方的Form Properties中增加name和password兩個(gè)屬性.(注意本例子暫時(shí)不設(shè)置validate方法和reset方法)
n 創(chuàng)建Action
在完成上面的創(chuàng)建后,我們接下來創(chuàng)建Action類. 在源代碼窗口中切換到struts-config.xml文件,點(diǎn)擊左側(cè)工具欄中的
在對(duì)話框的下部Optional Details中,點(diǎn)擊Name行末的Browse按鈕,選中我們剛才創(chuàng)建的loginForm.
點(diǎn)擊Input Source行末的Browse按鈕,在彈出的對(duì)話框中選中index.jsp.
將Optional Details標(biāo)簽切換到Forwards,點(diǎn)擊Add按鈕增加一個(gè)局部的Forward.
這里的success是我們給Forward的名字,你也可以使用其它你喜歡的名字. 增加后如下:
完成新建Action的設(shè)置后如下圖:
點(diǎn)擊Finish按鈕后,MyEclipse會(huì)為我們創(chuàng)建一個(gè)名叫LoginAction.java的文件,我們可以根據(jù)自己的需要來實(shí)現(xiàn)具體的驗(yàn)證邏輯. 這里,我們僅僅通過登陸的名字是否為hello來判斷. 如果不是提示登陸失敗. 修改LoginAction的excute方法如下:
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
ActionErrors errors=new ActionErrors();
LoginForm loginForm = (LoginForm) form;
String username=loginForm.getName();
if(username.equals("hello")) {
return mapping.findForward("success");
} else {
errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("error.msg"));
saveErrors(request,errors);
return (new ActionForward(mapping.getInput()));
}
}
從上面的代碼中我們可以看到,當(dāng)用戶登陸失敗后會(huì)使用一個(gè)鍵值為error.msg的ActionError. 因此,我們?cè)?/span>Package Explore中找到ApplicationResources.properties文件并雙擊打開,輸入以下內(nèi)容并保存.
error.msg=Login Failed
在完成了上述所有的工作后,我們可以看到圖示化的struts-config.xml如下:
n 部署和測(cè)試應(yīng)用程序
這里StrutsDemo的部署同其他的Web應(yīng)用程序一樣,我們就不在贅述了,具體的方法可以參閱我的上一篇文章“利用MyEclipse進(jìn)行Web開發(fā)”
部署成功后,在IE的地址欄中輸入http://localhost:8080/hello/index.jsp并回車.
我們首先驗(yàn)證登陸失敗的場(chǎng)景. 當(dāng)我們輸入的用戶名不是hello時(shí),應(yīng)返回到登陸頁(yè)面并提示登陸失敗. 在Name中輸入abcd,點(diǎn)擊Submit按鈕.
我們可以看到又回到了登陸頁(yè)面,并且出現(xiàn)了Login Failed的提示信息. 修改用戶名為hello,然后點(diǎn)擊Submit按鈕.
完.
聯(lián)系客服