Jakarta-Struts是Apache軟件組織提供的一項開(kāi)放源代碼項目,它為Java Web應用提供了模型-視圖-控制器(MVC)框架,尤其適用于開(kāi)發(fā)大型可擴展的Web應用. Struts為Web應用提供了一個(gè)通用的框架,使得開(kāi)發(fā)人員可以把精力集中在如何解決實(shí)際業(yè)務(wù)問(wèn)題上. 此外,Struts框架提供了許多可供擴展和定制的地方使得應用程序可以方便的擴展框架,來(lái)更好的適應用戶(hù)的實(shí)際需求.
本文是一篇介紹利用MyEclipse進(jìn)行Struts開(kāi)發(fā)的基礎教程,通過(guò)詳細的描述和大量的圖片來(lái)展現Struts開(kāi)發(fā)的具體過(guò)程. 這里所采用的是我們經(jīng)常會(huì )遇到的用戶(hù)登陸的實(shí)例,如果用戶(hù)登陸成功進(jìn)入程序的主界面(main.jsp),否則返回登陸頁(yè)面并提示錯誤信息.
n 創(chuàng )建Web項目
在菜單中依次點(diǎn)擊File→New→Project,然后在彈出的窗口中選擇J2EE→Web Project,啟動(dòng)Web項目創(chuàng )建向導。

點(diǎn)擊下一步,在項目名稱(chēng)中,我們輸入StrutsDemo,然后修改Context root URL為/hello,其他我們使用默認的設置,最后點(diǎn)擊Finish按鈕完成創(chuàng )建工作.

在項目創(chuàng )建后,我們需要讓它支持Struts功能. 在菜單中選擇MyEclipse→Add Struts Capabilities. 在彈出的對話(huà)框中, 將Struts specification修改為1.2,將Base package for new classes修改為我們喜歡的包名,如com.study.struts,修改完成后點(diǎn)擊Finish按鈕.

在Package Explore中,我們可以看到增加了Struts能力后,MyEclipse在Web項目中增加了很多jar文件和tld文件,請參考下圖:

n 創(chuàng )建JSP文件
在我們的登陸程序中一共需要兩個(gè)JSP文件. 一個(gè)是index.jsp,作為用戶(hù)登陸的界面和登陸失敗后的返回界面. 一個(gè)是main.jsp,作為登陸成功后的主界面.
在Package Explore中雙擊struts-config.xml將其打開(kāi),在源代碼窗口中點(diǎn)擊左側工具欄中的
,在彈出的JSP文件創(chuàng )建向導中修改文件名為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 )建后,我們可以根據自己的需要來(lái)修改其中的內容. 對于index.jsp,我們修改Form的action屬性和提交參數的名字, 并增加了<html:error>標簽,可參考下面的代碼:
<%@ 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>
對于main.jsp,我們修改<body>中的輸出信息,提示用戶(hù)登陸成功,代碼如下:
<body>
You have logged in!<br>
</body>
保存兩個(gè)JSP文件和struts-config.xml文件.
n 創(chuàng )建ActionForm
在我們的登陸程序中需要用戶(hù)提交用戶(hù)名和密碼,因此我們需要創(chuàng )建一個(gè)ActionForm Bean來(lái)保存提交的HTML表單數據.
將源代碼窗口中的標簽切換到struts-config.xml,右上角的Outline窗口內容如下:

選中其中的form-beans,右鍵單擊,在彈出的菜單中選擇New Form. 在Form Bean創(chuàng )建向導對話(huà)框中,輸入Use case的名字login,然后在下方的Form Properties中增加name和password兩個(gè)屬性.(注意本例子暫時(shí)不設置validate方法和reset方法)



n 創(chuàng )建Action
在完成上面的創(chuàng )建后,我們接下來(lái)創(chuàng )建Action類(lèi). 在源代碼窗口中切換到struts-config.xml文件,點(diǎn)擊左側工具欄中的
在對話(huà)框的下部Optional Details中,點(diǎn)擊Name行末的Browse按鈕,選中我們剛才創(chuàng )建的loginForm.

點(diǎn)擊Input Source行末的Browse按鈕,在彈出的對話(huà)框中選中index.jsp.

將Optional Details標簽切換到Forwards,點(diǎn)擊Add按鈕增加一個(gè)局部的Forward.

這里的success是我們給Forward的名字,你也可以使用其它你喜歡的名字. 增加后如下:

完成新建Action的設置后如下圖:

點(diǎn)擊Finish按鈕后,MyEclipse會(huì )為我們創(chuàng )建一個(gè)名叫LoginAction.java的文件,我們可以根據自己的需要來(lái)實(shí)現具體的驗證邏輯. 這里,我們僅僅通過(guò)登陸的名字是否為hello來(lái)判斷. 如果不是提示登陸失敗. 修改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()));
}
}
從上面的代碼中我們可以看到,當用戶(hù)登陸失敗后會(huì )使用一個(gè)鍵值為error.msg的ActionError. 因此,我們在Package Explore中找到ApplicationResources.properties文件并雙擊打開(kāi),輸入以下內容并保存.
error.msg=Login Failed
在完成了上述所有的工作后,我們可以看到圖示化的struts-config.xml如下:

n 部署和測試應用程序
這里StrutsDemo的部署同其他的Web應用程序一樣,我們就不在贅述了,具體的方法可以參閱我的上一篇文章“利用MyEclipse進(jìn)行Web開(kāi)發(fā)”
部署成功后,在IE的地址欄中輸入http://localhost:8080/hello/index.jsp并回車(chē).

我們首先驗證登陸失敗的場(chǎng)景. 當我們輸入的用戶(hù)名不是hello時(shí),應返回到登陸頁(yè)面并提示登陸失敗. 在Name中輸入abcd,點(diǎn)擊Submit按鈕.

我們可以看到又回到了登陸頁(yè)面,并且出現了Login Failed的提示信息. 修改用戶(hù)名為hello,然后點(diǎn)擊Submit按鈕.

完.
聯(lián)系客服