Jakarta-Struts是Apache軟件組織提供的一項開放源代碼項目,它為Java Web應用提供了模型-視圖-控制器(MVC)框架,尤其適用于開發(fā)大型可擴展的Web應用. Struts為Web應用提供了一個通用的框架,使得開發(fā)人員可以把精力集中在如何解決實際業(yè)務問題上. 此外,Struts框架提供了許多可供擴展和定制的地方使得應用程序可以方便的擴展框架,來更好的適應用戶的實際需求.
本文是一篇介紹利用MyEclipse進行Struts開發(fā)的基礎教程,通過詳細的描述和大量的圖片來展現(xiàn)Struts開發(fā)的具體過程. 這里所采用的是我們經(jīng)常會遇到的用戶登陸的實例,如果用戶登陸成功進入程序的主界面(main.jsp),否則返回登陸頁面并提示錯誤信息.
n 創(chuàng)建Web項目
在菜單中依次點擊File→New→Project,然后在彈出的窗口中選擇J2EE→Web Project,啟動Web項目創(chuàng)建向導。
點擊下一步,在項目名稱中,我們輸入StrutsDemo,然后修改Context root URL為/hello,其他我們使用默認的設置,最后點擊Finish按鈕完成創(chuàng)建工作.
在項目創(chuàng)建后,我們需要讓它支持Struts功能. 在菜單中選擇MyEclipse→Add Struts Capabilities. 在彈出的對話框中, 將Struts specification修改為1.2,將Base package for new classes修改為我們喜歡的包名,如com.study.struts,修改完成后點擊Finish按鈕.
在Package Explore中,我們可以看到增加了Struts能力后,MyEclipse在Web項目中增加了很多jar文件和tld文件,請參考下圖:
n 創(chuàng)建JSP文件
在我們的登陸程序中一共需要兩個JSP文件. 一個是index.jsp,作為用戶登陸的界面和登陸失敗后的返回界面. 一個是main.jsp,作為登陸成功后的主界面.
在Package Explore中雙擊struts-config.xml將其打開,在源代碼窗口中點擊左側工具欄中的
,在彈出的JSP文件創(chuàng)建向導中修改文件名為index.jsp,選擇5]Standard JSP using Struts 1.2 with a form模板,然后點擊Finish按鈕. MyEclipse會為我們創(chuàng)建一個名為index.jsp的帶一個Form的JSP文件.
按照同樣的方法創(chuàng)建main.jsp. 由于我們只是簡單的在主界面中顯示成功登陸的信息,因此在創(chuàng)建的時候,我們選擇的是第一個缺省的模板.
JSP文件創(chuàng)建后,我們可以根據(jù)自己的需要來修改其中的內容. 對于index.jsp,我們修改Form的action屬性和提交參數(shù)的名字, 并增加了<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>中的輸出信息,提示用戶登陸成功,代碼如下:
<body>
You have logged in!<br>
</body>
保存兩個JSP文件和struts-config.xml文件.
n 創(chuàng)建ActionForm
在我們的登陸程序中需要用戶提交用戶名和密碼,因此我們需要創(chuàng)建一個ActionForm Bean來保存提交的HTML表單數(shù)據(jù).
將源代碼窗口中的標簽切換到struts-config.xml,右上角的Outline窗口內容如下:
選中其中的form-beans,右鍵單擊,在彈出的菜單中選擇New Form. 在Form Bean創(chuàng)建向導對話框中,輸入Use case的名字login,然后在下方的Form Properties中增加name和password兩個屬性.(注意本例子暫時不設置validate方法和reset方法)
n 創(chuàng)建Action
在完成上面的創(chuàng)建后,我們接下來創(chuàng)建Action類. 在源代碼窗口中切換到struts-config.xml文件,點擊左側工具欄中的
在對話框的下部Optional Details中,點擊Name行末的Browse按鈕,選中我們剛才創(chuàng)建的loginForm.
點擊Input Source行末的Browse按鈕,在彈出的對話框中選中index.jsp.
將Optional Details標簽切換到Forwards,點擊Add按鈕增加一個局部的Forward.
這里的success是我們給Forward的名字,你也可以使用其它你喜歡的名字. 增加后如下:
完成新建Action的設置后如下圖:
點擊Finish按鈕后,MyEclipse會為我們創(chuàng)建一個名叫LoginAction.java的文件,我們可以根據(jù)自己的需要來實現(xià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()));
}
}
從上面的代碼中我們可以看到,當用戶登陸失敗后會使用一個鍵值為error.msg的ActionError. 因此,我們在Package Explore中找到ApplicationResources.properties文件并雙擊打開,輸入以下內容并保存.
error.msg=Login Failed
在完成了上述所有的工作后,我們可以看到圖示化的struts-config.xml如下:
n 部署和測試應用程序
這里StrutsDemo的部署同其他的Web應用程序一樣,我們就不在贅述了,具體的方法可以參閱我的上一篇文章“利用MyEclipse進行Web開發(fā)”
部署成功后,在IE的地址欄中輸入http://localhost:8080/hello/index.jsp并回車.
我們首先驗證登陸失敗的場景. 當我們輸入的用戶名不是hello時,應返回到登陸頁面并提示登陸失敗. 在Name中輸入abcd,點擊Submit按鈕.
我們可以看到又回到了登陸頁面,并且出現(xiàn)了Login Failed的提示信息. 修改用戶名為hello,然后點擊Submit按鈕.
完.