自己实现Struts2(一)Struts流程介绍和环境搭建

来源:互联网 发布:英国诺丁汉大学知乎 编辑:程序博客网 时间:2024/05/17 23:45

为什么要自己实现Struts2

Struts2是无疑是一个经典的、优秀的框架,实现了MVC模式,层次结构清晰,而且还提供了一些非常有用的插件。当然了,我的目的不是为了介绍Struts2的全部功能,说老实话Struts2的很多功能我都没用过也不知道。虽然这几年Struts2已经式微,逐渐被Spring MVC替代,但是Struts2作为一个曾经非常流行的框架,它整体框架的实现思想无疑是十分优秀的,这系列的文章就会介绍怎么实现一个拥有Struts2框架流程的精简版Struts2。

我们习惯了拿来主义,很多人都不提倡重复造轮子,但是轮子用多了,就可能会丧失创造力。在我看来,实现一个框架,可以让你对它的整体框架有更深刻的思考,提高自己的创造力。引用一下钱老的话

钱学森:手上无剑与有剑不用不是一回事

自己不能造轮子和可以造轮子但是不造是两码事

需要什么知识

要自己实现一个精简版Struts2,你得知道Java Web的基本知识,像Servlet、Filter什么的,然后你得使用过Struts2,并且了解其中的一些核心功能。我会假设你满足上面的要求。

Struts2框架执行流程

先贴上一张Struts2的架构图
Struts2架构图
需要注意的是FilterDispatcher自2.1.3开始就被StrutsPrepareAndExecuteFilter替代了。

现在来介绍一下它是怎么一个流程

  1. 客户端提交一个请求,被StrutsPrepareAndExecuteFilter拦截到了(StrutsPrepareAndExecuteFilter配置的拦截路径一般都是/*)。

  2. 在StrutsPrepareAndExecuteFilter拦截到请求后会访问ActionMapper来分析请求信息以决定是否调用某个action(因为有可能请求的是其它的静态资源或者不符合规定后缀的)。

  3. 如果要访问action,那么StrutsPrepareAndExecuteFilter会把请求的处理交给ActionProxy对象。

  4. ActionProxy对象会通过ConfigurationManager加载核心配置文件struts.xml(Struts的action的配置信息文件)。

  5. ActionProxy读取到要访问的action的配置信息后创建一个ActionInvocation对象,ActionInvocation实现了命令模式,在action调用的前后递归地调用涉及到的拦截器(Interceptor)。

  6. 一旦action执行完毕,会返回一个result,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

好了,流程介绍完了,下面就来搭建一下我们的环境。

环境搭建

先新建一个Web工程,我把工程命名为JStruts2(我的英文名是Jason),工程名你们可以自行选择。然后导入一些需要用到的jar包

  • commons-beanutils-1.9.3.jar : 封装请求参数的时候要用到,一个内省工具包
  • commons-logging.jar : beanutils依赖的jar包
  • dom4j-1.6.1.jar : 读取配置文件时用到,解析XML的
  • jaxen-1.1-beta-6.jar : 配合dom4j,令其支持XPath(XML路径语言,不是很难的,不知道的可以去了解一下)

当然了,上面的这些jar包版本可以随意,不做强制要求。还需要注意的是我的工程用的字符集是UTF-8的。

现在就可以启动Tomcat运行一下了。


项目已经上传到Github上
https://github.com/HuangFromJYU/JStruts2

0 0
原创粉丝点击