在struts2.0中,可以通过ServletActionContext.getRequest()获取request对象。 在action的方法中return一个字符串,该字符串对应struts.xml中的result标签的name相同,result标签中包含的就是跳转页面, 其原理,我的理解是这样的: 一.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action” 二.请求被提交到一系列(主要是三层)的过滤器(Filter),如ActionContextCleanUp,FilterDispatcher等 三.FilterDispatcher是控制器的核心,FilterDispatcher进行初始化并启用核心doFilter 四.FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 五、ActionProxy通过(struts.xml)询问框架的配置文件,找到需要调用的Action类. 六、ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)
ActionInvocation工作原理: 1. ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。 2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。 3. 旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果

可以说Struts2本质还是一个Servlet(在S1中用于整体控制的是一个Servlet;S2中是一个Filter,其实也可把它看作是Servlet),只是对Servlet进一步的封装罢了
打个比方:做Web项目,好比建房子。Servlet好比木材,用一根根的木材搭,也可盖起房子,只是速度慢而已;
而Struts2好比是用木材做好的一个房子大概结构,要建房子时,只需把它拿过来,再往其里面添砖加瓦,修修补补,就能很快盖好房子,这要比直接使用Servlet要快得多
具体对比

1.开发时间。这个的对比是struts比servlet低。因为struts有一些配置文件,如果有些不注意思,出错的机会比servlet大,不如使用jsp+servlet开发随意。 2.代码的规范。因为jsp+servlet开发随意。规范性应差。控制语句到处有,为维护及修改带来不便。也使接手的人为解读代码带来不便。 3.安全性。web开发最不安全的就是session的使用.servlet的开发离不开request。有了request,那也就有了session,以前我们有个组开发,乱用session,使系统的性能很着。而且有很多保密信息外漏。如果你在serlet中封装request,那你就会发现越来越象struts。而struts的值都保存在ActionForm中,所以进行简单的封装就可以使底层人员,看不到requet,又不影响取值。 4.维护性。这个基本处于项目后期,这个的比较,就是struts远胜于servlet。只在PM控制的好。那么struts项目的代码分层很清晰。数据层,页面表示,页面控制,业务处理,这些都会分好模块。这给后期维护带来了很大的方便。因为后期的话,谁也不想引入新的BUG,如果用servlet,代码结构不清晰,很空易引入新BUG。这也是struts最强势的地方。
struts最受人指责的地方就是前期布署,开发比较费时。所以现在的方向是便捷开发易编创护框架的开发。

最新文章

  1. SQL Server存储过程
  2. Python爬虫:Xpath语法笔记
  3. VAssistX使用小窍门
  4. SharePoint 2013 - User
  5. IOS基础之 (九) Foundation框架
  6. POJ 3468 A Simple Problem with Integers(线段树区间更新区间查询)
  7. aspx网页相对布局
  8. Extjs中自定义事件
  9. 如何配置svn服务器
  10. PixelFormat 图像颜色的数据格式
  11. 各种排序方法的JS实现
  12. 解决phpmailer可以在windows下面发送成功, 在linux下面失败的问题
  13. maven构建这么慢,怎么改变?
  14. Linux系列
  15. bmi
  16. 使用Jackson时转换JSON时,日期格式设置
  17. 在.NET下如何预防XXE注入攻击
  18. 使用代理创建连接池 proxyPool
  19. Java的oauth2.0 服务端与客户端的实现
  20. WPF 实现阴影效果

热门文章

  1. python学习笔记(八)之元组
  2. 使用abp的 redis cache
  3. 简易微信小程序签到功能
  4. Maven学习笔记(一)
  5. xrange和range的区别
  6. 【Python学习笔记】Coursera课程《Python Data Structures》 密歇根大学 Charles Severance——Week6 Tuple课堂笔记
  7. epoll内核源码分析
  8. 64_g2
  9. leetcode 141 142. Linked List Cycle
  10. CF1064 E - Dwarves, Hats and Extrasensory Abilities