千家信息网

Java中Struts2处理流程是怎样的

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"Java中Struts2处理流程是怎样的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2026年11月02日Java中Struts2处理流程是怎样的

本篇内容介绍了"Java中Struts2处理流程是怎样的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

看看Struts-2的处理流程:

1) Browser产生一个请求并提交框架来处理:根据配置决定使用哪些拦截器、action类和结果等。

2) 请求经过一系列拦截器:根据请求的级别不同拦截器做不同的处理。这和Struts-1的RequestProcessor类很相似。

3) 调用Action: 产生一个新的action实例,调用业务逻辑方法。

4) 调用产生结果:匹配result class并调用产生实例。

5) 请求再次经过一系列拦截器返回:过程也可配置减少拦截器数量

6) 请求返回用户:从control返回servlet,生成Html。

这里很明显的一点是不存在FormBean的作用域封装,直接可以从Action中取得数据。 这里有一个Strut-2配置的web.xml文件:

        controller                  org.apache.struts.action2.dispatcher.FilterDispatcher                              cotroller                   /*        

注意到以往的servlet变成了filter,ActionServlet变成了FilterDispatcher,*.do变成了/*。filter配置定义了名称(供关联)和filter的类。filter mapping让URI匹配成功的的请求调用该filter。默认情况下,扩展名为 ".action "。这个是在default.properties文件里的 "struts.action.extension "属性定义的。

default.properties是属性定义文件,通过在项目classpath路径中包含一个名为"struts.properties"的文件来设置不同的属性值。而Struts-2的默认配置文件名为struts.xml。由于1和2的action扩展名分别为.do和.action,所以很方便能共存。我们再来看一个Struts-2的action代码:

public class MyAction {  public String execute() throws Exception {  //do the work    return "success ";  }  }

很明显的区别是不用再继承任何类和接口,返回的只是一个String,无参数。实际上在Struts-2中任何返回String的无参数方法都可以通过配置来调用action。所有的参数从哪里来获得呢?答案就是Inversion of Control技术(控制反转)。笔者尽量以最通俗的方式来解释,我们先试图让这个Action获得reuqest对象,这样可以提取页面提交的任何参数。那么我们把request设为一个成员变量,然后需要一个对它的set方法。由于大部分的action都需要这么做,我们把这个set方法作为接口来实现。

public interface ServletRequestAware {  public void setServletRequest(HttpServletRequest request);  }  public class MyAction implements ServletRequestAware {  private HttpServletRequest request;  public void setServletRequest(HttpServletRequest request) {  this.request = request;  }  public String execute() throws Exception {  // do the work directly using the request  return Action.SUCCESS;  }  }

那么谁来调用这个set方法呢?也就是说谁来控制这个action的行为,以往我们都是自己在适当的地方写上一句action.setServletRequest(…),也就是控制权在程序员这边。然而控制反转的思想是在哪里调用交给正在运行的容器来决定,只要利用Java反射机制来获得Method对象然后调用它的invoke方法传入参数就能做到,这样控制权就从程序员这边转移到了容器那边。程序员可以减轻很多繁琐的工作更多的关注业务逻辑。Request可以这样注入到action中,其他任何对象也都可以。为了保证action的成员变量线程安全,Struts-2的action不是单例的,每一个新的请求都会产生一个新的action实例。

那么有人会问,到底谁来做这个对象的注入工作呢?答案就是拦截器。拦截器又是什么东西?笔者再来尽量通俗的解释拦截器的概念。大家要理解拦截器的话,首先一定要理解GOF23种设计模式中的Proxy模式。

A对象要调用f(),它希望代理给B来做,那么B就要获得A对象的引用,然后在B的f()中通过A对象引用调用A对象的f()方法,最终达到A的f()被调用的目的。有没有人会觉得这样很麻烦,为什么明明只要A.f()就可以完成的一定要封装到B的f()方法中去?有哪些好处呢?

1) 这里我们只有一个A,当我们有很多个A的时候,只需要监视B一个对象的f()方法就可以从全局上控制所有被调用的f()方法。

2) 另外,既然代理人B能获得A对象的引用,那么B可以决定在真正调A对象的f()方法之前可以做哪些前置工作,调完返回前可有做哪些后置工作。

讲到这里,大家看出来一点拦截器的概念了么?它拦截下一调f()方法的请求,然后统一的做处理(处理每个的方式还可以不同,解析A对象就可以辨别),处理完毕再放行。这样像不像对流动的河水横切了一刀,对所有想通过的水分子进行搜身,然后再放行?这也就是AOP(Aspect of Programming面向切面编程)的思想。

Anyway,Struts-2只是利用了AOP和IoC技术来减轻action和框架的耦合关系,力图到***程度重用action的目的。在这样的技术促动下,Struts-2的action成了一个简单被框架使用的POJO(Plain Old Java Object)罢了。实事上AOP和IoC的思想已经遍布新出来的每一个框架上,他们并不是多么新的技术,利用的也都是JDK早已可以最到的事情,它们代表的是更加面向接口编程,提高重用,增加扩展性的一种思想。

"Java中Struts2处理流程是怎样的"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

对象 方法 拦截器 处理 控制 配置 参数 文件 不同 思想 技术 框架 工作 流程 也就是 实例 属性 接口 更多 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技图片 南京欣网互联网络科技有限公司 深圳齐家互联网科技 科技大学互联网专业好不好 华中科技有哪些互联网大佬 富国互联网科技创新基金 哈尔滨新华互联网科技学院 互联网科技热点资讯 昭通互联网科技选哪家 湖南一路畅行互联网科技 呼和浩特新华互联网科技学院 亳州好赞互联网科技有限公司 广州新华互联网科技学校电竞方面 翼展科技 首家互联网医院 互联网数据科技专业 工业互联网山东科技大学 互联网安防科技感 陕西云淼互联网科技公司 九思连强互联网电子科技有限公司 中国互联网公司的科技投入 南京欣网互联网络科技有限公司 金融科技还是互联网 华宇互联网科技 互联网 科技创业 融势互联网科技 互联网科技创新企业排名 深圳互联网科技怎么样 中化能源互联网科技招聘 宁夏科技产业互联网案例 千方科技属于互联网企业吗
0