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

使您的jsp 应用具有数据压缩功能

    博客分类:
  • java
阅读更多
使用过滤器使您的 JSP 具有 HTTP 压缩功能

2005年10月16日星期日 by BeanSoft

HTTP 压缩是指浏览器能够理解压缩过的 HTML 代码, 文本文档等, 从而减少网络传输流量的一种功能. 在目前的大部分主流浏览器上, 都支持这种功能, 例如 Ineternet Explorer, FireFox, Netscape, Opera 等, 对应的 HTTP 版本应该是 HTTP 1.1.

要探测浏览器是否支持 HTTP 压缩, 只要查看浏览器请求的头中是否有如下字样:
Accept-Encoding: gzip, deflate
即 可, 这个即是说明浏览器支持 gzip 和 deflate(一种压缩格式)的压缩内容. 这就意味着: 可以向浏览器返回默认的未压缩的文本, 也可以用 GZIP 和 deflate 压缩过后传送给它, 浏览器会自己探测这些内容并解压缩, 这就以为着传输某些资料的时候(例如文本的 HTML 代码)可以大大减少网络需要传送的内容数.

那么, 如何实现这个功能呢? 其实 Apache Tomcat 5 安装时候所自带的示例目录下都做好了一个过滤器用来实现这个功能了:
{Tomcat5.0安装目录}\webapps\jsp-examples\WEB-INF\classes\compressionFilters
下就是这个过滤器的源码和类文件, 使用时候只要将这些文件放入类路径中, 然后向 web.xml 中加入过滤器配置语句就可以了:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


<!-- Output the content with gzip compression if possible -->
    <filter>
        <filter-name>Compression Filter</filter-name>
        <filter-class>compressionFilters.CompressionFilter</filter-class>

        <init-param>
          <param-name>compressionThreshold</param-name>
          <param-value>512</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
    </filter>


    <filter-mapping>
      <filter-name>Compression Filter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>


    </web-app>

不过有一个问题需要指出一下: 因为这个过滤器读取了 header 的内容, 因此会导致后继页面设置 request 的字符编码的时候失效, 因为根据 serlvet 源码中的注释这样说到:


/**
     * Overrides the name of the character encoding used in the body of this
     * request. This method must be called prior to reading request parameters
     * or reading input using getReader().
     *
     *
     * @param  a <code>String</code> containing the name of
     *   the chararacter encoding.
     * @throws  java.io.UnsupportedEncodingException if this is not a valid encoding
     */

    public void setCharacterEncoding(String env) throws java.io.UnsupportedEncodingException;

这 样一来, 如果您的中文解决方案依赖了这个做法, 必须考虑另外加入过滤器在这个过滤器被调用之前设置合适的字符编码, 同样的, 您可以考虑这个例子下的 filters.SetCharacterEncodingFilter 过滤器来完成这个工作, 我个人的做法是所有的页面表单参数统一都用 UTF-8 来传送, 这也是 W3C 建议的国际化网页的标准做法.

那么, 最后的效果很明显的可以看到. 你做一个简单的 JSP 页面, 向里面放入很多字符串, 那么你可以用浏览器的右键功能看到这个页面的大小会远远小于查看源代码所得到的文字的总大小, 原因就是这个页面被压缩传输了.

不过, 也有一个弊端, 就是压缩传输会增大服务器的负荷, 而且理论上应该只压缩那些必要的文本内容, 而已经压缩过的图片, 视频等资源就没有必要再次进行压缩了, 那样只会造成不必要的 CPU 浪费.

需要注意的是 HTTP 压缩看上去只有 HTTP 1.1 才支持, 您需要在 Internet Explorer 中启用这个功能. 方法如下:
在 Internete 选项中选择高级选项卡, 然后在第一行中选择启用 HTTP 1.1, 然后重启 IE 即可.如果 IE 用的是 HTTP 1.0, 则没有这个功能.

最后列出使用了完整过滤器解决方案的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <!-- Example filter to set character encoding on each request -->
    <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>

