1. Webwork 与 Xwork

搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,WebWork2 被构建在XWork之上,以XWork为基础。通过使用XWork的命令模式框架和拦截器框架,提供了一个支持Web功能、能快速构建Web应用的命令模式框架。而XWork是一个标准的Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证、IoC容器、类型转换、强大的表达式语言OGNL等......

可以参考下上篇博客:Webwork 学习之路(二)前端OGNL试练

2.Webwork配置

一切Web项目开始的地方,都是web.xml。web.xml 具体都能干什么,都能配置什么,根据需求自己配置了,俺这里就不多说了。下面的webwork框架在在我的项目 web.xml 里面配置项。

 <servlet>
<servlet-name>webwork</servlet-name>
<servlet-class>
com.opensymphony.webwork.dispatcher.ServletDispatcher //核心启动类 com.opensymphony.webwork.dispatcher.ServletDispatcher
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>webwork</servlet-name>
<url-pattern>*.action</url-pattern> // 映射所有的 .action 请求到 servlet
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>500</error-code>
<location>/doError.action</location>
</error-page>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
<jsp-config>
<taglib>
<taglib-uri>webwork</taglib-uri>
<taglib-location>/WEB-INF/webwork.tld</taglib-location> //加载webwork 便签库
</taglib>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern> //设定便签库的所影响的范围
<el-ignored>true</el-ignored> //若为 true,表示不支持 EL 语法
</jsp-property-group>
</jsp-config> <load-on-startup>1</load-on-startup> //启动顺序,大于等于0,自动启动。数字越小优先级越高,这一行是我自己添加的,没有用的,如果serlvet 没有添加这个节点,说明它是不用在启动的时候去启动的。

3.核心类 ServletDispatcher 和 它的初始化

终于转的正题了。介绍下WebWork 最核心调度类 com.opensymphony.webwork.dispatcher.ServletDispatcher.

a. ServletDispatcher是默认的处理Web Http请求的调度器,它是一个JavaServlet,是WebWork框架的控制器。

b. 所有对Action调用的请求都将通过这个ServletDispatcher调度。

c. ServletDispatcher接受客户端的HTTP请求,将JavaServlet的很多相关对象进行包装。

再传给我们的XWork框架由我们的XWork框架去解析 xwork.xml 配置文件。

根据配置文件的信息,创建对应的Action,组装并调用相应的拦截器,执行Action,返回执行结果。

 public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
if ("true".equalsIgnoreCase(Configuration.getString("webwork.configuration.xml.reload"))) {
FileManager.setReloadingConfigs(true);
}
if (Configuration.isSet("webwork.i18n.encoding")) {
encoding = Configuration.getString("webwork.i18n.encoding");
}
if (Configuration.isSet("webwork.locale")) {
locale = localeFromString(Configuration.getString("webwork.locale"));
}
servletConfig.getServletContext().setAttribute("webwork.servlet", this);
if (servletConfig.getServletContext().getServerInfo().indexOf("WebLogic") >= 0) {
log.info("WebLogic server detected. Enabling parameter access work-around.");
this.paramsWorkaroundEnabled = true;
} else {
log.debug("Parameter access work-around disabled.");
}
}

上面是核心类 ServletDispatcher 的初始化方法,init()只有在使用框架第一次调用action时被使用,框架类 只初始化一次,来具体看看它都做了点什么?

a. 检查是否支持配置文件重新载入功能。如果webwork.configuration.xml.reload(见webwork.properties文件)设置为true,每个request请求都将重新装载xwork.xml配置文件(说是这样说,亲测没什么卵用)

在开发环境使用将会非常方便,但在生产环境必需设置为false;

b. 设置一些文件上传的信息,比如:上传临时目录,上传的最大字节等。都设置在webwork.properties文件里,如果在classpath中找不到这个属性文件,它会去读取默认的default.properties;

c. 设置编码方式、语言环境;

d. 针对WebLogic应用服务器做了相应的优化设置。

e. 告诉Servlet 上下文,我webwork 已经产生了。

差不多,先总结到这里吧。还有许多不明朗的地方需要在多研究研究,本文中如有不正确的地方还请各位看客老爷们斧正。

