就算你在容器里面设置了gzip,也不能对/seam/resource/*进行压缩,需要使用拦截器才能实现压缩,同时也发现在ie5.x下对/seam/resource/*进行压缩,解压后js文件有错,这应该是IE的问题。以下是我所使用的代码:
public class GzipSeamResourceServlet implements Filter {
public static final String gzip="gzip";
public static final String transferEncoding = "transferEncoding";
public void init(FilterConfig filterConfig) {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpSession session = httpRequest.getSession();
if (session.getAttribute(gzip) == null) {
final String gzipStr = getGZIPEncoding((HttpServletRequest) request);
if(gzipStr!=null){
session.setAttribute(transferEncoding,gzipStr );
session.setAttribute(gzip,true );
String s = ((HttpServletRequest)request).getHeader("user-agent") ;
if((s.indexOf("MSIE 5.")+s.indexOf("MSIE 4.")+s.indexOf("MSIE 3."))>0){
session.setAttribute(gzip,false );
YcEJB_INFO.logger.info("浏览器信息为:"+s);
}
}else{
session.setAttribute(gzip,false );
}
}
if ((Boolean)session.getAttribute(gzip) ) {
HttpServletResponse hsr=((HttpServletResponse) response);
hsr.setHeader("Content-Encoding", (String)session.getAttribute(transferEncoding));
GZIPEncodableResponse wrappedResponse = new GZIPEncodableResponse(hsr);
chain.doFilter(request, wrappedResponse);
wrappedResponse.flush();
} else {
chain.doFilter(request, response);
}
}
public void destroy() {
}
private static String getGZIPEncoding(HttpServletRequest request) {
String acceptEncoding = request.getHeader("Accept-Encoding");
if (acceptEncoding == null)
return null;
acceptEncoding = acceptEncoding.toLowerCase();
if (acceptEncoding.indexOf("x-gzip") >= 0) {
return "x-gzip";
}
if (acceptEncoding.indexOf("gzip") >= 0) {
return "gzip";
}
return null;
}
private class GZIPEncodableResponse extends HttpServletResponseWrapper {
private GZIPServletStream wrappedOut;
public GZIPEncodableResponse(HttpServletResponse response) throws IOException {
super(response);
wrappedOut = new GZIPServletStream(response.getOutputStream());
}
public ServletOutputStream getOutputStream() throws IOException {
return wrappedOut;
}
private PrintWriter wrappedWriter;
public PrintWriter getWriter() throws IOException {
if (wrappedWriter == null) {
wrappedWriter = new PrintWriter(new OutputStreamWriter(getOutputStream(), getCharacterEncoding()));
}
return wrappedWriter;
}
public void flush() throws IOException {
if (wrappedWriter != null) {
wrappedWriter.flush();
}
wrappedOut.finish();
}
}
private class GZIPServletStream extends ServletOutputStream {
private GZIPOutputStream outputStream;
public GZIPServletStream(OutputStream source) throws IOException {
outputStream = new GZIPOutputStream(source);
}
public void finish() throws IOException {
outputStream.finish();
}
public void write(byte[] buf) throws IOException {
outputStream.write(buf);
}
public void write(byte[] buf, int off, int len) throws IOException {
outputStream.write(buf, off, len);
}
public void write(int c) throws IOException {
outputStream.write(c);
}
public void flush() throws IOException {
outputStream.flush();
}
public void close() throws IOException {
outputStream.close();
}
}
}
web.ini增加
<filter>
<filter-name>GZIPEncoder</filter-name>
<filter-class>filters.GzipSeamResourceServlet</filter-class>
</filter>
<filter-mapping>
<filter-name>GZIPEncoder</filter-name>
<url-pattern>/seam/resource/*</url-pattern>
</filter-mapping>
分享到:
相关推荐
3. **JBoss Seam** - **下载地址**:[www.seamframework.org/Download](http://www.seamframework.org/Download) - **推荐版本**:2.1.1 GA - **下载文件**:jboss-seam-2.1.1.GA.zip 4. **JBoss Tools** - *...
- **欧洲的隐喻**:Seam 类比于欧洲,由多个参与者组成,包括 EJB、JAAS、JBoss Rules、Ajax、jBPM 等技术,虽然它们可以独立工作,但通过 Seam 可以更好地进行集成。 - **历史**:Seam 的发展历程,从 2002 年 ...
**JBoss Seam** 是一个企业级Java Web应用框架,它简化了基于Java平台的应用程序开发过程。该框架提供了强大的上下文管理功能、会话管理、组件模型以及集成其他技术(如Hibernate和jBPM)的能力。Seam的目标是减少...
- **SEAM**:SEAM 是一个基于 Java EE 的企业级应用框架,它简化了复杂的应用程序开发过程,并且提供了丰富的功能来支持业务逻辑的实现。 - **版本信息**:本文档介绍了 SEAM 2.0 GA 版本的功能特性及其使用方法。 ...
1. **Faces Context增强**: 在Seam 2.0中,对JSF的Faces Context进行了扩展,提供了更多的上下文信息和操作。 2. **CDI支持**: 虽然Seam 2.0发布时,Contexts and Dependency Injection (CDI)规范还未正式发布,但...
### JBoss Seam 2.01GA REF DOC #### 引言:JBoss Seam概览与功能介绍 JBoss Seam 是一个为简化企业级 Java 应用开发而...以上是对 JBoss Seam 2.01GA REF DOC 的详细解读,希望对您理解和掌握 JBoss Seam 有所帮助。
结合JSF2与JBoss Seam** - **互补性**:JSF2提供了丰富的组件库和强大的视图管理功能,而Seam则加强了组件之间的交互和会话管理。两者的结合可以显著提升开发效率和应用质量。 - **最佳实践**:例如,在开发复杂的...
- **组件模型特点**:在Seam框架中,没有明确区分表示层组件和业务逻辑组件。这意味着开发人员可以根据自己的需求和架构设计来构建应用,而不必受限于特定框架所强制实施的分层方案。 #### 二、Seam组件及其上下文 ...
- **生命周期管理**:Seam 对应用程序的生命周期进行了细致的管理和控制,支持多种不同的生命周期模式,如对话式、会话式等。 - **绝对控制反转**:Seam 引入了绝对控制反转(Absolute Inversion of Control, AIOC)...
- **Seam**是JBoss家族中的一员,它是一个建立于Java EE平台之上的开源框架,旨在简化企业级应用的开发过程。 - **版本**: 本手册介绍的是Seam 2.0 GA版本。 ##### Seam的特点 - **上下文相关的组件模型**:这是...
**第一部分:准备使用Seam** - **第1章:Seam统一了Java EE 3**(P1) - 介绍Seam如何整合Java EE 3标准中的技术,如JSF、EJB 3等。 - 讲解Seam如何简化企业级应用开发流程。 - **第2章:将Seam组件投入使用**...
**JBoss Seam** 是一个基于 **Java EE** 的框架,它主要用于简化企业级应用的开发。Seam 通过提供一系列的功能模块和服务,使得开发者能够更加专注于业务逻辑而非底层的技术细节。在了解Seam 项目结构时,主要关注...
30. **FITTING / 试身**:在生产过程中对服装进行试穿,检查合身度和舒适度。 31. **FIVE THREADS OVERLOCK MACHINE / 5线及骨车**:一种能同时缝合和包边的五线缝纫机。 32. **FLAT SEAM / 平缝**:一种简单的...
- **重命名项目和文件夹**:为了保持项目结构的清晰性和可维护性,有时需要对项目名称或文件夹进行重命名。这部分内容提供了实现这一操作的具体步骤。 #### 4. Seam菜单和动作 - **文件菜单动作**:Seam Dev Tools...
- **生命周期管理**:Seam对组件的生命周期进行了细致的管理和控制,包括初始化、渲染、事件处理等多个阶段。 #### 四、Seam框架的关键组成部分 1. **Seam生命周期** - **概念介绍**:Seam生命周期是指Seam组件从...
"为Seam做好准备"这个标题暗示我们即将探讨的是关于Seam框架的入门与准备工作。Seam是一个Java EE集成框架,它将JavaServer Faces(JSF)、Java Persistence API(JPA)、Enterprise JavaBeans(EJB)3.0以及其他...
- **Seam**:一个基于Java EE平台的应用框架,旨在简化企业级应用开发。 - **JBoss Seam**:由JBoss提供的Seam实现,提供了一系列功能强大的工具和服务,帮助开发者快速构建复杂的Web应用。 - **本教程**:主要介绍...
**JBoss Seam** 是一款强大的开源框架,它在**Java EE** 的基础上提供了更为简单且功能强大的开发方式,旨在简化企业级应用的开发过程。Seam 的核心优势在于其对状态管理、会话管理、集成数据模型与表现层以及业务...