Webwork 学习之路【03】核心类 ServletDispatcher 的初始化

简介:

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 里面配置项。

复制代码
 1 <servlet>
 2 <servlet-name>webwork</servlet-name>
 3 <servlet-class>
 4 com.opensymphony.webwork.dispatcher.ServletDispatcher //核心启动类 com.opensymphony.webwork.dispatcher.ServletDispatcher
 5 </servlet-class>
 6 </servlet>
 7 <servlet-mapping>
 8 <servlet-name>webwork</servlet-name>
 9 <url-pattern>*.action</url-pattern> // 映射所有的 .action 请求到 servlet
10 </servlet-mapping>
11 <welcome-file-list>
12 <welcome-file>index.jsp</welcome-file>
13 </welcome-file-list>
14 <error-page>
15 <error-code>500</error-code>
16 <location>/doError.action</location>
17 </error-page>
18 <session-config>
19 <session-timeout>60</session-timeout>
20 </session-config>
21 <jsp-config>
22 <taglib>
23 <taglib-uri>webwork</taglib-uri>
24 <taglib-location>/WEB-INF/webwork.tld</taglib-location> //加载webwork 便签库
25 </taglib>
26 <jsp-property-group>
27 <url-pattern>*.jsp</url-pattern> //设定便签库的所影响的范围
28 <el-ignored>true</el-ignored> //若为 true,表示不支持 EL 语法 
29 </jsp-property-group>
30 </jsp-config>
31 
32 <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,返回执行结果。

复制代码
 1 public void init(ServletConfig servletConfig) throws ServletException {
 2     super.init(servletConfig);
 3     if ("true".equalsIgnoreCase(Configuration.getString("webwork.configuration.xml.reload"))) {
 4         FileManager.setReloadingConfigs(true); 
 5     }
 6     if (Configuration.isSet("webwork.i18n.encoding")) {
 7         encoding = Configuration.getString("webwork.i18n.encoding"); 
 8     }
 9     if (Configuration.isSet("webwork.locale")) {
10         locale = localeFromString(Configuration.getString("webwork.locale"));
11     }
12     servletConfig.getServletContext().setAttribute("webwork.servlet", this);
13     if (servletConfig.getServletContext().getServerInfo().indexOf("WebLogic") >= 0) {
14         log.info("WebLogic server detected. Enabling parameter access work-around.");
15         this.paramsWorkaroundEnabled = true;
16     } else {
17         log.debug("Parameter access work-around disabled.");
18     }
19 }
复制代码

   上面是核心类 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 已经产生了。


本文转自Orson博客园博客,原文链接:http://www.cnblogs.com/java-class/p/5072023.html,如需转载请自行联系原作者

相关文章
|
8月前
|
前端开发 Java Spring
浅谈SpringMVC的概念及执行原理
浅谈SpringMVC的概念及执行原理
33 0
|
存储 缓存 安全
SpringMVC源码剖析之自动注入Request,为什么可行?
我们知道在SpringMVC中controller层可以通过Autowire自动注入Request到当前类来使用。如果看过Spring源码,IOC容器进行实例化bean的时候,一级缓存中存放的都是单例Bean。
226 0
SpringMVC源码剖析之自动注入Request,为什么可行?
|
应用服务中间件
WEB核心【request对象】第九章
目录1,request对象1.1引言&概述1.2请求行1.3请求头【重点】1.4请求体【阶段重点】1.4.1请求参数1.4.2乱码解决request封装了 浏览器发来请求的三部分(行、头、体) http 1.1:长链接 请求体:post方式请求参数:get:请求行 post:请求体 小结:toBean: 该参数列表较为复杂,参数列表需要进行servlet---
WEB核心【request对象】第九章
|
小程序 Java 应用服务中间件
WEB核心【Servlet,阶段重点】第四章
WEB知识中的(Servlet)很重要,该篇章,为大家详细介绍了Servlet,创建,使用,以及注意事项,常见问题总览,参数的获取,和分包思想,等等。
WEB核心【Servlet,阶段重点】第四章
|
Web App开发 JavaScript 前端开发
pyppeteer最为核心类Page的接口方法
重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味! 重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味! Page类是pyppeteer的核心,...
1926 0
|
数据采集 前端开发 JavaScript
pyppeteer最为核心类Page的接口方法(下)
重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味! 在上一篇《pyppeteer最为核心类Page的接口方法》讲了大部分pyppeteer的Page类的接口,与selenium相比增强了与页面js的交互功能,同时增加了设备的伪装和模拟能力,一方是因为pyppeteer库是源于puppeteer,而puppeteer是Google提供了一个js库,本身和js的交互性强,所以在页面交互上更深入。
1845 0