Struts1.x 的xml配置

本文介绍如何使用Struts1.x搭建一个简单的登录系统,包括项目创建、配置文件设置、编写ActionForm、异常处理及业务逻辑等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.新建一个web项目并加入Struts1.x的依赖库。

引用

commons-beanutils-1.8.0.jar: 动态的获取/设值Java Bean的属性
commons-digester-1.8.jar: 基于规则的XML文档解析,主要用于XML到Java对象的映射
commons-fileupload-1.1.1.jar: struts中上传文件要用到
commons-validator-1.3.1.jar: struts的验证框架
commons-logging-1.0.4.jar:日志处理
commons-chain-1.2.jar: 处理HTTP请求处理的基础机制
struts-core-1.3.10.jar: struts的核心库
struts-extras-1.3.10.jar: struts的扩展库
oro-2.0.8.jar: 文本处理工具
antlr-2.7.2.jar:语法分析器


2.配置web.xml文件


Java 代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <web-appversion="2.5"xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  6. <welcome-file-list>
  7. <welcome-file>index.jsp</welcome-file>
  8. </welcome-file-list>
  9. <!--StandardActionServletConfiguration-->
  10. <servlet>
  11. <servlet-name>action</servlet-name>
  12. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  13. <!--以 下的几个init-param都可以不用配置-->
  14. <init-param>
  15. <!--
  16. 缺 省情况下就是/WEB-INF/struts-config.xml,可以不用配置,只有当文件名称不是struts-config.xml或路径不在 WEB-INF下时需要配置
  17. -->
  18. <param-name>config</param-name>
  19. <param-value>/WEB-INF/struts-config.xml</param-value>
  20. </init-param>
  21. <init-param>
  22. <!--表 示对servlet日志输出的等级-->
  23. <param-name>debug</param-name>
  24. <param-value>2</param-value>
  25. </init-param>
  26. <!--最 好留着,表示Servlet的初始化时间,在这里表示在tomcat启动的时候进行初始化-->
  27. <load-on-startup>2</load-on-startup>
  28. </servlet>
  29. <!--StandardActionServletMapping-->
  30. <!--表 示servlet接收*.do的请求-->
  31. <servlet-mapping>
  32. <servlet-name>action</servlet-name>
  33. <url-pattern>*.do</url-pattern>
  34. </servlet-mapping>
  35. </web-app>
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- Standard Action Servlet Configuration --> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <!-- 以下的几个init-param都可以不用配置 --> <init-param> <!-- 缺省情况下就是/WEB-INF/struts-config.xml,可以不用配置,只有当文件名称不是struts-config.xml或路径不在WEB-INF下时需要配置 --> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <!-- 表示对servlet日志输出的等级 --> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <!-- 最好留着,表示Servlet的初始化时间,在这里表示在tomcat启动的时候进行初始化 --> <load-on-startup>2</load-on-startup> </servlet> <!-- Standard Action Servlet Mapping --> <!-- 表示servlet接收*.do的请求 --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>

3.在WEB-INF下加入struts-config.xml文件