<!-- Output the content with gzip compression if possible -->
    <filter>
        <filter-name>Compression Filter</filter-name>
        <filter-class>compressionFilters.CompressionFilter</filter-class>

        <init-param>
          <param-name>compressionThreshold</param-name>
          <param-value>512</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
    </filter>

<!-- Must before the Compressioin Filter -->
    <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
      <filter-name>Compression Filter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>


    </web-app>

参考文章:
如何使用HTTP压缩优化服务器 http://www.cnblogs.com/shanyou/archive/2005/08/23/221259.aspx
不过我自己实现的字符压缩过滤器有问题:
MonitorFilter::WARNING: the monitor filter must be the first filter in the chain.
总是报的这个错误
但是页面还能输出
web.xml如下:

    <!-- 对字符进行压缩处理,使得页面加载时间尽可能短-->
    <filter>
<filter-name>CompressionFilter</filter-name>
<filter-class>com.fyz.filter.CompressionFilter</filter-class>
    </filter>
    <filter-mapping>
<filter-name>CompressionFilter</filter-name>
<url-pattern>/common/*</url-pattern>
    </filter-mapping>
   
    <!-- 字符编码过滤器 -->
    <filter>
        <filter-name>CharsetEncodingFilter</filter-name>
        <filter-class>com.fyz.filter.CharsetAllEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GBK</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharsetEncodingFilter</filter-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
        <dispatcher>ANSYC</dispatcher>
        <!-- 异步处理请求-->
        <!--对全站点进行编码转换 -->
        <url-pattern>/*</url-pattern>
  </filter-mapping>
就是照着上面的写的
其中/common/*是我的资源文件,比如图片什么的
如果换成整个应用的根目录的话就会什么也没有了,没有输出内容
还望路过的大神们能科普科普
分享到:
评论

相关推荐

    jsp应用的小型服务器程序

    【标题】:“jsp应用的小型服务器程序” 【描述】:“小型的jsp服务器应用程序 对于初学者比较实用” 这个描述指的是一个特别设计用于教学或初学者实践的轻量级JSP(JavaServer Pages)服务器程序。JSP是Java平台...

    JSP应用开发详解第三版 完整源代码(附数据文件)高强度压缩版本,两个分卷压缩包加起来不到14M part2

    JSP应用开发详解第三版 完整源代码(附数据文件)高强度压缩版本,两个分卷压缩包加起来不到14M 请用7zip打开

    Tomcat下,使用gzip压缩数据

    在IT行业中,优化Web服务性能是一项重要的任务,其中一种常用的方法是通过开启服务器的数据压缩功能,比如在Tomcat中使用gzip来压缩数据。gzip是一种广泛使用的数据压缩算法,尤其适用于HTTP传输,它能够显著减少...

    JSP应用开发详解第三版 完整源代码(附数据文件)高强度压缩版本,两个分卷压缩包加起来不到14M

    JSP应用开发详解第三版 完整源代码(附数据文件)高强度压缩版本,两个分卷压缩包加起来不到14M 请用7zip打开

    实现图片上传且具有压缩功能

    在JSP(JavaServer Pages)环境中,结合Struts框架,我们可以实现用户端上传图片并进行压缩的功能。以下是对这个主题的详细阐述: 一、图片上传原理 图片上传的核心在于前端与后端的交互。前端通过HTML表单提供一个...

    jsp应用开发详解源码16-17章,学习jsp的可以看看

    【标题】"jsp应用开发详解源码16-17章"主要涵盖了JSP(Java Server Pages)技术在实际应用中的深度开发,结合了第16章和第17章的源码实例,旨在帮助学习者更好地理解和掌握JSP编程。JSP是Java平台上的动态网页技术,...

    jspSmartUpload组件zip压缩版

    `jspSmartUpload`组件是开发Java Web应用时实现文件上传功能的理想选择。它简化了文件上传的复杂性,提供了丰富的功能,同时也考虑到了安全性。结合其易于理解和使用的API,开发者可以快速集成文件上传功能,提升...

    bookshop课程设计 jsp网上书店 非常具有参考价值 能够实现基本功能 极力推荐

    【标题】"bookshop课程设计 jsp网上书店 非常具有参考价值 能够实现基本功能 极力推荐" 这个项目是一个基于JSP技术的网上书店系统,它为学生和教师提供了一个全面的课程设计实例,对于学习和理解Web应用开发具有极...

    jsp中json的应用

    7. **最佳实践**:为了优化JSON在JSP中的应用,建议遵循一些最佳实践,如尽可能减少JSON数据的大小,使用GZIP压缩减少网络传输,以及在处理JSON时进行适当的错误检查和异常处理。 以上是关于"jsp中json的应用"这一...

    jsp.rar_jsp 管理员功能

    【描述】"用Jsp编写的能对数据库进行增删改查的管理系统"说明了系统的核心功能是基于JSP技术构建的,主要任务是对数据库中的数据进行操作。在Web应用中,JSP通常作为视图层来处理动态生成的HTML内容,它结合了Java...

    jsp做的简单功能的留言板

    它通过ODBC(Open Database Connectivity)与应用程序进行连接,使得JSP可以通过SQL语句来读取、插入和更新数据库中的数据。这里的“比较简单的”描述可能意味着系统的功能较为基础,可能没有包括复杂的身份验证、...

    jspshell 一些JSP的工具

    它们可以帮助开发者更好地理解和操作JSP,提高开发效率,同时提供了一种可能的“jspshell”工具,使开发者能够在命令行环境中方便地管理和调试JSP应用。而“job.jsp”文件则提供了实际应用的参考,有助于学习和实践...

    多功能计算器(java,jsf,jsp)

    综合以上信息,这个项目是一个使用Java后端和JSF、JSP前端技术实现的Web应用,提供了一个功能丰富的在线计算器。通过需求分析报告,开发者能够了解项目的整体架构和设计思路,而HILIS可能是项目中的关键部分,具体...

    jsp银行管理系统,jsp银行管理系统sql server如何实现转账功能,Java

    【标题】中的“jsp银行管理系统”是指基于Java Server Pages(JSP)技术开发的银行管理应用,用于模拟或实现实际银行的各项业务操作。这个系统利用JSP作为前端展示,能够处理用户请求,显示银行信息,并执行相关的...

    jspSmartUpload应用.doc

    **JSPSmartUpload组件详解** **一、JSPSmartUpload组件概述** ...通过理解和熟练运用JSPSmartUpload组件,开发者可以轻松地在JSP应用中实现强大的文件上传和下载功能,提高用户体验并增强应用的实用性。

    jsp网上商城jsp课程设计

    3. **CSS 和 JavaScript** 文件:这些文件负责页面的样式和交互功能,使用户界面更加美观和响应。 4. **图片和其他静态资源**:如logo、产品图片等,这些文件通常放在一个公共的目录下供页面引用。 5. **Java 类**...

    jsp html .net 摄像头 截图 上传 功能实现,myeclipse源码

    在IT行业中,开发一个能够利用摄像头截图并上传的功能是一个常见的需求,尤其在Web应用中。本文将详细探讨如何使用JSP、HTML、.NET技术在MyEclipse环境中实现这一功能。 首先,我们要理解JSP(JavaServer Pages)是...

    jsp新闻发布系统功能完整.zip

    【标题】:“jsp新闻发布系统功能完整.zip”是一个包含完整的JSP(Java Server Pages)新闻发布的系统,用于构建基于Web的动态信息发布平台。JSP技术是Java EE(企业版)的一部分,它允许开发者创建动态网页,将业务...

    SummerHotel_Android +JSp酒店预订应用源码.rar

    【标题】"SummerHotel_Android +JSp酒店预订应用源码"是一个综合性的项目,它展示了如何使用Android技术和JavaServer Pages(JSP)来构建一个完整的酒店预订系统。这个源码包提供了从移动设备(Android端)到服务器...

    提升JSP应用程序七大绝招

    在开发JSP应用时,经常需要处理复杂的业务逻辑和数据操作,这些任务通常由servlet完成。为了提高效率和减少系统资源消耗,我们可以通过初始化servlet来预加载一些静态资源或设置一些只需要执行一次的操作。例如,...

Global site tag (gtag.js) - Google Analytics