深入研究Struts2(一)---Struts2是什么?它的工作原理是什么?

本文绝对原创, 欢迎转载, 但是转载请记得注明文章出处:http://blog.csdn.net/izard999/article/details/39891281

近4年都在从事Android方 面的工作, 最近换到一家单位做技术主管, 拿到外包的代码发现是Struts2做的, 5年之前对Struts2还是有一定见解的, 但是由于多年不用, 导致还是有些小淡忘,  翻出以前记录的一些笔记和心得, 再加上从官方文档又看到一些版本更新带来的一些新东西, 于是决定再次深入研究一次. 也希望此系列文章能给用得到的朋友们带来实质性的帮助.

好了, 言归正传.

为什么要深入研究, 为什么要学习原理?磨刀不误砍柴工,但是大多数人还是不愿意磨刀,而是先上山砍柴,先过把瘾,等砍几下砍不动了,再下山来磨刀,这样会很耽误时间的.!为什么我会先学习struts2的底层原理,而不是一上来就直接去学习如何用struts2去完成一个个功能呢?表面看起来,直接学习如何用struts2完成功能,看到效果是很爽的事情!但是为什么要这样做?程序代码为什么要这样写?而且一旦Struts2本身就有bug,该如何解决(5年之前我玩2.1.6的时候bug就一堆)?结果不言而喻,稀里糊涂什么都不知道!我是一个喜欢问为什么的人,所以我必须要弄明白为什么,才能举一反三,自己独立做程序,出错了也不慌.!如果等到糊涂了,知道要学底层原理的时候再来学底层原理的话,岂不是跟先砍柴后磨刀一样了,更耽误时间了吗?为什么许多人翻了好多书,学了好几个月struts2还没学明白? 就是学习顺序不对造成的!

Struts2是什么?

Struts2是一个按照MVC模式设计的web层框架,其实Struts2就是一个大大的filter,我们可以在web.xml文件中讲符合某 种特征的所有请求交给这个filter处理,这个filter再参照一个配置文件(通常为/WEB-INF/classes/struts.xml)将各 个请求分别分配给不同的action去处理!

Struts2的核心FilterDispatcher,  从2.1.3版本开始, 换成了StrutsPrepareAndExecuteFilter. 官方为什么要做这个升级呢?

首先看下官方给的Struts2工作原理图:

这个我对Struts官方还是有点意见的, 这个是我在Struts2.3.16.3版本上找的图, 跟我5年前看到的一模一样,  请问您过滤器版本都换了, 这个图也该换换了吧?

Struts2工作原理(基于看完上图的理解):当一个HttpServletRequest请求来了,先经过 ActionContextCleanUp过滤器,清除Action环境,再经过其他的过滤器,例如说SiteMesh和用户自定义过滤器等等, 最后到达Struts2的核心过滤器StrutsPrepareAndExecuteFilter,此 时,StrutsPrepareAndExecuteFilter会去找ActionMapping看此Action路径是否存在,如果存在,则会参照 Struts.xml文件产生Action的代理,并且执行Action,Struts2很多功能是靠拦截器完成的,所以这个Action代理真正调用 Action的处理请求的方法的时候会经过拦截器1,2,3,才真正调用Action的方法,Action方法结束后会返回一个视图,视图也会去参照 ActionMapping,还会参照Template(JSP,FreeMarker),此时,拦截器会再次拦截(说明Struts2的拦截器是进入 Action和返回结果的时候都会拦截的,这比Filter好!),最后产生HttpServletResponse,相应结果!

我们也看到了, 老版本上面, 我们需要的别的过滤器全部要放在Struts2的过滤器之前.  但是我现在有个需求:  我想在我的过滤器里面做一些事,需要Struts2的环境(ActionContext), 但是又需要在Struts2的Action执行之前.  这个时候, 老版本的那个过滤器就只能两眼望青天了.

打个比方, 好比一个病人要做手术,  做手术需要打麻药(自定义过滤器)和动手术(Struts2的过滤器), 请问打麻药要怎么打呢? 不能让病人站着吧.. 所以首先要准备一个床(ActionContext),  之后打麻药, 再手术.   这也就是StrutsPrepareAndExecuteFilter真正的含义. 可以分成StrutsPrepareFilter,StrutsExecuteFilter, 如果没有像之前那样的需求,我们一般都用StrutsPrepareAndExecuteFilter就可以了.

稍后请关注下一篇: StrutsPrepareAndExecuteFilter源码解读

时间: 2024-10-28 02:33:50

深入研究Struts2(一)---Struts2是什么?它的工作原理是什么?的相关文章

Struts2之struts2文件下载详解

一.学习案例:通过在downloadfile.jsp页面点击"下载文件",查看文件是否可以成功下载. 二.案例分析:struts2文件下载只需简单配置即可. a)先在下载页面(downloadfile.jsp)创建下载文件的链接 <a href="downloadFile">下载文件</a> b)创建action(DownloadFileAction.java) 只需创建一个InputStream类型类型的get方法. 注意:此处方法名规则为

16.如何自学Struts2之Struts2异常处理[视频]

16.如何自学Struts2之Struts2异常处理[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 有问题可以直接回复这篇文章.

17.如何自学Struts2之Struts2 Annotation注释[视频]

17.如何自学Struts2之Struts2 Annotation注释[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 有问题可以直接回复这篇文章.

13.如何自学Struts2之Struts2本地化[视频]

13.如何自学Struts2之Struts2本地化[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 这节课讲的过程中碰到了些问题,同时处理问题费了些时间,有问题可以直接回复这篇文章. 碰到问题:不能显示本地化的字符 解决方案:之前在Tomcat8.0的properties文件放在src下是可以的,但是在我本机用Tomcat7.0不知道为什么就不行,只要尝试放在Web

11.如何自学Struts2之Struts2验证[视频]

11.如何自学Struts2之Struts2验证[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 这节课讲的过程中碰到了些问题,同时处理问题费了些时间,有问题可以直接回复这篇文章. 错误1:http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd - Class: sun.net.www.protocol

???Struts2框架03 session的使用、登录逻辑【session工作原理】

1 登录逻辑 1.1 获取登录数据(例如:用户民.密码) 1.2 在控制层调用业务层来验证数据信息 1.3 登录成功:保存用户信息(服务器用session.浏览器用cookie),跳转到主页满 1.4 登录失败:留在登录页面,并给出错误提示信息 2 什么是session 就是一个会话对象,有服务器创建,目的是为了共享数据(注意:每一个浏览器对应一个session对象) 3 session的工作原理 待更新... 2017年7月3日21:53:09 4 在struts2中获取session对象的方

菜鸟学Struts2——Struts工作原理

在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中需要用户实现的部分只有三个,那就是struts.xml,Action,Template(JSP),如下图: 2.3.31中的org.apache.struts2.dispatcher.ActionContextCleanUp已经被标记为@Deprecated Since Struts 2.1.3,2

Struts2(二):工作原理

struts可查看源码:https://github.com/apache/struts 在学习struts2之前,我先看了一些比较早版本对struts2的工作原理相关的介绍,顺便抄写过来,用来帮助自己要弄清这个框架的工作原理. struts2.1.3之前使用的FilterDispatcher,之后的版本使用StrutsPrepareAndExecuteFilter,而我这里还是以Dispatcher为例来记录的. 依据: Since Struts 2.1.3, use org.apache.s

18.如何自学Struts2之Struts2标签和集成初略总结篇

18.如何自学Struts2之Struts2标签和集成初略总结篇[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 有问题可以直接回复这篇文章.