Java 代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <!DOCTYPEstruts-configPUBLIC
  3. "-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.3//EN"
  4. "http://struts.apache.org/dtds/struts-config_1_3.dtd">
  5. <struts-config>
  6. <form-beans>
  7. <form-beanname="loginForm"type="com.yx.zzg.form.LoginActionForm"/>
  8. </form-beans>
  9. <!--配 置全局的转向,如果全局转向和局部转向都配有,会先找局部转向,局部转向没有找到才会去找全局转向-->
  10. <!--
  11. <global-forwards>
  12. <forwardname="failure"path="/failure.jsp"/>
  13. </global-forwards>
  14. -->
  15. <action-mappings>
  16. <!--path 定义action的名字,一定要以“/”开头-->
  17. <!--type 指定action类的完整路径-->
  18. <!--name指定用的是哪个 ActionForm-->
  19. <!--
  20. struts 默认ActionForm放在session范围内,这里需要通过scope手动指定成request,所以在前台可以通过<%
  21. LoginActionForm
  22. laf=(LoginActionForm)request.getAttribute("loginForm");
  23. %> 拿到ActionForm
  24. -->
  25. <!--指 定ActionForm中的validate是否执行,默认情况下是执行的-->
  26. <!--
  27. attribute 如果没有设置,在前台获取ActionForm就通过ActionForm的name来获取,如果设置了attribute就通过attribute的值 来获取
  28. -->
  29. <actionpath="/login"type="com.yx.zzg.action.LoginAction"
  30. name="loginForm"scope="request"validate="false"attribute="loginForm">
  31. <!--配 置转向,redirect属性默认为false,表示是请求转发,如果将其设置 为true则表示重定向-->
  32. <forwardname="success"path="/success.jsp"/>
  33. <forwardname="failure"path="/failure.jsp"/>
  34. </action>
  35. <!--
  36. 指 定访问不存在页面,当访问一个不存在的页面时会跳到unknown.jsp页面,只对.do的 请求其作用。forward属性通常使用在没有具体的action实现的情况下,如一个转向
  37. -->
  38. <actionpath="/unknown"forward="/unknown.jsp"unknown="true"/>
  39. </action-mappings>
  40. </struts-config>
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <form-beans> <form-bean name="loginForm" type="com.yx.zzg.form.LoginActionForm" /> </form-beans> <!-- 配置全局的转向,如果全局转向和局部转向都配有,会先找局部转向,局部转向没有找到才会去找全局转向 --> <!-- <global-forwards> <forward name="failure" path="/failure.jsp" /> </global-forwards> --> <action-mappings> <!-- path定义action的名字,一定要以“/”开头 --> <!-- type指定action类的完整路径 --> <!-- name指定用的是哪个ActionForm --> <!-- struts默认ActionForm放在session范围内,这里需要通过scope手动指定成request,所以在前台可以通过<% LoginActionForm laf=(LoginActionForm)request.getAttribute("loginForm"); %>拿到ActionForm --> <!-- 指定ActionForm中的validate是否执行,默认情况下是执行的 --> <!-- attribute如果没有设置,在前台获取ActionForm就通过ActionForm的name来获取,如果设置了attribute就通过attribute的值来获取 --> <action path="/login" type="com.yx.zzg.action.LoginAction" name="loginForm" scope="request" validate="false" attribute="loginForm"> <!-- 配置转向,redirect属性默认为false,表示是请求转发,如果将其设置为true则表示重定向 --> <forward name="success" path="/success.jsp" /> <forward name="failure" path="/failure.jsp" /> </action> <!-- 指定访问不存在页面,当访问一个不存在的页面时会跳到unknown.jsp页面,只对.do的请求其作用。forward属性通常使用在没有具体的action实现的情况下,如一个转向 --> <action path="/unknown" forward="/unknown.jsp" unknown="true" /> </action-mappings> </struts-config>

4.编写ActionForm类


Java 代码
  1. packagecom.yx.zzg.form;
  2. importjavax.servlet.http.HttpServletRequest;
  3. importorg.apache.struts.action.ActionErrors;
  4. importorg.apache.struts.action.ActionForm;
  5. importorg.apache.struts.action.ActionMapping;
  6. /**
  7. *登 录的ActionForm.
  8. *ActionForm 是做数据收集的
  9. *ActionForm 中的属性必须和表单输入域的名称一致
  10. *@authortoshiba
  11. *
  12. */
  13. publicclassLoginActionFormextendsActionForm{
  14. privateStringusername;
  15. privateStringpassword;
  16. publicStringgetUsername(){
  17. returnusername;
  18. }
  19. publicvoidsetUsername(Stringusername){
  20. this.username=username;
  21. }
  22. publicStringgetPassword(){
  23. returnpassword;
  24. }
  25. publicvoidsetPassword(Stringpassword){
  26. this.password=password;
  27. }
  28. @Override
  29. publicvoidreset(ActionMappingmapping,HttpServletRequestrequest){
  30. System.out.println("----------LoginActionForm.reset()---------");
  31. }
  32. @Override
  33. publicActionErrorsvalidate(ActionMappingmapping,
  34. HttpServletRequestrequest){
  35. System.out.println("----------LoginActionForm.validate()---------");
  36. returnnull;
  37. }
  38. }
package com.yx.zzg.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; /** * 登录的ActionForm. * ActionForm是做数据收集的 * ActionForm中的属性必须和表单输入域的名称一致 * @author toshiba * */ public class LoginActionForm extends ActionForm { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public void reset(ActionMapping mapping, HttpServletRequest request) { System.out.println("----------LoginActionForm.reset()---------"); } @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { System.out.println("----------LoginActionForm.validate()---------"); return null; } }

5.编写异常类


Passworderrorexception.java 代码
  1. packagecom.yx.zzg.exception;
  2. publicclassPasswordErrorExceptionextendsRuntimeException{
  3. }
package com.yx.zzg.exception; public class PasswordErrorException extends RuntimeException { }
Usernotfoundexception.java 代码
  1. packagecom.yx.zzg.exception;
  2. publicclassUserNotFoundExceptionextendsRuntimeException{
  3. }
