一个简单的struts例子
1、生成一个新的Web应用,假设我们生成的应用程序的根目录在/Webapps/mystruts目录。
2、到http://jakarta.apache.org/下载Struts的安装文件
3、在/Webapps/mystruts目录下新建WEB-INF/lib目录从解压的文件中拷贝下列jar文件到/Webapps/mystruts/WEB-INF/lib目录。按照struts-example的lib文件夹应该是以下几个jar文件(或者直接从struts-example的lib文件夹拷贝过来),并将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、创建一个web.xml文件内容如下:<?xml version="1.0" encoding="UTF-8"?>actionorg.apache.struts.action.ActionServletconfig/WEB-INF/struts-config.xmldebug22action*.do/WEB-INF/struts-bean.tld/WEB-INF/struts-bean.tld/WEB-INF/struts-html.tld/WEB-INF/struts-html.tld/WEB-INF/struts-logic.tld/WEB-INF/struts-logic.tld
5、创建一个基本的struts-config.xml文件,并把它放在/Webapps/mystruts/WEB-INF/目录中,内容如下:<?xml version="1.0" encoding="UTF-8"?>
6、将tld文件拷贝到WEB-INF目录下,包括:
struts-html.tld
struts-logic.tld
struts-nested.tld
struts-tiles.tld
struts-bean.tld
7、建立logon.jsp,保存在mystruts目录下
8、建立main.jsp文件,保存在mystruts目录下:
!
9、在你的应用程序的WEB-INF目录下再建一个classes目录,在新建的这个classes目录下再建如下几个目录entity(用于存放ActionForm类)、action目录(用于存放Action类)、bussness目录(用于存放作为Model的业务对象类)。
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文件中:
第二步,我们建一个名为ApplicationResources.properties的文件(注意,名字要和struts-config文件中的名字相同),并把它放在/webapps/mystruts/WEB-INF/classes目录下。它在struts-config.xml的配置。#Application Resource for the logon.jsplogon.jsp.title=The logon pagelogon.jsp.page.heading=Welcome World!logon.jsp.prompt.username=Username:logon.jsp.prompt.password=Password:logon.jsp.prompt.submit=Submitlogon.jsp.prompt.reset=Reset#Application Resource for the main.jspmain.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();//声明错误集对象ActionErrors errors = new ActionErrors();//校验输入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);}//调用业务逻辑if(errors.size()==0){String validated = "";try{UserInfoBo userInfoBo=new UserInfoBo();validated =userInfoBo.validatePwd(username,password);if(validated.equals("match")){//一切正常就保存用户信息并转向成功的页面HttpSession session = request.getSession();session.setAttribute("userInfoForm", form);return mapping.findForward("success");}}catch(Throwable e){//处理可能出现的错误e.printStackTrace();ActionError error=new ActionError(e.getMessage());errors.add(ActionErrors.GLOBAL_ERROR,error);}}//如出错就转向输入页面,并显示相应的错误信息saveErrors(request, errors);return new ActionForward(mapping.getInput());}
}
这个action类中有两个错误消息键要加到ApplicationResources.properties文件中,清单如下:
#Application Resource for the LogonAction.javaerror.missing.username=
missing usernameerror.missing.password= missing password>在struts-config.xml文件中定义Views与Controller的关系,也就是配置所谓的ActionMapping。它们在struts-config.xml中的位置是排在… 标签后,我们的登录程序的配置清单如下:
生成应用程序所需要的model组件,该组件是完成应用程序业务逻辑的地方,现在我的登录程序的业务逻辑很简单,就是判断用户是不是test并且其口令是不是test如果是就返回一个表示匹配的字符串"match",否则,就抛出出错信息。其代码清单如下:
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;}}
我们同样要将其表示错误信息的键值设置在ApplicationResources.properties文件中,清单如下:
#Application Resource for the UserInfoBo.javaerror.noMatch=
no matched user最后让我们回顾一下我们都做了些什么:
1、建立应用程序目录,在目录下建立WEB-INF目录,在这个目录下在建立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、编译类文件,运行。
注:native2ascii -encoding GBK ApplicationResources.properties ApplicationResources_zh.properties可以将中文的资源文件转换成unicode,避免乱码。