Struts运行流程解释

 

 

此图为Struts运行流程图

例如现在用一个登录页面做例子来解释:

1.用户请求登录。

2.调用ActionForm 填充FormBean,其实就是调用ActionBean的set()方法。
控制器代码:
<form-bean name="formBean1" type="com.yourcompany.struts.form.UserForm"></form-bean>

3.分发请求,控制器分发Http请求。
控制器代码:
<action path="/login" type = "com.yourcompany.struts.action.LoginAction"
  name = "formBean1"
  scope = "request"
  input = "/login.jsp"/>
  <action path="/regist" forward="/regist.jsp"/>

4.调用FormBean,其实就是ActionBean获取用户输入的信息,其实是调用ActionForm的get()方法,
然后对输入的信息进行验证。

5.调用javaBean  Action对象调用execute()方法处理请求。

6.回送ActionForword对象,进过处理之后把对象ActionForword封装好回送。

7.转发HTTP请求  身份验证通过则由ActionServlet将源客户端HTTP请求再次转发至错误页面,或者转发至正确页面 控制器代码为:
<global-forwards>
      <forward name="failed" path="/error.jsp"></forward>
      <forward name="successed" path="/right.jsp"></forward>
  </global-forwards>

8.调用javaBean  还要调用javaBean的对象mapping的findForward()的方法

9.最后调用javaBean的对象后才响应HTTP。

我理解的Struts的运行流程就是这样的。这是本人的愚见,有误之处还望大家指出。

源代码如下:

LoginAction .java

package  com.yourcompany.struts.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.yourcompany.struts.business.UserLoginLog;
import  com.yourcompany.struts.form.UserForm;

public   class  LoginAction  extends  Action {

    
/**验证用户输入的信息
     * 
@return the mapping.finfWard()
     * 
@return {@link ActionMapping}
     
*/

    
public ActionForward execute(ActionMapping mapping,ActionForm form,
            HttpServletRequest request,HttpServletResponse response)
    
{
        UserForm userForm 
= (UserForm)form;
        String username 
= userForm.getUsername();
        String password 
= userForm.getPassword();
        System.out.println(username 
+ password);
        
if("123".equals(username) && "123".equals(password))
        
{
            UserLoginLog ul 
= new UserLoginLog();
            ul.save(username, password);
            
return mapping.findForward("successed");
        }

        
else
        
{
            
return mapping.findForward("failed");
        }

    }

}

UserForm .java

package  com.yourcompany.struts.form;

import  org.apache.struts.action.ActionForm;

/**
 * 
@author yellow
 * 
 
*/

public   class  UserForm  extends  ActionForm  {

    
private static final long serialVersionUID = 1L;

    
private String username;

    
private String password;

    
/**
     * 构造器
     * 
     
*/

    
public UserForm() {
    }


    
/**
     * 
     * 
@return the password
     * 
@return String
     
*/

    
public String getPassword() {
        
return password;
    }


    
/**
     * 
     * 
@param password
     
*/

    
public void setPassword(String password) {
        
this.password = password;
    }


    
/**
     * 
     * 
@return the username
     * 
@return String
     
*/

    
public String getUsername() {
        
return username;
    }


    
/**
     * 
     * 
@param username
     
*/

    
public void setUsername(String username) {
        
this.username = username;
    }

}

 

UserLoginLog.java

package  com.yourcompany.struts.business;

import  java.io.BufferedWriter;
import  java.io.FileWriter;
import  java.util.Calendar;

public   class  UserLoginLog  {

    
/**把信息保存到服务器
     * 
     * 
@param username
     * 
@param password
     
*/

    
public void save(String username,String password)
    
{
        Calendar today 
= Calendar.getInstance();
        String fileName 
= "../logs/user_login_log.txt";
        
try {
            FileWriter fw 
= new FileWriter(fileName,true);
            BufferedWriter bw 
= new BufferedWriter(fw);
            bw.write(today.getTime().toString() 
+ ":user" + username + ":password" + 
                    password 
+ "log in. ");
            bw.close();
        }
 catch (Exception e) {
            System.out.println(
"文件操作出错");
        }
        
    }

}

 

struts-config.xml

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts 
Configuration 1.2//EN" 
"http://struts.apache.org/dtds/struts-config_1_2.dtd"
>

< struts-config >
    
< data-sources  />
    
< form-beans >
        
< form-bean  name ="formBean1"
            type
="com.yourcompany.struts.form.UserForm" >
        
</ form-bean >
    
</ form-beans >
    
< global-exceptions  />
    
< global-forwards >
        
< forward  name ="failed"  path ="/error.jsp" ></ forward >
        
< forward  name ="successed"  path ="/right.jsp" ></ forward >
    
</ global-forwards >
    
< action-mappings >
        
< action  path ="/login"
            type
="com.yourcompany.struts.action.LoginAction"  name ="formBean1"
            scope
="request"  input ="/login.jsp"   />
        
< action  path ="/regist"  forward ="/regist.jsp"   />
    
</ action-mappings >
    
< message-resources
        
parameter ="com.yourcompany.struts.ApplicationResources"   />
</ struts-config >

 

web.xml

<? xml version="1.0" encoding="UTF-8" ?>
< web-app  xmlns ="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"  version ="2.4"
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee   
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
    
< servlet >
         
< servlet-name > actionServlet </ 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 >
    
</ servlet >


    
< servlet-mapping >
        
< servlet-name > actionServlet </ servlet-name >
        
< url-pattern > *.do </ url-pattern >
    
</ servlet-mapping >
    
    
    
< welcome-file-list >
        
< welcome-file > login.jsp </ welcome-file >
    
</ welcome-file-list >
</ web-app >

 

有误之处还望大家指出,注意登录功能还没有做好。

运行环境 Myeclipse + JDK1.5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值