package com.yx.zzg.exception; public class UserNotFoundException extends RuntimeException { }

6.编写业务类


Java 代码
  1. packagecom.yx.zzg.service;
  2. importcom.yx.zzg.exception.PasswordErrorException;
  3. importcom.yx.zzg.exception.UserNotFoundException;
  4. publicclassUserManager{
  5. privatestaticUserManagerinstance=newUserManager();
  6. privateUserManager(){
  7. }
  8. publicstaticUserManagergetInstance(){
  9. returninstance;
  10. }
  11. publicvoidlogin(Stringusername,Stringpassword){
  12. if(!"zzg".equals(username)){
  13. thrownewUserNotFoundException();
  14. }
  15. if(!"zzg".equals(password)){
  16. thrownewPasswordErrorException();
  17. }
  18. }
  19. }
package com.yx.zzg.service; import com.yx.zzg.exception.PasswordErrorException; import com.yx.zzg.exception.UserNotFoundException; public class UserManager { private static UserManager instance=new UserManager(); private UserManager(){ } public static UserManager getInstance(){ return instance; } public void login(String username,String password){ if(!"zzg".equals(username)){ throw new UserNotFoundException(); } if(!"zzg".equals(password)){ throw new PasswordErrorException(); } } }

7.编写Action类


Java 代码
  1. packagecom.yx.zzg.action;
  2. importjavax.servlet.http.HttpServletRequest;
  3. importjavax.servlet.http.HttpServletResponse;
  4. importorg.apache.struts.action.Action;
  5. importorg.apache.struts.action.ActionForm;
  6. importorg.apache.struts.action.ActionForward;
  7. importorg.apache.struts.action.ActionMapping;
  8. importcom.yx.zzg.exception.PasswordErrorException;
  9. importcom.yx.zzg.exception.UserNotFoundException;
  10. importcom.yx.zzg.form.LoginActionForm;
  11. importcom.yx.zzg.service.UserManager;
  12. publicclassLoginActionextendsAction{
  13. publicActionForwardexecute(ActionMappingmapping,ActionFormform,
  14. HttpServletRequestrequest,HttpServletResponseresponse)
  15. throwsException{
  16. StringerrorInfo="";
  17. LoginActionFormlaf=(LoginActionForm)form;
  18. Stringusername=laf.getUsername();
  19. Stringpassword=laf.getPassword();
  20. //if("zzg".equals(username)&&"zzg".equals(password)){
  21. //request.setAttribute("username",username);
  22. //returnmapping.findForward("success");
  23. //}else{
  24. //returnmapping.findForward("failure");
  25. //}
  26. try{
  27. UserManager.getInstance().login(username,password);
  28. //request.setAttribute("username",username);
  29. returnmapping.findForward("success");
  30. }catch(UserNotFoundExceptionfnfe){
  31. fnfe.printStackTrace();
  32. errorInfo="用户名无效";
  33. }catch(PasswordErrorExceptionpee){
  34. pee.printStackTrace();
  35. errorInfo="密码错误";
  36. }
  37. request.setAttribute("errorInof",errorInfo);
  38. returnmapping.findForward("failure");
  39. }
  40. }
package com.yx.zzg.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.yx.zzg.exception.PasswordErrorException; import com.yx.zzg.exception.UserNotFoundException; import com.yx.zzg.form.LoginActionForm; import com.yx.zzg.service.UserManager; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String errorInfo=""; LoginActionForm laf = (LoginActionForm) form; String username = laf.getUsername(); String password = laf.getPassword(); // if ("zzg".equals(username) && "zzg".equals(password)) { // request.setAttribute("username", username); // return mapping.findForward("success"); // } else { // return mapping.findForward("failure"); // } try{ UserManager.getInstance().login(username, password); //request.setAttribute("username", username); return mapping.findForward("success"); }catch(UserNotFoundException fnfe){ fnfe.printStackTrace(); errorInfo="用户名无效"; }catch(PasswordErrorException pee){ pee.printStackTrace(); errorInfo="密码错误"; } request.setAttribute("errorInof", errorInfo); return mapping.findForward("failure"); } }

6.登录测试页面


Java 代码
  1. <%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%>
  2. <html>
  3. <head>
  4. <title> 登录</title>
  5. </head>
  6. <body>
  7. <formaction="login.do"method="post">
  8. 用 户名:
  9. <inputname="username"type="text"/>
  10. 密 码:
  11. <inputname="password"type="password"/>
  12. <inputtype="submit"value=" 登录"/>
  13. </form>
  14. </body>
  15. </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值