- 浏览: 214562 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
teacodeing:
111
理解Java常量池 -
teacodeing:
122334455
理解Java常量池 -
最佳蜗牛:
有理有据,期待更多这样的文章。
理解Java常量池 -
ruijin5566:
cry615 写道zean 写道“在方法区中,而方法区是在JV ...
理解Java常量池 -
cry615:
zean 写道“在方法区中,而方法区是在JVM内存模型中的堆中 ...
理解Java常量池
AppFuse中经过分析使用了大量的开源框架和组件。个人认为整个后台还不是强大,可能与它的定位有关联。我们在项目中积累了大量的Spring以及Hibernate应用都要比之要强很多。但appFuse的前台整合还是相当不错的。先学一个gzipFilter
gzipFilter其实就位于eHcache里面,他是将response中的东东都压缩一下,这个可大大减少了传输时间。
配置web.xml
- <filter>
- <filter-name>gzipFilter</filter-name>
- <filter-class>
- net.sf.ehcache.constructs.web.filter.GzipFilter
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>gzipFilter</filter-name>
- <url-pattern>*.css</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>gzipFilter</filter-name>
- <url-pattern>*.png</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>gzipFilter</filter-name>
- <url-pattern>*.gif</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>gzipFilter</filter-name>
- <url-pattern>*.html</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>gzipFilter</filter-name>
- <url-pattern>*.jsp</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>gzipFilter</filter-name>
- <url-pattern>*.js</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>gzipFilter</filter-name>
- <url-pattern>*.json</url-pattern>
- </filter-mapping>
<filter> <filter-name>gzipFilter</filter-name> <filter-class> net.sf.ehcache.constructs.web.filter.GzipFilter </filter-class> </filter> <filter-mapping> <filter-name>gzipFilter</filter-name> <url-pattern>*.css</url-pattern> </filter-mapping> <filter-mapping> <filter-name>gzipFilter</filter-name> <url-pattern>*.png</url-pattern> </filter-mapping> <filter-mapping> <filter-name>gzipFilter</filter-name> <url-pattern>*.gif</url-pattern> </filter-mapping> <filter-mapping> <filter-name>gzipFilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping> <filter-mapping> <filter-name>gzipFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>gzipFilter</filter-name> <url-pattern>*.js</url-pattern> </filter-mapping> <filter-mapping> <filter-name>gzipFilter</filter-name> <url-pattern>*.json</url-pattern> </filter-mapping>
效果,你可以用FoxFire的net看各个css,js文件可是压缩50%以上哦。
写了一个jsp文件专门评估
- <%@ page language="java" import="java.util.*,java.net.*,java.io.*"
- pageEncoding="ISO-8859-1"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme() + "://"
- + request.getServerName() + ":" + request.getServerPort()
- + path + "/";
- %>
- <%
- String url = request.getParameter("url");
- if (url != null) {
- URL noCompress = new URL(url);
- HttpURLConnection huc = (HttpURLConnection) noCompress
- .openConnection();
- huc.setRequestProperty("user-agent", "Mozilla(MSIE)");
- huc.connect();
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- InputStream is = huc.getInputStream();
- while (is.read() != -1) {
- baos.write((byte) is.read());
- }
- byte[] b1 = baos.toByteArray();
- URL compress = new URL(url);
- HttpURLConnection hucCompress = (HttpURLConnection) noCompress
- .openConnection();
- hucCompress.setRequestProperty("accept-encoding", "gzip");
- hucCompress.setRequestProperty("user-agent", "Mozilla(MSIE)");
- hucCompress.connect();
- ByteArrayOutputStream baosCompress = new ByteArrayOutputStream();
- InputStream isCompress = hucCompress.getInputStream();
- while (isCompress.read() != -1) {
- baosCompress.write((byte) isCompress.read());
- }
- byte[] b2 = baosCompress.toByteArray();
- request.setAttribute("t1", new Integer(b1.length));
- request.setAttribute("t2", new Integer(b2.length));
- request.setAttribute("t3", (1 - new Double(b2.length)
- / new Double(b1.length)) * 100);
- }
- request.setAttribute("url", url);
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'MyJsp.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- This is my JSP page.
- <br>
- <h1>
- Compression Test
- </h1>
- Enter a URL to test.
- <form method="POST">
- <input name="url" size="50">
- <input type="submit" value="Check URL">
- </form>
- <p>
- <%=url%>
- <b>Testing: ${url}</b>
- </p>
- Request 1: ${t1} bytes
- <%=request.getAttribute("t1")%>
- <br />
- Request 2: ${t2} bytes
- <%=request.getAttribute("t2")%>
- <br />
- Space saved: ${t1-t2} bytes or ${(1-t2/t1)*100}%
- <%=request.getAttribute("t3")%>%
- <br />
- </body>
- </html>
gzipFilter其实就位于eHcache里面,他是将response中的东东都压缩一下,这个可大大减少了传输时间。
配置web.xml
<filter>
<filter-name>gzipFilter</filter-name>
<filter-class>
net.sf.ehcache.constructs.web.filter.GzipFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>gzipFilter</filter-name>
<url-pattern>*.css</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>gzipFilter</filter-name>
<url-pattern>*.png</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>gzipFilter</filter-name>
<url-pattern>*.gif</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>gzipFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>gzipFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>gzipFilter</filter-name>
<url-pattern>*.js</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>gzipFilter</filter-name>
<url-pattern>*.json</url-pattern>
</filter-mapping>
效果,你可以用FoxFire的net看各个css,js文件可是压缩50%以上哦。
写了一个jsp文件专门评估
<%@ page language="java" import="java.util.*,java.net.*,java.io.*"
pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%
String url = request.getParameter("url");
if (url != null) {
URL noCompress = new URL(url);
HttpURLConnection huc = (HttpURLConnection) noCompress
.openConnection();
huc.setRequestProperty("user-agent", "Mozilla(MSIE)");
huc.connect();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = huc.getInputStream();
while (is.read() != -1) {
baos.write((byte) is.read());
}
byte[] b1 = baos.toByteArray();
URL compress = new URL(url);
HttpURLConnection hucCompress = (HttpURLConnection) noCompress
.openConnection();
hucCompress.setRequestProperty("accept-encoding", "gzip");
hucCompress.setRequestProperty("user-agent", "Mozilla(MSIE)");
hucCompress.connect();
ByteArrayOutputStream baosCompress = new ByteArrayOutputStream();
InputStream isCompress = hucCompress.getInputStream();
while (isCompress.read() != -1) {
baosCompress.write((byte) isCompress.read());
}
byte[] b2 = baosCompress.toByteArray();
request.setAttribute("t1", new Integer(b1.length));
request.setAttribute("t2", new Integer(b2.length));
request.setAttribute("t3", (1 - new Double(b2.length)
/ new Double(b1.length)) * 100);
}
request.setAttribute("url", url);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'MyJsp.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page.
<br>
<h1>
Compression Test
</h1>
Enter a URL to test.
<form method="POST">
<input name="url" size="50">
<input type="submit" value="Check URL">
</form>
<p>
<%=url%>
<b>Testing: ${url}</b>
</p>
Request 1: ${t1} bytes
<%=request.getAttribute("t1")%>
<br />
Request 2: ${t2} bytes
<%=request.getAttribute("t2")%>
<br />
Space saved: ${t1-t2} bytes or ${(1-t2/t1)*100}%
<%=request.getAttribute("t3")%>%
<br />
</body>
</html>
应用服务器应该都支持压缩吧,weblogic和tomcat都可以,在app中实现有什么好处呢?不会增加复杂性和出错的概率吗?
发表评论
-
appfuse 快速创建应用
2009-09-04 10:50 10281 安装 jdk 5+ maven 2.09 mysql 5. ... -
appfuse论坛
2009-09-04 10:49 1067http://www.nabble.com/AppFuse-f ... -
使用 AppFuse 的七个理由
2009-09-04 10:48 952使用 AppFuse 的七个理由 学习 Java 开放 ... -
通过Appfuse2来快速建立开发框架(2) - 建立本地开发环境
2009-09-04 10:45 910通过Appfuse2来快速建立开发框架(2) --建立本地开发 ... -
Appfuse2再论
2009-09-04 10:40 809Appfuse是 Matt Raible负责开发维护的一个集成 ... -
深入浅出学习appfuse2.0.2最新版--适合入门
2009-09-04 10:38 20001 主题:深入浅出学习appf ... -
使用AppFuse进行开发的总结
2009-09-04 10:37 932AppFuse是一个集成了当前最流行的Web应用框架的一个更高 ... -
我的APPFUSE2.0.x开发过程的问题记录和解决办法
2009-09-04 10:36 15571。怎样使每次测试时不删除数据库中表结构? 解答:将pom.x ... -
appfuse2項目的详细開發流程
2009-09-04 10:35 1213學習了Appfuse2一些時間,把自己使用appfuse2開發 ... -
maven 配置篇 之pom.xml
2009-09-04 10:34 842什么是pom? pom作为 ... -
maven2起步
2009-09-04 10:33 846最近開始使用appfuse2開發項目,而appfuse2不再使 ... -
maven 配置篇 之 settings.xml
2009-09-04 10:32 931maven2 比起maven1 来说,需要配置的文件少多了,主 ... -
AppFuse 2.0初体验
2009-09-04 10:29 1044AppFuse2的网站已经变成 ...
相关推荐
`mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-struts-archetype -DarchetypeVersion=2.1.0-M2 -DgroupId=cn.xue.app -DartifactId=xueAppFuse` ...
### Appfuse 学习笔记 #### 一、Appfuse 简介 Appfuse 是一个开源框架,旨在帮助开发者高效地构建企业级应用。通过提供一套完善的架构模板、最佳实践和技术栈组合,使得开发者能够专注于业务逻辑的实现,而不是...
在"appfuse-light-webwork-spring-jdbc-1.8.2.zip"这个压缩包中,我们能看到一个基于Java 8、WebWork、Spring和JDBC的项目实例。 **Java 8** Java 8是Java平台的重大更新,引入了许多新特性,如lambda表达式、函数...
这个"appfuse-tutorial-struts-1.6.zip"文件是一个基于Struts 1.6的AppFuse教程,用于指导开发者如何构建一个企业级的人员管理系统。Struts是Apache软件基金会下的一个开源框架,专门用于构建基于MVC(Model-View-...
替换 `<选择的模板>` 为下载的模板名称,如 `appfuse-basic`,`appfuse-minimal` 等,`<对应版本>` 是你下载的 AppFuse 版本号。 **4. 编译与运行** 进入新创建的项目目录,使用 Maven 编译并运行项目: ``` cd my...
### AppFuse2 学习知识点总结 #### 一、AppFuse 概述 - **定义与价值**:AppFuse 是一款开源项目,旨在利用一系列开源工具帮助开发者高效地搭建 Web 应用程序的基础架构。通过使用 AppFuse,开发人员可以在构建新...
【AppFuse 框架详解】 AppFuse 是一个由 Matt Raible 创建的开源项目,它为初学者提供了... mvn archetype:create -DarchetypeGroupId=org.appfuse -DarchetypeArtifactId=appfuse-basic-spring -DremoteRepositories=...
综上所述,AppFuse 不仅是一个强大的开发框架,还是一个全面的学习资源库,可以帮助开发者快速掌握现代 Web 开发所需的各种技能。无论你是初学者还是有经验的开发者,都能从这份文档中获益良多。
在本篇“appfuse学习笔记(二)新建模块”中,我们将深入探讨AppFuse框架的模块创建过程。AppFuse是一个开源项目,它提供了一个快速开发Web应用的基础结构,旨在简化开发流程并提高代码质量。通过AppFuse,开发者...
AppFuse Service 3.0.0 是一个开源项目,它提供了一个基础框架,用于快速开发企业级Java应用。这个版本的亮点在于其集成了一系列现代开发工具和最佳实践,旨在提高开发效率和代码质量。AppFuse 的核心理念是简化复杂...
如果网络速度较慢,可以选择手动下载并解压`appfuse-2.0-rc1-dependencies.zip`到该目录。 #### 六、不同配置类型的Maven命令示例 除了Struts 2 Basic之外,Appfuse 2.0还支持其他几种配置类型,每种配置类型的...
在本篇“appfuse学习笔记(三)解决乱码和菜单设置”中,我们将深入探讨在使用AppFuse框架时遇到的编码问题以及如何定制应用程序的菜单。AppFuse是一款开源项目,它提供了一个快速开发Web应用的基础,特别是对于Java...
2. **项目初始化**:运行AppFuse的生成器,选择合适的项目类型(如基本的MVC应用),指定数据库和编程语言(如Java或Groovy)。 3. **代码生成**:AppFuse会自动生成基本的项目结构,包括模型、控制器、视图和...
mvn archetype:generate -DarchetypeGroupId=org.appfuse -DarchetypeArtifactId=appfuse-basic -DarchetypeVersion=2.x -DgroupId=com.mycompany -DartifactId=myproject -Ddb=oracle ``` 这将根据你的配置生成一个...
- 书中提供了大量的示例代码和实用指南,旨在帮助读者深入了解AppFuse的工作原理并学习如何使用它来构建高质量的Web应用程序。 #### 三、AppFuse Primer的主要内容概述 - **基础知识**: 在开始使用AppFuse之前,...
本教程的所有代码都位于Google Code上的`appfuse-demos`项目中的`tutorial-struts2`模块。你可以使用以下的Subversion命令来检出该项目: ``` svn checkout ...