struts2的原理及作用
来源:互联网 发布:sql删除行 编辑:程序博客网 时间:2024/05/30 05:00
struts2的目的是什么
MVC模式应用于web程序设计
给我们带来什么样的好处?
(1) 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现。
(2) 丰富的标签库,大大提高了开发的效率.
(3) Struts2提供丰富的拦截器实现。
(4) 通过配置文件,就可以掌握整个系统各个部分之间的关系。
(5)异常处理机制,只需在配置文件中配置异常的映射,即可对异常做相应的处理。
(6) Struts2的可扩展性高。Struts2的核心jar包中由一个struts-default.xml文件,在该文件中设置了一些默认的bean,resultType类型,默认拦截器栈等,所有这些默认设置,用户都可以利用配置文件更改,可以更改为自己开发的bean,resulttype等。因此用户开发了插件的话只要很简单的配置就可以很容易的和Struts2框架融合,这实现了框架对插件的可插拔的特性。
(7)面向切面编程的思想在Strut2中也有了很好的体现。最重要的体现就是拦截器的使用,拦截器就是一个一个的小功能单位,用户可以将这些拦截器合并成一个大的拦截器,这个合成的拦截器就像单独的拦截器一样,只要将它配置到一个、Action中就可以。
struts的工作原理
一个请求在Struts2框架中的处理大概分为以下几个步骤
1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求
<formaction="${pageContext.request.contextPath}/login"method="post">
username:<inputtype="text"name="username"><br>
password:<inputtype="password"name="password"><br>
<inputtype="submit"value="提交">
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3、接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请是否需要调用某个Action
StrutsPrepareAndExecuteFilter是控制器的核心,就是mvc中c控制层的核心。下面粗略的分析下我理解的FilterDispatcher工作流程和原理:StrutsPrepareAndExecuteFilter进行初始化并启用核心doFilter
<filter>
<filter-name>struts2Filter</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5、ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 ,这里,我们一般是从struts.xml配置中读取。
<actionname="login"class="com.itheima.web.action.LoginAction"method="login">
<resultname="success">/success.jsp</result>
<resultname="failer">/login.jsp</result>
</action>
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
下面我们来看看ActionInvocation是如何工作的:
ActionInvocation是Xworks 中Action 调度的核心。而对Interceptor 的调度,也正是由ActionInvocation负责。ActionInvocation 是一个接口,而DefaultActionInvocation 则是Webwork 对ActionInvocation的默认实现。
Interceptor的调度流程大致如下:
1.ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。
2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。
Interceptor将很多功能从我们的Action中独立出来,大量减少了我们Action的代码,独立出来的行为具有很好的重用性。XWork、WebWork的许多功能都是有Interceptor实现,可以在配置文件中组装Action用到的Interceptor,它会按照你指定的顺序,在Action执行前后运行。
这里,我们简单的介绍一下Interceptor
publicclass MyInterceptor implements Interceptor {
@Override
publicString intercept(ActionInvocationinvocation)throws Exception {
//获取登录时存进session 中的user
Useruser = (User)ServletActionContext.getRequest().getSession().getAttribute("user");
if(user!=null){
//如果登录则放行
returninvocation.invoke();
}else{
//重新登录
ProductAction action = (ProductAction) invocation.getAction();
action.addActionError("登录失败");
return"login";
}
}
并且在struts.xml中进行配置
//拦截器
<interceptors>
<!-- 拦截showProduct 方法 -->
<interceptorname="myInterceptor"class="com.itheima.utils.MyInterceptor">
<paramname="includeMethods">showProduct</param>
</interceptor>
<interceptor-stackname="myStack">
<interceptor-refname="myInterceptor"></interceptor-ref>
<interceptor-refname="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
//登录的action 中引入拦截器
<resultname="login">/login.jsp</result>
<interceptor-refname="myStack"></interceptor-ref>
</action>
8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。
阅读全文
1 0
- struts2的原理及作用
- struts2的token拦截器的原理及作用
- OpenSessionInViewFilter的作用及原理
- Bundler 的作用及原理
- Struts2的原理及应用
- Oracle的Redo的作用及原理
- 代理的作用及原理的学习
- Oracle的Redo的作用及原理
- 光耦的作用及工作原理
- 堆栈的作用及工作原理
- 简述bloom filter的作用及原理
- Hibernate 的工作原理及作用
- 网卡的工作原理及作用
- 验证码的原理、作用及实现
- 验证码的原理、作用及实现
- 可变参数宏的原理及作用
- Java反射机制的原理及作用
- 光耦的作用及工作原理
- ajax打开新窗口window.open()被拦截的解决方法
- 10.18 一场简单的模拟赛 递推+tarjian+字符串+贪心
- 数字图像处理常用图像库
- C语言_自定义函数使用用例
- 17.10.18日报
- struts2的原理及作用
- 高级UI--有趣的水波纹
- Flyme6系统适配教程(Patchrom)
- 研究 | 语音和面部识别技术能帮助AI在情商上超越人类吗
- 应用 | 人工智能如何彻底变革人力资源格局,如何部署?
- 分析 | 无人驾驶汽车将如何彻底地改变城市面貌?
- 讨论 | 我们距离电影里的人工智能机器人到底有多远?
- IDEA 错误:找不到或无法加载主类
- angularJS四大特性