`
greatghoul
  • 浏览: 147170 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

修复Sturts2发布包中的教程文档 | #struts2 #hta #regex

阅读更多

在Struts2的发行包中,有一份帮助文档,位于“struts-2.1.8.1.zip\struts-2.1.8.1\docs\docs”

 

该文档包含如下一些不错的资源:

 

  • Tutorials   Our tutorials are designed to help you get started with the framework ASAP. We offer an all-purpose "Bootstrap" tutorial as well as specialty tutorials on portlets and database access. 
  • Guides   Our in-depth technical guides focus on specific components of the framework, such as the Core framework, Struts Tags, and optional Extensions, as well as migrating from Struts 1 or WebWork 2. 
  • FAQs and Cookbook   Our FAQs and Cookbook examples provide a wide range of rapid-fire "HOWTOs" in question-and-answer format. 
  • Security Bulletins   Our security bulletins explain any security issues and their solutions 
  • Other Resources   Books, articles, and presentations about Struts 2. 

这些资源对于初学者来说,是很好的学习资料,不过这些HTML文件中包含一以http://开头的外部样式表文件,每次在打开这些HTML文档时,页面都要很久时间才能显示。

 

    <LINK type="text/css" rel="stylesheet" href="http://cwiki.apache.org/confluence/download/resources/confluence.ext.code:code/shStyles.css">

 

只要去掉这句,页面就可以很快打开,不过逐个去除不太现实,作为程序员,自然要使用聪明的办法,其实网上有许多批量查找替换文件内容的软件,不过本着研究的精神,咱还是自己搞吧。


这里依然选择用HTA+JS开发,不过无论用什么语言,思路都是一样的。

 

最核心的东西当然是匹配要去掉的样式的正则表达式了:

 

var pattern = /(<LINK.+href="http:\/\/.*)|(<SCRIPT[\s\S]*<\/SCRIPT>)|((<BODY\s+)onload="init\(\)">)/igm;

 

这里我顺便把脚本和<body>标签也去掉了,因为这些脚本会导致在使用IE查看时,有安全提示,很讨厌。

 

然后就是指定一个目录,然后递归遍历之:

 

function travel(path) {
    log('high', 'scanning folder "' + path + '"');
    var dir = fso.GetFolder(path);
    var folders = new Enumerator(dir.SubFolders);
    var files = new Enumerator(dir.Files);
    // travel files
    for (; !files.atEnd(); files.moveNext()) {
        var doc = files.item();
        log('info', 'analyzing file "' + doc + '"');
        if (isHTMLDocument(doc)) {
            fixTutorial(doc);
        }
    }    // travel folders
    for (; !folders.atEnd(); folders.moveNext()) {
        travel(folders.item());
    }
}

 

其次就是具体的替换操作了,先读取文件内容,替换后再重新写进去:

 

function fixTutorial(filename) {
    try {
        log('info', 'fixing file: ' + filename);
        var file = fso.OpenTextFile(filename, 1);
        var html = file.ReadAll().replace(pattern, '');
        file.Close();
        file = fso.OpenTextFile(filename, 2);
        file.Write(html);
        file.Close();
        log('high', 'completed.');
    } catch (e) {
        log('warn', 'failed fixing file "' + filename + '", ' + e.description);
    }
}
 

完整代码:

 

<html>
<head>
<title>Struts2 Tutorial Fix</title>
<style type="text/css">
#console { height: 400px; overflow: auto; }
.log  { word-break: break-all;word-wrap: break-word; }
.warn { color: red; border-top: 1px solid #DDD; }
.info { color: gray; border-top: 1px solid #DDD; }
.high { color: green; border-top: 1px solid #DDD; }
</style>
<script type="text/javascript">
var fso = new ActiveXObject('Scripting.FileSystemObject');
var pattern = /(<LINK.+href="http:\/\/.*)|(<SCRIPT[\s\S]*<\/SCRIPT>)|((<BODY\s+)onload="init\(\)">)/igm;
var path;
var console;

// get element by id
function get(id) {
    return document.getElementById(id);
}

// If the file is a html document
function isHTMLDocument(filename) {
        return /(\.html$)|(\.htm$)/i.test(filename);
}

// formate datetime
function formateDate(datetime) {
    var hour  = datetime.getHours();
    var min   = datetime.getMinutes();
    var sec   = datetime.getSeconds();
    hour  = (hour  < 10 ? '0' : '') + hour;
    min   = (min   < 10 ? '0' : '') + min;
    sec   = (sec   < 10 ? '0' : '') + sec;
    return hour + ':' + min + ':' + sec;
}
// log
function log(level, msg) {
    var line = document.createElement('<div class="' + level + ' log"></div>');
    line.innerHTML = '[' + formateDate(new Date()) + '] ' + msg;
    console.appendChild(line);
    console.doScroll();
    line = null;
}

function fixTutorial(filename) {
    try {
        log('info', 'fixing file: ' + filename);
        var file = fso.OpenTextFile(filename, 1);
        var html = file.ReadAll().replace(pattern, '');
        file.Close();
        file = fso.OpenTextFile(filename, 2);
        file.Write(html);
        file.Close();
        log('high', 'completed.');
    } catch (e) {
        log('warn', 'failed fixing file "' + filename + '", ' + e.description);
    }
}

function travel(path) {
    log('high', 'scanning folder "' + path + '"');
    var dir = fso.GetFolder(path);
    var folders = new Enumerator(dir.SubFolders);
    var files = new Enumerator(dir.Files);
    // travel files
    for (; !files.atEnd(); files.moveNext()) {
        var doc = files.item();
        log('info', 'analyzing file "' + doc + '"');
        if (isHTMLDocument(doc)) {
            fixTutorial(doc);
        }
    }    // travel folders
    for (; !folders.atEnd(); folders.moveNext()) {
        travel(folders.item());
    }
}

function fixTutorials() {
    path = get('path').value;
    setTimeout(function() {
        travel(path);
        log('high', 'all works are done.');
    }, 0);
}

// initialization
function init() {
    console = get('console');
}

// show errors.
function showError(msg, url, line) {
    log('warn', 'Error: ' + msg + ' (line:' + line + ')');
    return true;
}

window.onerror = showError;
window.onload = init;
</script>
</head>
<body>
Path: <input type="text" id="path" size="74"/><button onclick="fixTutorials()">Fix Tutorials</button>
<fieldset>
    <legend>Console</legend>
    <div id="console"></div>
</fieldset>
</body>
</html>

 

附上已经修复好的文档:

struts2-tutorials.part1.rar

struts2-tutorials.part2.rar

  • 大小: 122 KB
分享到:
评论

相关推荐

    sturts2中文文档

    根据提供的文件信息,我们可以从中提炼出与Struts2相关的知识点,包括但不限于Struts2的基本概念、架构、配置以及使用场景等。下面是详细的知识点总结: ### Struts2框架概述 Struts2是一个开源的Web应用框架,它...

    Struts1、Sturts2 PDF教程

    "Java Struts教程.pdf"和"Struts2教程.pdf"这两份文档很可能是详尽的教程资源,涵盖了从基础概念到高级特性的各个方面。对于初学者,这些教程可能从安装环境、创建第一个Struts项目开始,逐步讲解Action、配置文件、...

    struts2 最新漏洞 S2-016、S2-017修补方案 .docx

    Struts2 最新漏洞 S2-016、S2-017 修补方案 Struts2 是一个基于 Java 的 Web 应用程序框架,由 Apache 软件基金会维护。最近,Struts2 发生了两个严重的漏洞,分别是 S2-016 和 S2-017,这两个漏洞可能会导致攻击者...

    sturts2的入门文档

    ### Struts2简介与基础知识 #### 一、Struts2框架概述 Struts2是一个用于构建企业级Java Web应用程序的强大框架。它继承了Struts1的一些特性,并在此基础上进行了大量的改进和完善,使得开发者能够更加高效地开发...

    STRUTS2:零配置插件CodeBehind

    ### STRUTS2:零配置插件CodeBehind详解 #### 一、概述 Struts2框架作为Java Web开发中的一款重要工具,在简化Web应用程序开发方面提供了丰富的功能与灵活性。随着框架的发展,Struts2社区不断推出新的插件和技术...

    sturts2经典教程

    这个经典教程旨在帮助开发者深入理解Struts2框架的核心概念、特性以及实际操作,特别是关注Struts2的标签库和文件上传功能。 首先,让我们从基础开始。Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,...

    spring sturts2 sturts1 hibernate4文档

    Spring、Struts2、Struts1 和 Hibernate4 是Java Web开发中的四大框架,它们各自扮演着不同的角色,共同构建了企业级应用的基础架构。这里提到的文档集合是关于这四个框架的最新版本API,旨在帮助开发者更好地理解和...

    Struts 1 &sturts

    ### Struts 1与Struts 2框架对比分析 #### Struts 1框架特性与问题 **特性:** - **Action类设计模式:**在Struts 1中,所有的业务逻辑处理都通过Action类实现。这些Action类必须继承自一个抽象基类(如`org....

    struts2所有jar包程序文件

    Struts2是一个非常著名的Java Web开发框架,由Apache软件基金会维护。它基于MVC(Model-View-Controller)设计模式,极大地简化了构建基于Java EE的Web应用程序的过程。本资源包含"struts2所有jar包程序文件",是...

    struts2图片上传并预览

    Struts2是一个强大的Java web应用程序框架,用于构建和部署可维护、高性能的MVC(Model-View-Controller)架构的应用程序。在Web开发中,图片上传和预览是常见的功能需求,尤其对于用户交互丰富的应用来说。Struts2...

    sturts2入门例子

    Struts2是一个强大的Java web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用程序。这个入门例子旨在帮助初学者快速掌握如何配置和使用Struts2进行开发。以下是一些核心知识点: 1. **Struts2框架...

    struts2学习笔记(完美总结)——转自OPEN经验库

    Struts2是一个强大的Java web应用程序开发框架,它遵循Model-View-Controller (MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用。本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与...

    sturts2中文教程~

    本教程将帮助初学者从零开始了解并掌握Struts2,快速上手进行实际开发。 **一、Struts2的核心概念** 1. **Action类**:Struts2的核心组件,用于处理用户请求,执行业务逻辑。每个Action类对应一个URL,当用户通过...

    ACCP7使用Struts2开发租房系统之一(第2部分)

    此资源是使用Struts2开发租房系统1-5章课件的第二部分,需要与其他两部分一起下载后才能解压。

    基于struts2的简单购书管理系统

    Struts2是一个强大的Java Web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。这个"基于Struts2的简单购书管理系统"是一个典型的案例,它可以帮助初学者理解如何在实际项目中运用Struts2框架。下面将详细...

    基于struts2+hibernate4的学生管理系统

    **基于Struts2+Hibernate4的学生管理系统** 在Java Web开发领域,Struts2和Hibernate4是两个非常重要的框架。Struts2是一个强大的MVC(Model-View-Controller)框架,而Hibernate4则是一个对象关系映射(ORM)工具...

    sturts2、springmvc知识点

    ### Struts2与SpringMVC知识点详解 #### Struts2简介 Struts2是一个用于构建企业级Java Web应用的强大框架,它遵循MVC(Model-View-Controller)设计模式,旨在简化Web应用的开发和维护过程。Struts2的核心优势在于...

    struts2所必需的5个包

    Struts2是一个强大的Java web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用。这个框架在企业级开发中广泛使用,因为它提供了丰富的功能、灵活性和可扩展性。标题提到的“struts2所必需的5个包”是...

Global site tag (gtag.js) - Google Analytics