Webwork 学习之路【03】核心类 ServletDispatcher 的初始化的更多相关文章

  1. Webwork【03】核心类 ServletDispatcher 的初始化

    1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...

  2. Webwork 学习之路【06】Action 调用

    一路走来,终于要开始 webwork 核心业务类的总结,webwork 通过对客户端传递的 web 参数重新包装,进行执行业务 Action 类,并反馈执行结果,本篇源码分析对应下图 WebWork ...

  3. Webwork 学习之路【04】Configuration 详解

    Webwork做为经典的Web MVC 框架,个人觉得源码中配置文件这部分代码的实现十分考究. 支持自定义自己的配置文件.自定义配置文件读取类.自定义国际化支持. 可以作为参考,单独引入到其他项目中, ...

  4. Webwork 学习之路【07】文件上传下载

    Web上传和下载应该是很普遍的一个需求,无论是小型网站还是大并发访问的交易网站.WebWork 当然也提供了很友好的拦截器来实现对文件的上传,让我们可以专注与业务逻辑的设计和实现,在实现上传和下载时顺 ...

  5. ABP 框架从源码学习——abp框架启动核心类AbpBootstrapper(2)

    在AbpBootstrapper中的两个至关重要的属性:IIocManager 和 IAbpModuleManager  public class AbpBootstrapper : IDisposa ...

  6. Webwork 学习之路【08】结合实战简析Controller 配置

    虽然现在 MVC 框架层出不穷,但做为 Struts 前身的 webwork. 其经典程度不亚于贝利之于足球,双 11 之于淘宝特卖. 本篇将结合 webwork controller 配置文件 xw ...

  7. Webwork 学习之路【01】Webwork与 Struct 的前世今生

    Struts 1是全世界第一个发布的MVC框架,它由Craig McClanahan在2001年发布,该框架一经推出,就得到了世界上Java Web开发者的拥护,经过长达6年时间的锤炼,Struts ...

  8. ReactNative新手学习之路03真机调试

    React Native新手入门03真机调试(iOS) 从设备访问开发服务器 在启用开发服务器的情况下,你可以快速的迭代修改应用,然后在设备上查看结果.这样做的前提是你的电脑和设备必须在同一个wifi ...

  9. Webwork 学习之路【05】请求跳转前 xwork.xml 的读取

    个人理解 WebWork 与 Struts2 都是将xml配置文件作为 Controler 跳转的基本依据,WebWork 跳转 Action 前 xml 文件的读取依赖 xwork-1.0.jar, ...

随机推荐

  1. HashSet、LinkedHashSet、TreeSet

    以下内容基于jdk1.7.0_79源码: 关于HashSet.LinkedHashSet.TreeSet Set接口的实现类,最大特点是不允许出现重复元素: HashSet:基于HashMap实现,一 ...

  2. MySql 中 case when then else end 的用法

    解释: SELECT                case                   -------------如果    when sex='1' then '男' ---------- ...

  3. 【转发】NPAPI开发详解,Windows版

    NPAPI开发详解,Windows版 9 jiaofeng601, +479 9人支持,来自Meteor.猪爪.hanyuxinting更多 .是非黑白 .Yuan Xulei.hyolin.Andy ...

  4. SQLServer中ISNULL、NULLIF和CONVERT函数

    create view sss as(select ISNULL(operate_time, CONVERT(VARCHAR(20),create_time,120)) time from s_pro ...

  5. php框架laravel:数据库建立:artisan

    aravel 迁移是一种数据库的版本控制.迁移通常和 结构生成器 配对使用来管理您应用程序的数据库结构. 配置数据库 我们安装wamp,并且使用mysql方式.用wamp自带的phpMyAdmin添加 ...

  6. 获取session、request、parmeter的方法

    package com.hanqi.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; public ...

  7. 【转】ETL数据增量抽取——通过触发器方式实现

    在使用Kettle进行数据同步的时候, 共有 1.使用时间戳进行数据增量更新 2.使用数据库日志进行数据增量更新 3.使用触发器+快照表 进行数据增量更新 今天要介绍的是第3中方法. 实验的思路是这样 ...

  8. hadoop2.6分布式部署时 livenodes等于1的原因

    1.问题描述 在进行hadoop2.x版本的hdfs分布式部署时,遇到了一个奇怪的问题: 使用start-dfs.sh命令启动dfs之后,所有的datanode节点上均能看到datanode进程,然而 ...

  9. python可分组字典

    # -*- encoding: UTF-8 -*- from collections import defaultdict class News(object): def __init__(self, ...

  10. URL tailing slash

    Without tailing slash request header GET /snippets HTTP/1.1 User-Agent: Fiddler Host: 192.168.128.13 ...