Struts 2 自学之路: 2 Struts2 基本流程 - 落羽纷飞 - JavaEy...

来源:百度文库 编辑:神马文学网 时间:2024/07/05 14:04:54

内容简介:了解Struts2 的基本流程

说明: 此文只是我参看资料以及自己试验以后的观点

此文的代码皆来自上篇文章中的项目,不过添加了些注释,毕竟流程还是看个程序怎么运行更直观
(我个人就觉得看程序怎么走,再看那些枯燥的说明让人更容易理解)



首先我们来看struts2 在web.xml配置文件里配置的信息,这是我们使用struts2要做的第一步工作
文件中我们配置了一个过滤器,处理的类是org.apache.struts2.dispatcher.FilterDispatcher,从url-pattern可以看出,此应用程序的所有请求都会经过该过滤器
Java代码
  1. "1.0" encoding="UTF-8"?>   
  2. "2.4"    
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"    
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">       
  7.     Struts 2.0 Hello World   
  8.        
  9.         struts2           
  10.         class>org.apache.struts2.dispatcher.FilterDispatcherclass>   
  11.        
  12.        
  13.         struts2   
  14.         /*   
  15.        
  16.   



接下来我们需要一个请求页面和两个分别表示成功和失败的页面
index.jsp,welcome.jsp,error.jsp
index.jsp代码如下,welcome.jsp和error.jsp由于只需要显示成功或失败的文字
这里就不在列出代码了

Java代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>   
  2.   
  3. "-//W3C//DTD HTML 4.01 Transitional//EN">   
  4.   
  5.          
  6.     第一个Struts程序   
  7.      
  8.      
  9.      
  10.        
  11.     "Login.action" method="post">   
  12.         "center">   
  13.         

    用户登录

      
  14.                
  15.                 用户名:"text" name="username"/>   
  16.                
  17.                
  18.                 密  码:"text" name="password"/>   
  19.                
  20.             "center">   
  21.                 "2">"submit" value="登录"/>   
  22.                 "reset" value="重填"/>   
  23.                
  24.            
  25.        
  26.      
  27.   



然后我们需要处理action的类HelloAction
这个类只是个简单java类,没有继承任何类和实现任何接口

Java代码
  1. package yufei.hello;   
  2.   
  3. public class HelloAction   
  4.     {   
  5.     private String username;   
  6.     private String password;   
  7.     public String getPassword()   
  8.         {   
  9.         return password;   
  10.         }   
  11.     public void setPassword(String password)   
  12.         {   
  13.         this.password = password;   
  14.         }   
  15.     public String getUsername()   
  16.         {   
  17.         return username;   
  18.         }   
  19.     public void setUsername(String username)   
  20.         {   
  21.         this.username = username;   
  22.         }   
  23.     public String execute()   
  24.         {   
  25.         String strReturn = "error";   
  26.         if (username.equals("yufei"))   
  27.             strReturn = "success";   
  28.         return strReturn;   
  29.         }   
  30.     }  



最后我们配置struts.xml

Java代码
  1. "1.0" encoding="GBK"?>   
  2.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  3.     "http://struts.apache.org/dtds/struts-2.0.dtd">   
  4.   
  5.        
  6.     <package name="yufei.hello" extends="struts-default">   
  7.            
  8.         "Login" class="yufei.hello.HelloAction">   
  9.             "error">/error.jsp   
  10.             "success">/welcome.jsp   
  11.            
  12.     package>   
  13.   



流程说明:
当我们运行程序在index.jsp页面中提交表单后,(实际上就是让页面跳转带着表单参数到相应的URL路径)表单里的action是Login.action,当我们提交表单实际就是将URL跳转到
http://127.0.0.1:8888/Struts2Study/Login.action这个路径上去
(http://127.0.0.1:8888/Struts2Study 这个为你的项目根路径)
由于我们在web.xml里面配置了过滤器,该过滤器在本应用程序的任何路径下都会执行,所以触发了FilterDispatcher来处理,然后该过滤器将以action结尾的请求转入Struts2框架处理。(struts2 配置文件中的默认后缀标记是action,当然你要喜欢也可以改为其它的,以后讲配置文件会提到)这里实际是截获了Login.action的请求,然后将.action的前面部分和struts.xml文件里的action的name对比,当找到相同的后,调用class属性里的类来处理,这里实际就是调用的yufei.hello.HelloAction(说明,当struts.xml里没有明确配置处理方法时,默认会去找execute方法来处理,而且处理的方法必需是公共(public) 返回字符串类型(String) 没有参数,关于方法配置在以后会提),最后根据action类的执行方法的返回值(String)来和struts.xml里面的该action配置下的result标签的name属性进行比对,然后进行相应的跳转
-
-
-
-
-
最后我将网上的关于Struts2 基本流程 比较理论化的说明放下面


--FilterDispatcher 是 Struts 2 框架的核心控制器,该控制器作为一个 Filter 运行在 Web应用中,它负责拦截所有的用户请求(拦截所有还是部分是由url-pattern来决定的),当用户请求到达时,该 Filter 会过滤用户请求。如果用户请求以 action 结尾,该请求将被转入 Struts 2 框架处理。
--Struts 2 框架获得了*.action 请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于 login.action 请求,Struts 2调用名为 login 的 Action来处理该请求。
--Struts 2 应用中的 Action都被定义在 struts.xml 文件中,在该文件中定义 Action 时,定义了该 Action 的name 属性和 class 属性,其中 name 属性决定了该 Action 处理哪个用户请求,而 class属性决定了该 Action 的实现类。
--Struts 2 用于处理用户请求的 Action实例,并不是用户实现的业务控制器,而是 Action代理——因为用户实现的业务控制器并没有和 Servlet API耦合,显然无法处理用户请求。而 Struts 2 框架提供了系列拦截器,该系列拦截器负责将 HttpServletRequest 请求中的请求参数解析出来,传入到 Action 中,并回调 Action 的 execute方法来处理用户请求。
--显然,上面的处理过程是典型的 AOP(面向切面编程)处理方式。图 3.19 显示了这
种处理模型。

--从图3.19中可以看出,用户实现的Action类仅仅是Struts 2的Action代理的代理目标。用户实现的业务控制器(Action)则包含了对用户请求的处理。用户的请求数据包含在HttpServletRequest 对象里,而用户的 Action 类无需访问 HttpServletRequest 对象。拦截器负责将 HttpServletRequest里的请求数据解析出来,并传给业务逻辑组件 Action 实例