你的位置:首页 > ASP.net教程

[ASP.net教程]Webwork 学习之路(三)核心类 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.

 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 请求到 servlet10 </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 和 它的初始化

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

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

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

c. ServletDispatcher接受客户端的HTTP请求,将JavaServlet的很多相关对象进行包装,再传给我们的XWork框架由我们的XWork框架去解析我们的xwork.

 1 public void init(ServletConfig servletConfig) throws ServletException { 2   super.init(servletConfig); 3   if ("true".equalsIgnoreCase(Configuration.getString("webwork.configuration.))) { 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.

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

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

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

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

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

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