`
sunnylovewindy
  • 浏览: 5978 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
文章分类
社区版块
存档分类
最新评论

死磕Struts源码.(ActionServlet的初始化一)

阅读更多
小弟最近研究了部分Struts源码,只把初始化部分看了几遍来和大家分享,理解有误之出请大家多多指出,谢谢!

ActioinServlet的初始化

每个web工程的核心配置文件是web.xml,在每次启动服务器的时候(如:Tomcat)都会自动加载web.xml,会自动运行里面配置的ActionServlet。(不了解的朋友可以看下Servlet的工作原理)

<servlet>

    <servlet-name>action</servlet-name>

    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

</servlet>

ActionServlet就是一个正常的Servlet初始化一样是通过init方法(可参考Servlet的初始化)

在ActionServlet的init方法中按顺序调用了几个方法,分别初始化了不同的信息。

1、initInternal()

这里用到了几个类

抽象类MessageResources,MessageResourcesFactory

普通类PropertyMessageResources,PropertyMessageResourcesFactory

 

这个方法的作用是:初始化Struts内部资源包。就是初始化Struts自身需要的资源文件。

这个资源文件的全路径是org.apache.struts.action.ActionResources.properties

initInternal方法中通过MessageResources.getMessageResources(internalName)获得一个

MessageResources对象,其中的参数internalName是资源文件ActionResources.properties的全路径

那么,getMessageResources方法的内部是如何实现的呢?它的内部首先获得一个MessageResources

的工厂MessageResourcesFactory的实例defaultFactory,这是通过 MessageResourcesFactory.createFactory()实现的之后用defaultFactory.createResources(config)返回一个MessageResources实例,这里的config就是前面的internalName.这个方法实际上是一个抽象方法,等待继承他的类去实现。当然这个工厂也可以自己定义。

这是createFactory方法的源码用到java的反射机制获取工厂的实例

public static MessageResourcesFactory createFactory() {

    try {

        if (clazz == null){

            clazz = RequestUtils.applicationClass(factoryClass);

            MessageResourcesFactory factory = (MessageResourcesFactory) clazz.newInstance();

            return (factory);

        } catch (Throwable t) {

           log.error("MessageResourcesFactory.createFactory", t);

           return (null);

         }

}

 

前面提到的类还有两个没有说,PropertyMessageResourcesFactory类继承了MessageResourcesFactory重写了createResources方法返回PropertyMessageResources实例。

而PropertyMessageResources继承了MessageResources类 这是非常好的封装过程。

 

2、initOther()初始化servlet的其他全局特性

这个方法从web.xml中获得'config'参数和'converNull'参数的值,我没见到有'converNull'属性,网上说现在已经变成debug这地方我还没弄明白。

<init-param>

<param-name>config</param-name>

<param-value>/WEB-INF/struts-config.xml</param-value>

</init-param>

<init-param>

<param-name>debug</param-name>

<param-value>3</param-value>

</init-param>

白初始化了一个ConvertUtils对象,ConvertUtils对象的使用我也没弄明白。

 

3、initServlet()在ActionServlet被访问之内初始化servletMapping

利用Digester类取得文件标识解读web.xml,对servletMapping进行初始化。这里的Digester类是common包中的,没有弄明白如何使用和其作用。

 

4、initChain()初始化chainConfig.‘chainConfig’是在web.xml中配置的init-param参数

 

先说这些,初始化中还有一个关键的ModuleConfig初始化非常重要,下次再说。
分享到:
评论
4 楼 nebulaliang 2008-07-31  
aidiyuxin 写道
大哥 ~~这地方的人都比较专业,要骗帖子,请换个地方~
嘎嘎
struts was very very old~~
嘎嘎
换点东西吧 比如:xslt什么的,哈哈
有时间可以自己写一个简单点的struts嘛

不同意楼上说的。struts不管旧不旧,它的源代码都值得研究,因为那简直可以当作设计模式的活教材,如果能研究透的话一定会受益匪浅。当然不是说它设计的有多么完美,如果那样的话也不用出struts2了,主要是能从中学到东西。我也在研究struts源代码,不过现在只研究了一点点。
3 楼 aidiyuxin 2008-05-08  
大哥 ~~这地方的人都比较专业,要骗帖子,请换个地方~
嘎嘎
struts was very very old~~
嘎嘎
换点东西吧 比如:xslt什么的,哈哈
有时间可以自己写一个简单点的struts嘛
2 楼 lord_is_layuping 2008-04-07  
关注,

1 楼 ericxu131 2008-03-19  
之前看过struts in action 里面有简单的原理介绍
感觉差不多

相关推荐

    Struts 源码学习之ActionServlet

    &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt; &lt;param-name&gt;config /WEB-INF/struts-config.xml, /WEB-INF/struts-config-Wildcard.xml &lt;load-on-startup&gt;2 &lt;/servlet&gt; ...

    struts1.x和struts2.x区别

    在Struts1.x中,Action是核心组件之一,它必须继承自org.apache.struts.action.Action类,并且需要覆盖execute方法。Action对象由框架创建和管理,每一个HTTP请求都对应一个Action实例。然而,在Struts2.x中,Action...

    struts1.x技术课程讲解.pdf

    2. **ActionServlet**:Struts1.x 的核心组件,负责初始化框架、接收 HTTP 请求并将请求分发给相应的 Action 类处理。 3. **ActionMapping**:配置文件 struts-config.xml 中定义的一个节点,用于描述一个 Action ...

    struts1.x 和 struts2.x向Action里填充jsp参数原理

    Struts1的核心是ActionServlet,它是一个实现了Servlet接口的控制器。当用户发起HTTP请求时,请求会被Dispatcher拦截并转发到对应的ActionForm。ActionForm是模型层与视图层之间的桥梁,用于接收和验证来自JSP页面的...

    Struts1.x系列教程(网摘-全)

    7. **RequestProcessor**:在ActionServlet之后处理请求,它是Struts1.x的内部组件,负责实例化ActionForm和调用Action。 8. **国际化与本地化**:Struts1.x支持多语言,通过资源包(properties文件)来实现。你...

    Struts1.x的登录示例

    创建一个名为`LoginAction`的类,继承自`org.apache.struts.action.Action`。在这个类中,你需要重写`execute()`方法,该方法处理用户的登录请求,验证用户名和密码,然后根据验证结果返回一个转发(Forward)到...

    基于Servlet的课程管理系统源码.zip

    基于Servlet的课程管理系统源码.zip基于Servlet的课程管理系统源码.zip基于Servlet的课程管理系统源码.zip基于Servlet的课程管理系统源码.zip基于Servlet的课程管理系统源码.zip基于Servlet的课程管理系统源码.zip...

    struts 2.3.15.2 源码

    8. **Filter Dispatcher**:Struts 2的入口点是Filter Dispatcher,它是一个Servlet Filter,负责拦截HTTP请求并分发到合适的Action。源码中可查看其拦截和分发的逻辑。 9. **ActionContext**:ActionContext封装了...

    搭建struts1.x环境例子源码

    &lt;filter-class&gt;org.apache.struts.action.ActionServlet &lt;param-name&gt;config &lt;param-value&gt;/WEB-INF/struts-config.xml &lt;param-name&gt;debug &lt;param-value&gt;2 &lt;param-name&gt;detail &lt;param-value&gt;2 ...

    struts1.x入门教程

    - **web.xml**:这是Servlet容器的配置文件,我们在这里配置ActionServlet,设置其初始化参数,指定struts-config.xml的路径,并将默认欢迎文件设置为login.jsp。 - **struts-config.xml**:这是Struts框架的核心...

    struts1.2.jar包

    web.xml用于配置Servlet和Filter,以及Struts的初始化参数。 4. **Form Beans**:在Struts框架中,Form Beans用于在Action类和视图之间传递数据。它们是JavaBeans,可以包含字段和getter/setter方法,用于收集和...

    Struts1.x_action

    Action类通常继承自`org.apache.struts.action.Action`基类,并覆盖其execute方法。执行execute方法时,Action会根据请求参数和业务逻辑来处理请求,并返回一个表示结果的ActionForward对象,这个对象指示Struts框架...

    jakarta-servletapi-4-src.zip servlet源码

    在Servlet的生命周期中,`init()`方法在Servlet实例化后首次被调用,用于初始化Servlet;`service()`方法处理客户端请求;而`destroy()`方法在Servlet销毁前执行,用于释放资源。源码中,我们可以看到这些方法的具体...

    struts-2.3.15.3源码

    关于删除的lib库,Struts 2依赖于一系列的第三方库,包括Apache Commons、XWork、Freemarker、Java Servlet API等。这些库提供了诸如依赖注入、AOP(面向切面编程)、I18N(国际化)、数据校验等功能。在开发环境中...

    javax.servlet.jar下载

    Files contained in javax.servlet.jar: META-INF/MANIFEST.MF javax/servlet/http/LocalStrings.properties javax.servlet.http.HttpSessionBindingListener.class javax.servlet....

    struts in action (struts1.x)

    `Struts 1.x` 是 Apache 软件基金会(ASF)下的一个开源项目,是 Java Servlet 和 JavaServer Pages(JSP)平台上的一个MVC(Model-View-Controller)框架,主要用于构建企业级Web应用程序。这个框架在2002年发布,...

    Struts1.xpdf文件

    它实现了`org.apache.struts.action.Action`接口,并通过覆盖`execute`方法来执行具体的业务逻辑。 - **Form Beans**: Form Beans是用于封装表单数据的对象。它们通常包含与HTML表单字段对应的属性,并提供验证这些...

    org.apache.struts2.dispatcher.FilterDispatcher

    `org.apache.struts2.dispatcher.FilterDispatcher`是Struts 2框架中的一个核心组件,它作为Servlet过滤器(Filter)实现,负责处理HTTP请求并将其路由到相应的Action。在深入讲解这个知识点之前,我们先来理解一下...

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    当你遇到“找不到javax.servlet.*”这样的错误时,通常是因为你的项目缺少了这个库,所以需要引入`javax.servlet.jar`来解决问题。 1. **Java Servlet简介** Java Servlet是Java平台上的一个标准,用于扩展服务器...

    struts1.x入门

    &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt; &lt;param-name&gt;config &lt;param-value&gt;/WEB-INF/struts-config.xml &lt;load-on-startup&gt;1 &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-...

Global site tag (gtag.js) - Google Analytics