层层递进Struts1(四)之预加载ActionServlet

Struts的执行相当于分为两个阶段,预加载阶段和执行阶段,预加载阶段是指在Tomcat启动之时就开始执 行的内容,而此时我们并未真正进入跳转逻辑,这篇博客我们来分析一下预加载阶段。

配置文件

还记得web.xml中关于Struts的Servlet是如何配置的吗?

  <servlet-

name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <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>2</param-value>
  </init-param>
  <init-param>
    <param-name>detail</param-name>
    <param-value>2</param-value>
  </init-param>
  <load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

其中<load-on-startup>2</load-on-startup>指的就是在 Tomcat启动之时即执行,实际只要数字大于0,意思就是Tomcat启动即执行,为了进入调试,我们把这里改为0 。

<load-on-startup>0</load-on-startup>  

主函数init()

经过调 试发现,当执行完此函数,Struts的预加载阶段即结束,所以我们主要来看这个函数即可。

/**
 * <p>Initialize this servlet.  Most of the processing has been factored into
 * support methods so that you can override particular functionality at a
 * fairly granular level.</p>
 *
 * @exception ServletException if we cannot configure ourselves correctly
 */
public void init() throws ServletException {  

    // Wraps the entire initialization in a try/catch to better handle
    // unexpected exceptions and errors to provide better feedback
    // to the developer
    try {
        initInternal();
        initOther();
        initServlet();  

        getServletContext().setAttribute(Globals.ACTION_SERVLET_KEY, this);
        initModuleConfigFactory();
        // Initialize modules as needed
        ModuleConfig moduleConfig = initModuleConfig("", config);
        initModuleMessageResources(moduleConfig);
        initModuleDataSources(moduleConfig);
        initModulePlugIns(moduleConfig);
        moduleConfig.freeze();  

        Enumeration names = getServletConfig().getInitParameterNames();
        while (names.hasMoreElements()) {
            String name = (String) names.nextElement();
            if (!name.startsWith("config/")) {
                continue;
            }
            String prefix = name.substring(6);
            moduleConfig = initModuleConfig
                (prefix, getServletConfig().getInitParameter(name));
            initModuleMessageResources(moduleConfig);
            initModuleDataSources(moduleConfig);
            initModulePlugIns(moduleConfig);
            moduleConfig.freeze();
        }  

        this.initModulePrefixes(this.getServletContext());  

        this.destroyConfigDigester();
    } catch (UnavailableException ex) {
        throw ex;
    } catch (Throwable t) {  

        // The follow error message is not retrieved from internal message
        // resources as they may not have been able to have been
        // initialized
        log.error("Unable to initialize Struts ActionServlet due to an "
            + "unexpected exception or error thrown, so marking the "
            + "servlet as unavailable.  Most likely, this is due to an "
            + "incorrect or missing library dependency.", t);
        throw new UnavailableException(t.getMessage());
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, struts1
this
struts actionservlet、初中层层递进语文答案、层层递进、层层递进初中历史答案、形容层层递进的成语,以便于您获取更多的相关知识。

时间: 2024-10-24 16:55:13

层层递进Struts1(四)之预加载ActionServlet的相关文章

层层递进Struts1(三)之Struts组成

这篇博客我们来说一下Struts的主要组成我们,通过前几篇博客,我们知道这个框架最重要的几个步骤: 获取路径.封装表单.获取转向列表.转向逻辑处理.转向,与此对应的是:ActionServlet.ActionForm. ActionMapping.Action.ActionForward. ActionServlet 这个在上篇博客已经说明,可以访 问< 预加载ActionServlet>. ActionForm ActionForm的主要作用是对表单数据进行封装,这 个.NET开发中的实体类

性能优化总结(四):预加载的设计

本节说一下数据的预加载.这节的内容与SQL没什么关系.主要说的是在 GIX4项目 中,我们是如何设计符合需求的预加载类库的.内 容如下: 1. 什么是预加载,为什么要用它? 2. 我们所需要的API 3. 一个简单的例子 什么是预加载? 预加载其实就是在真正开始使用数据之前,先异步把数据加载好,等到需要使用时,就可以直接使用之前加载好的数据.这时,由于数 据已经加载完成,而不用等待漫长的加载过程,所以程序的速度得到一个明显的提升. 那么,什么时候需要使用它呢?我觉得,主要是这种情况:当我们可以预

性能优化总结(六):预加载、聚合SQL应用实例

   前面已经把原理都讲了一遍,这篇主要是给出一个应用的实例.该实例取自GIX4,比较复杂. 领域模型:     领域模型间的关系,如下: 右边模型链的具体关系在<第二篇>中已经描述过,不再赘述. 本次重点在于红线框住部分: Project:表示一个建设项目: ProjectPBS:一个项目下包含的很多PBS: PBSPropertyValue:一个PBS我们可以为它设置多个值,每一个值对应一个PBSType(模板)中已定义的属性,值的范围也是只能在属性中已定义的可选值中进行选择. 对应的UI

预加载与&amp;#106avascript的Image()对象

对象|加载 很多高分辨率的图像真的能够扮靓一个Web网站.但是它们也可能会降低网站的(响应)速度--图像都是文件,文件就要占用带宽,而带宽与等待时间直接相关.现在是你进行自我学习,了解如何利用一种叫做图像预加载的小技巧给网站提速的时候了. 图像的预加载 浏览器通常的工作方式是:只有当要求加载图像的HTTP请求被发送的时候,图像才会被加载,而不论它是被动地通过<img>标记加载,还是主动地通过方法调用加载.所以,如果你有一段JavaScript,需要在鼠标悬停的时候切换图像,或者在超时之后自动地

JavaScript模仿Pinterest实现图片预加载功能_javascript技巧

前言 对于Pinterest网站,从前端设计出发的话,我们一定不会忘记我们曾经非常流行的瀑布流布局.但是今天,给大家简要分析下 Pinterest上另外一项非常值得借鉴图片加载细节. 看看下面的截图: 大家可以感觉到图片出来的时候预先绘制轮廓,重点是预制区域的颜色采用与图片较为相似的色彩值,当图片加载完全后,会有种渐入的效果. 其中谷歌的图片搜索也用到了类似效果: 我们称之为这种效果为Color Placeholder [色彩预置],当图片加载的时候,我们优先显示其所在容器的背景颜色(如同很多会

你们怎么在web应用里处理预加载的资源?如果用struts2呢?

问题描述 这几日在看struts2的东西,原先是写一个initservlet,把预加载处理写在init方法里,然后在web.xml里设置load startup不知道大家是怎么处理这个东西的?struts2有更便捷优雅的处理方式么?问题补充:看了下servletContextListener,应该是完全可以满足要求了但是又不知道和struts2的拦截器相比哪个好些? 解决方案 比如权限认证,用Filter或者拦截器都可以,因为它们都可以拦截所有指定的请求,但是用ServletContextLis

jQuery简单实现图片预加载

    jQuery实现图片预加载:   我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题呢?下面我来介绍一种在实际应用中经常会使用到的js预加载的方法. JS代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $(function(){ loadImg("fd039245d688d43f14f69eff7f1ed21b0ef43b5b.gif",ad

javascript图片懒加载与预加载的分析

   预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染.  两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载.懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力.  懒加载的意义及实现方式有:    意义: 懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数.    实现方式:       1.第一种是纯粹的延迟加载,使用setTimeOut或setInterval进行加载延迟.     2.第二种是条件加载,符合某些条件,或触发

如何通过预加载器提升网页加载速度

预加载器(Pre-loader)可以说是提高浏览器性能最重要的举措.Mozilla 官方发布数据,通过预加载器技术网页的加载性能提升了19%,Chrome测试了 Alexa 排名前2000名网站,性能有20%的提升. 它并不是一门新技术,有人认为只有 Chrome 才具备这个功能.也有人认为它是有史以来提升浏览器性能最有效的方法.如果你第一次接触预加载器,也许心中已经有了无数个问号.什么是预加载器?它是如何提升浏览器性能的? 首先需要了解浏览器是如何加载网页的 一个网页的加载依赖于脚本文件.CS