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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Struts2 的启动流程大致包括以下几个步骤: 1. Web 容器加载配置文件:在 Web 容器如 Tomcat)启动时,它会 Struts2 的配置文件,其中包括 struts.xml 文件。 2. 创建 ServletContext 对象:Web 容器会创建一个 ServletContext 对象,用于保存整个 Web 应用的信息。 3. 初始化 Struts2 框架:Struts2 框架会在 ServletContext 对象创建后进行初始化。它会读取 struts.xml 配置文件,并根据配置信息创建必要的对象,如 Action 类、Interceptor 等。 4. 接收请求:当客户端发送请求时,Web 容器会根据 URL 映射规则将请求发送给 Struts2 的核心控制器——ActionServlet。 5. 拦截器链处理:ActionServlet 在接收到请求后,会通过拦截器链对请求进行处理。拦截器链是一系列拦截器的有序集合,每个拦截器可以在请求前后执行一些特定的操作。 6. 查找 Action:经过拦截器链的处理后,ActionServlet 会根据请求中的信息查找对应的 Action 类。 7. 执行 Action 方法:找到 Action 类后,Struts2 会调用相应的 Action 方法来处理请求。方法执行完成后,会返回一个结果字符串。 8. 结果处理:Action 方法执行完成后,Struts2 将根据方法的返回结果字符串查找对应的结果视图,并进行相应的处理。这可能包括渲染 JSP 页面、返回 JSON 数据等。 9. 响应客户端:最后,Struts2 将生成的响应结果返回给客户端,完成整个请求-响应过程。 以上是 Struts2 的简要启动流程,其中涉及到了配置文件的加载、对象初始化、拦截器链处理、Action 查找与执行等步骤。具体的细节会根据项目的配置和需求有所差异。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值