seo研究中心好客站,网站导航一定要一样吗,京东云wordpress,wordpress弹窗WebWork是由OpenSymphony组织开发的#xff0c;致力于组件化和代码重用的J2EE Web框架。WebWork目前最新版本是2.2.2#xff0c;现在的WebWork2.x前身是Rickard Oberg开发的WebWork#xff0c;但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。 WebWork是建立在称为XW… WebWork是由OpenSymphony组织开发的致力于组件化和代码重用的J2EE Web框架。WebWork目前最新版本是2.2.2现在的WebWork2.x前身是Rickard Oberg开发的WebWork但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。 WebWork是建立在称为XWork的Command模式框架之上的强大的基于Web的MVC框架。 WebWork2建立在Xwork之上处理HTTP的请求和响应。所有的请求都会被它的前端控制器ServletDispatcher最新版本是FilterDispatcher截获。前端控制器对请求的数据进行包装初始化上下文数据根据配置文件查找请求URL对应的Action类执行Action将执行结果转发到相应的展现页面。WebWork2支持多视图表示视图部分可以使用JSP,Velocity,FreeMarker,JasperReportsXML等。 下面我们提到的WebWork将为WebWork2使用的版本是WebWork2.2.2。 原理 WebWork的网站上提供了一个完整的WebWork架构图。它描述了从客户端的一次请求到最后服务器端响应的整个执行过程。架构图如下 此架构图一共分为五个部分其中五个部分分别由五种不同颜色表示。
1浅灰色方框。分别代表了客户端的一次Http请求和服务器端运算结束之后的一次响应。
2浅红色方框。表示一次Action请求所要经过的Servlet filtersServlet 过滤器。我们可以看到最后一个filter就是我们前面介绍的WebWork的前端控制器。
3蓝色方框。这是WebWork框架的核心部分。 1一次请求到了WebWork的前端控制器它首先会根据请求的URL解析出对应的action 名称然后去咨询ActionMapper这个action是否需要被执行。 2如果ActionMapper决定这个action需要被执行前端控制器就把工作委派给ActionProxy。 接着她们会咨询WebWork的配置管理器并读取在web.xml文件中定义的配置信息。接下来ActionProxy会创建ActionInvocation对象。 3ActionInvocation是Xwork原理的Command模式实现部分。它会调用这个Action已定义的拦截器(before方法)Action方法Result方法。 4最后看上面流程的图的方向它会再执行拦截器after方法再回到Servlet Filter部分最后结束并传给用户一个结果响应。
4靛色方框。这是拦截器部分在上面的拦截器章节我们已经有了详细的介绍。
5黄色方框。这是我们在开发Web应用时需要自己开发的程序。其中包括Action类页面模板配置文件xwork.xml。 核心
WebWork的三个关键部分
1Actions。一般一个Action代表一次请求或调用。在WebWork中一般Action类需要实现Action接口或者直接继承基础类ActionSupport。这是它要实现默认的execute方法并返回一个在配置文件中定义的Result也就是一个自定义的字符串而已。当然Action也可以只是一个POJO普通Java对象不用继承任何类也不用实现任何接口。Action是一次请求的控制器同时也充当数据模型的角色我们强烈建议不要将业务逻辑放在Action中。
2Results。它是一个结果页面的定义。它用来指示Action执行之后如何显示执行的结果。Result Type表示如何以及用哪种视图技术展现结果。通过Result TypeWebWork可以方便的支持多种视图技术而且这些视图技术可以互相切换Action部分不需做任何改动。
3Interceptors。WebWork的拦截器WebWork截获Action请求在Action执行之前或之后调用拦截器方法。这样可以用插拔的方式将功能注入到Action中。WebWork框架的很多功能都是以拦截器的形式提供出来。例如参数组装验证国际化文件上传等等。 特点
ValueStack 和 EL
1ValueStack其实就是一个放置Java对象的堆栈而已唯一特别的是可以使用EL来获得值堆栈中对象属性的数据并可以为值堆栈的对象属性赋值。
2EL全称Express Language即表达式语言。不要被语言吓倒它是简单的对象导航语言。由字符串例如方法名 和特殊字符组成例如用.表示调用对应的属性方法。通过EL我们可以存、取对象数据而且还可以直接访问类的静态数据调用静态方法。
3WebWork的ValueStack底层由第三方开源项目OGNL实现。所以EL也都遵循OGNL的规范。我们在开发中几乎不需要知道OGNL的细节。
4WebWork为每一次请求构建一个ValueStack并将所有相关的数据对象例如Action对象、Model对象等放到ValueStack中。 再将ValueStack暴露给视图页面这样页面就可以直接访问后台处理生成的数据。 Interceptor( 拦截器 )
1一个拦截器就是在xwork.xml文件中定义的一个无状态Java类它至少要实现XWork的com.opensymphony.xwork.interceptor.Interceptor接口。
2实现Interceptor接口的拦截器代码部分在intercept方法中实现。在intercept方法中可以直接返回一个Result字符串这样整个执行直接“短路”这时Action的execute方法也不会执行一般很少会这么用。所以一般都会在这个方法里调用参数对象invocation的invoke方法并返回这个方法执行的结果。这样会持续执行后面的拦截器方法以及Action的execute方法等。 3大部分的时候拦截器直接继承WebWork的抽象类com.opensymphony.xwork.interceptor.AroundInterceptor就可以了。这时需要实现它的before和after方法。Before方法会在Action执行之前调用after方法在Action执行之后调用。
4拦截器的执行顺序。我们可将多个拦截器放一起组装成一个拦截器栈。这样拦截器会按照栈的顺序由上而下执行before方法所有before方法执行结束再执行Action的方法执行Result的方法再返回执行结果最后再从下而上执行拦截器的after方法。
5拦截器的过滤功能。我们通常会在应用中使用一个通用的定义多个拦截器的拦截器栈。但有些Action方法在调用的时候不需要要其中的部分拦截器。这时我们就可以使用拦截器过滤功能。如果拦截器要拥有过滤功能必须实现抽象类com.opensymphony.xwork.interceptor.MethodFilterInterceptor。这样拦截器在定义的时候或者在Action引用拦截器栈的时候我们就可以指定哪些Action方法是需要过滤的哪些Action是不需要过滤的。