一個(gè)簡(jiǎn)單的struts例子
1、 生成一個(gè)新的Web應(yīng)用,假設(shè)我們生成的應(yīng)用程序的根目錄在/Webapps/mystruts目錄。
2、 到http://jakarta.apache.org/ 下載Struts的安裝文件
3、 在/Webapps/mystruts目錄下新建WEB-INF/lib目錄從解壓的文件中拷貝下列jar文件到/Webapps/mystruts/WEB-INF/lib目錄。按照struts-example的lib文件夾應(yīng)該是以下幾個(gè)jar文件(或者直接從struts-example的lib文件夾拷貝過(guò)來(lái)),并將struts.jar填入classpath路徑(編譯Action需要引用):
commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-fileupload.jar
commons-logging.jar
commons-validator.jar
jakarta-oro.jar
struts.jar
4、 創(chuàng)建一個(gè)web.xml文件內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3
//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
</web-app>
5、 創(chuàng)建一個(gè)基本的struts-config.xml文件,并把它放在/Webapps/mystruts/WEB-INF/目錄中,內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1
//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<message-resources parameter="ApplicationResources" />
</struts-config>
6、 將tld文件拷貝到WEB-INF目錄下,包括:
struts-html.tld
struts-logic.tld
struts-nested.tld
struts-tiles.tld
struts-bean.tld
7、 建立logon.jsp,保存在mystruts目錄下
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<HTML>
<HEAD>
<TITLE><bean:message key="logon.jsp.title"/></TITLE>
<html:base/>
</HEAD>
<BODY>
<h3><bean:message key="logon.jsp.page.heading"/></h3>
<html:errors/>
<html:form action="/logonAction.do" focus="username">
<TABLE border="0" width="100%">
<TR>
<TH align="right"><bean:message key="logon.jsp.prompt.username"/></TH>
<TD align="left"><html:text property="username"/></TD>
</TR>
<TR>
<TH align="right"><bean:message key="logon.jsp.prompt.password"/></TH>
<TD align="left"><html:password property="password"/></TD>
</TR>
<TR>
<TD align="right">
<html:submit><bean:message key="logon.jsp.prompt.submit"/></html:submit>
</TD>
<TD align="left">
<html:reset><bean:message key="logon.jsp.prompt.reset"/></html:reset>
</TD>
</TR>
</TABLE>
</html:form>
</BODY>
</HTML>
8、 建立main.jsp文件,保存在mystruts目錄下:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<HTML>
<HEAD>
<TITLE><bean:message key="main.jsp.title"/></TITLE>
<html:base/>
</HEAD>
<BODY>
<logic:present name="userInfoForm">
<H3>
<bean:message key="main.jsp.welcome"/>
<bean:write name="userInfoForm" property="username"/>!
</H3>
</logic:present>
</BODY>
</HTML>
9、 在你的應(yīng)用程序的WEB-INF目錄下再建一個(gè)classes目錄,在新建的這個(gè)classes目錄下再建如下幾個(gè)目錄entity(用于存放ActionForm類)、action目錄(用于存放Action類)、bussness目錄(用于存放作為Model的業(yè)務(wù)對(duì)象類)。
10、 建立ActionForm,編譯后存放在entity目錄下:
package entity;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
public class UserInfoForm extends ActionForm{
private String username;
private String password;
public String getUsername() {
return (this.username);
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return (this.password);
}
public void setPassword(String password) {
this.password = password;
}
}
把如下代碼添加到/webapps/mystruts/WEB-INF/struts-config.xml文件中:
<form-beans>
<form-bean name="userInfoForm" type="entity.UserInfoForm" />
</form-beans>
第二步,我們建一個(gè)名為ApplicationResources.properties的文件(注意,名字要和struts-config文件中的名字相同),并把它放在/webapps/mystruts/WEB-INF/classes目錄下。它在struts-config.xml的配置。
#Application Resource for the logon.jsp
logon.jsp.title=The logon page
logon.jsp.page.heading=Welcome World!
logon.jsp.prompt.username=Username:
logon.jsp.prompt.password=Password:
logon.jsp.prompt.submit=Submit
logon.jsp.prompt.reset=Reset
#Application Resource for the main.jsp
main.jsp.title=The main page
main.jsp.welcome=Welcome:
11、 建立Action.
package action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionServlet;
import bussness.UserInfoBo;
import entity.UserInfoForm;
public final class LogonAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
UserInfoForm userInfoForm = (UserInfoForm) form;
//從web層獲得用戶名和口令
String username = userInfoForm.getUsername().trim();
String password = userInfoForm.getPassword().trim();
//聲明錯(cuò)誤集對(duì)象
ActionErrors errors = new ActionErrors();
//校驗(yàn)輸入
if(username.equals("")){
ActionError error=new ActionError("error.missing.username");
errors.add(ActionErrors.GLOBAL_ERROR,error);
}
if(password.equals("")){
ActionError error=new ActionError("error.missing.password");
errors.add(ActionErrors.GLOBAL_ERROR,error);
}
//調(diào)用業(yè)務(wù)邏輯
if(errors.size()==0){
String validated = "";
try{
UserInfoBo userInfoBo=new UserInfoBo();
validated =userInfoBo.validatePwd(username,password);
if(validated.equals("match")){
//一切正常就保存用戶信息并轉(zhuǎn)向成功的頁(yè)面
HttpSession session = request.getSession();
session.setAttribute("userInfoForm", form);
return mapping.findForward("success");
}
}
catch(Throwable e){
//處理可能出現(xiàn)的錯(cuò)誤
e.printStackTrace();
ActionError error=new ActionError(e.getMessage());
errors.add(ActionErrors.GLOBAL_ERROR,error);
}
}
//如出錯(cuò)就轉(zhuǎn)向輸入頁(yè)面,并顯示相應(yīng)的錯(cuò)誤信息
saveErrors(request, errors);
return new ActionForward(mapping.getInput());
}
}
這個(gè)action類中有兩個(gè)錯(cuò)誤消息鍵要加到ApplicationResources.properties文件中,清單如下:
#Application Resource for the LogonAction.java error.missing.username=<li><font color="red">missing username</font></li> error.missing.password=<li><font color="red">missing password</font></li>> |
在struts-config.xml文件中定義Views與 Controller的關(guān)系,也就是配置所謂的ActionMapping。它們?cè)?SPAN lang=EN-US>struts-config.xml中的位置是排在… 標(biāo)簽后,我們的登錄程序的配置清單如下:
<action-mappings> <action input="/logon.jsp" name="userInfoForm" path="/logonAction" scope="session" type="action.LogonAction" validate="false"> <forward name="success" path="/main.jsp" /> </action> </action-mappings> |
生成應(yīng)用程序所需要的model組件,該組件是完成應(yīng)用程序業(yè)務(wù)邏輯的地方,現(xiàn)在我的登錄程序的業(yè)務(wù)邏輯很簡(jiǎn)單,就是判斷用戶是不是test并且其口令是不是test如果是就返回一個(gè)表示匹配的字符串"match",否則,就拋出出錯(cuò)信息。其代碼清單如下:
package bussness; import entity.UserInfoForm; public class UserInfoBo { public UserInfoBo(){ } public String validatePwd(String username,String password){ String validateResult=""; if(username.equals("test")&&password.equals("test")){ validateResult="match"; } else{ throw new RuntimeException("error.noMatch"); } return validateResult; } } |
我們同樣要將其表示錯(cuò)誤信息的鍵值設(shè)置在ApplicationResources.properties文件中,清單如下:
#Application Resource for the UserInfoBo.java error.noMatch=<li><font color="red">no matched user</font></li> |
編譯運(yùn)行應(yīng)用程序: http://localhost:8080/mystruts/logon.jsp
最后讓我們回顧一下我們都做了些什么:
1、 建立應(yīng)用程序目錄,在目錄下建立WEB-INF目錄,在這個(gè)目錄下在建立lib和classes目錄
2、 在WEB-INF目錄下我們做如下操作:
建立web.xml文件
建立struts-config.xml文件
拷貝tld文件
3、 在lib目錄下拷貝struts的jar文件
4、 在classes目錄下建立類文件和ApplicationResources.properties資源文件。
5、 將ActionForm,Action添加到struts-config.xml文件中
6、 建立JSP文件
7、 編譯類文件,運(yùn)行。
注:native2ascii -encoding GBK ApplicationResources.properties ApplicationResources_zh.properties可以將中文的資源文件轉(zhuǎn)換成unicode,避免亂碼。