Struts简单工作流

首先页面上的数据请求被发送到服务器,此时的请求先进入到前端控制器(ActionServlet)。ActionServlet再将请求转发给后 端控制器(Action),在转发中顺便送了一份礼物form(ActionForm),在Action中对form中的数据做实际的处理操作并返回一份 礼物forward(ActionForward)给ActionServlet,ActionServlet收到这份礼物后根据其中的关键字从 struts配置文件Struts-config.xml中获取具体的跳转页。
那么ActionServlet是怎么知道该找哪个后端控制器呢?又是怎么知道返回的ActionForward具体是什么呢?为了回答这个问题,我们参考一个用Struts做的登陆程序。

登陆表单代码:

 
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4.   <head>
  5.     <title>struts工作流程分析</title>
  6.   </head> 
  7.   <body>
  8.     <form action="login.do" method="POST">
  9.         用户名:<input type="text" name="userName"><br/>
  10.         密码:<input type="password" name="userPwd"><br/>
  11.         <input type="submit" value="登录">
  12.     </form>
  13.   </body>
  14. </html>

 

LoginAction代码:

 
  1. package cn.ineeke.action;
  2.  
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5.  
  6. import org.apache.struts.action.Action;
  7. import org.apache.struts.action.ActionForm;
  8. import org.apache.struts.action.ActionForward;
  9. import org.apache.struts.action.ActionMapping;
  10.  
  11. import cn.ineeke.form.LoginForm;
  12. /**
  13.  *作者:Neeke
  14.  *BLOG:http://www.ineeke.cn
  15.  */
  16. public class LoginAction extends Action {
  17.  
  18.     @Override
  19.     public ActionForward execute(ActionMapping mapping, ActionForm form,
  20.             HttpServletRequest request, HttpServletResponse response)
  21.             throws Exception {
  22.             LoginForm loginForm = (LoginForm)form;
  23.             String forwardName = "failure";
  24.             if(loginForm.getUserName().equals("neeke") && loginForm.getUserPwd().equals("123456")){
  25.                 forwardName = "success";
  26.             }
  27.             return mapping.findForward(forwardName);
  28.     }
  29.  
  30. }

LoginForm代码:

 
  1. package cn.ineeke.form;
  2.  
  3. import org.apache.struts.action.ActionForm;
  4.  
  5. public class LoginForm extends ActionForm {
  6.     private String userName = null;
  7.     private String userPwd = null;
  8.     public String getUserName() {
  9.         return userName;
  10.     }
  11.     public void setUserName(String userName) {
  12.         this.userName = userName;
  13.     }
  14.     public String getUserPwd() {
  15.         return userPwd;
  16.     }
  17.     public void setUserPwd(String userPwd) {
  18.         this.userPwd = userPwd;
  19.     }
  20. }

 

Struts-config.xml文件:

 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
  3.  
  4. <struts-config>
  5.   <form-beans>
  6.     <form-bean name="loginForm" type="cn.ineeke.form.LoginForm"></form-bean>
  7.   </form-beans>
  8.   <action-mappings>
  9.     <action path="/login" type="cn.ineeke.action.LoginAction" name="loginForm">
  10.         <forward name="success" path="/success.jsp"></forward>
  11.         <forward name="failure" path="/failure.jsp"></forward>
  12.     </action>
  13.   </action-mappings>
  14.   <message-resources parameter="cn.ineeke.struts.ApplicationResources" />
  15. </struts-config>
  16.  

当 我们的表单提交给login.do的时候,ActionServlet就会去读取Struts-config.xml文件并根据<action path="/login" type="cn.ineeke.action.LoginAction" name="loginForm">中的type属性找到具体的后端控制器LoginAction,与此同时又根据name属性找到< form-bean name="loginForm" type="cn.ineeke.form.LoginForm"></form-bean>并将表单中的数据存储在 LoginForm的实例中(这个实例就是前端控制器送给后端控制器的礼物了),在LoginAction的execute方法中进行数据处理并返回一个 ActionForward对象(回赠一份礼物)给ActionServlet。最后ActionServlet再根据这份礼物的关键字在
<forward name="success" path="/success.jsp"></forward>
<forward name="failure" path="/failure.jsp"></forward>
中进行查找,并跳转到相应的path。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值