浅谈struts2
2015-11-26 18:35
459 查看
浅谈Struts2
一、Struts2的出现
JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。基于Struts开发的应用由3类组件构成:控制器组件、模型组件、
视图组件.
目前流行的基于MVC设计模式的前端框架有struts1,struts2,springMVC等;
在这里简单介绍一下struts2
二、Struts2的工作原理
在struts2的应用中,从用户请求到服务器返回相应响应给用户端的过程中,使用到了许多组件如:Controller、ActionProxy、ActionMapping、 Configuration Manager、ActionInvocation、Inerceptor、Action、Result等。下面我们来具体看看这些组件有什么联系,它们之间是怎样在一起工作的。在Struts2框架中的处理大概分为以下几个步骤:
1.客户端(Client)向Action发送一个指向Servlet容器(如:tomcat)的请求。
2.这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3.接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action
FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。下面粗略的分析一下我理解的FilterDispatcher工作流程和原理:FilterDispatcher进行初始化并启用核心doFilter
4.如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5.ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类
6.ActionProxy创建一个ActionInvocation的实例。
7.ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8.一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置文件找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarher的模板。在表示的过程中可以使用Struts2框架中集成的标签。在这个过程中需要涉及到ActionMapper.
在Struts2.0到Struts2.1.2版本的核心过滤器是FilterDispatcher
从Struts2.1.3开始就被StrutsPrepareAndExecuteFilter取代了。
取代的原因如下:
StrutsPrepareAndExecuteFilter是StrutsPrepareFilter和StrutsExecuteFilter的组合。这样做有一个好处:
如果我们自己定义过滤器,是要放在Struts2的过滤器之前的,如果放在struts2过滤器之后,那么自定义的过滤器对action的过滤作用就废了。
如果有需求,我们必须使用Action的环境,而又想在执行action之前拿filter做一些事,用FilterDispatcher是做不到的。
此时StrutsPrepareAndExecuteFilter可以拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器。
三、Struts2的工作流程
1.客户端浏览器发出HTTP请求2.根据web.xml配置,该请求被StrutsPrepareAndExecuteFilter接收
3.根据struts.xml配置,找到需要调用的Action类和方法,并通过IOC方式,将值注入给Action
4.Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5.Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
6.返回HTTP响应到客户端浏览器。
四、Tomcat做了什么?
当一个HTTP协议指向tomcat容器时,tomcat拿到请求干了什么?1.浏览器的请求发送到后台,根据端口号,会找到对应的服务,也就是容器tomcat,然后tomcat根据后面的请求地址,将请求分发到具体的工程里面。
2.Struts的和核心功能就是过滤器,这个filter就是struts2的一个默认过滤器。Struts2不再需要用表单去接收页面的数据(不像struts1),而是直接在action中定义属性(符合javabean规范,使用的IOC将值注入给action)就可以获取到页面的表单数据。
相关文章推荐
- Eclipse卡死解决汇总
- 获取jar包内部的资源文件
- 安卓(java)判断文件是否存在
- Java线程的生命周期
- java中urlrewrite的配置和使用
- java 四舍五入 保留俩位小数
- Eclipse - Memory Analyzer
- SpringMVC源码解析(下)
- java rar解压
- Eclipse Building Workspace 编译慢 解决办法
- Spring MVC(二)基于注解的登陆界面获取用户名和密码并跳转其它页面
- java socket报 connection reset的原因和解决方式
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- [Java学习] Java虚拟机(JVM)参数简介
- java实现数据库连接池
- Spring MVC(一)登陆界面获取用户名和密码并跳转其它页面
- Java 获取当前所有的线程
- [Java代码] Java Bean 工具包 Dozer
- Java文件操作大全
- java md5 函数