- 浏览: 217732 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
liminshaoye:
为什么我的一次成功之后就不能发送第二次了呢?
Java 使用SMSLib通过串口通讯收发短信 -
sziitjiang:
面试的题目,慢慢研究,还是能学到很多东西
JAVA 面试题 -
sziitjiang:
老大,我百度了一下SMG引擎,把你的博客给百度出来了!
SMG引擎 1.3.0 功能说明 -
jinkunaier:
,受教了!
深入探索SOAP1.1--使用SAAJ1.2.1 -
genggeng:
THX,对我入门很有帮助......
Java 使用SMSLib通过串口通讯收发短信
2009-05-18
使用gzip优化web应用(filter实现)
以前使用过filter,也就是屏蔽一下受限制的资源访问路径,解决下中文乱码问题,其实filter在优化web应用发面也有出色的应用,我们可以使用filter,结合gzip 压缩技术,解决web应用中网络传输数据量大的问题,一般使用了gzip压缩,网络的传输流量能减少40%作用,效果还是相当明显的.在工作中,gzip在企业级的应用中还不是很普遍,也许是程序员一开始想的就是sql优化,缓存等更直接有效的方式,而忽略了gzip压缩方法吧.
为什么要开启Gzip ?
gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户端加载后渲染呈现,这种情况文件一般都比较大,如果开启Gzip ,那么服务器端响应后,会将页面,JS,CSS等文本文件或者其他文件通过高压缩算法将其压缩,然后传输到客户端,由客户端的浏览器负责解压缩与呈现。通常能节省40%以上的流量(一般都有60%左右),一些PHP,JSP文件也能够进行压缩。
那怎么开启呢?
Tomcat 开启Gzip :
1.找到Tomcat 目录下的conf下的server.xml,并找到如下信息
Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"
将它改成如下的形式(其实在上面代码的下面已经有了,将他们打开而已。):
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml" >
这样,就能够对html和xml进行压缩了,如果要压缩css 和 js,那么需要将
compressableMimeType=”text/html,text/xml”加入css和js:
<Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript" >
你甚至可以压缩图片:
compressableMimeType=”text/html,text/xml”加入css和js:
<Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript,image/gif,image/jpg" >
——开启后——–
开启后重启Tomcat ,通过浏览器查看headers信息就能看到是否开启(firebug中有),如果开启了,那么transfer-encoding就会是Gzip,否则就是chunked。
以上方式依赖了tomcat服务器的特性,如果你服务器是iis或者websphere那么还有不同的配置方式,下面我们使用filter,在代码级别完成web应用的gzip压缩的开启.
实现定制输出的关键是对HttpServletResponse 进行包装,截获所有的输出,等到过滤器链处理完毕后,再对截获的输出进行处理,并写入到真正的HttpServletResponse 对象中。JavaEE 框架已经定义了一个HttpServletResponseWrapper 类使得包装HttpServletResponse 更加容易。我们扩展这个HttpServletResponseWrapper,截获所有的输出,并保存到ByteArrayOutputStream 中
步骤:
1.Wrapper 用来包装HttpServletResponse 对象
Java代码
1.public class Wrapper extends HttpServletResponseWrapper
2.{
3. public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2;
4. private int outputType = OT_NONE;
5. private ServletOutputStream output = null;
6. private PrintWriter writer = null;
7. private ByteArrayOutputStream buffer = null;
8. public Wrapper(HttpServletResponse resp) throws IOException {
9. super(resp);
10. buffer = new ByteArrayOutputStream();
11. }
12. public PrintWriter getWriter() throws IOException {
13. if(outputType==OT_STREAM)
14. throw new IllegalStateException();
15. else if(outputType==OT_WRITER)
16. return writer;
17. else {
18. outputType = OT_WRITER;
19. writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));
20. return writer;
21. }
22. }
23. public ServletOutputStream getOutputStream() throws IOException {
24. if(outputType==OT_WRITER)
25. throw new IllegalStateException();
26. else if(outputType==OT_STREAM)
27. return output;
28. else {
29. outputType = OT_STREAM;
30. output = new WrappedOutputStream(buffer);
31. return output;
32. }
33. }
34. public void flushBuffer() throws IOException {
35. if(outputType==OT_WRITER)
36. writer.flush();
37. if(outputType==OT_STREAM)
38. output.flush();
39. }
40. public void reset() {
41. outputType = OT_NONE;
42. buffer.reset();
43. }
44. public byte[] getResponseData() throws IOException {
45. flushBuffer();
46. return buffer.toByteArray();
47.
48. }
49. class WrappedOutputStream extends ServletOutputStream {
50. private ByteArrayOutputStream buffer;
51. public WrappedOutputStream(ByteArrayOutputStream buffer) {
52. this.buffer = buffer;
53. }
54. public void write(int b) throws IOException {
55. buffer.write(b);
56. }
57. public byte[] toByteArray() {
58. return buffer.toByteArray();
59. }
60. }
61.}
public class Wrapper extends HttpServletResponseWrapper
{
public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2;
private int outputType = OT_NONE;
private ServletOutputStream output = null;
private PrintWriter writer = null;
private ByteArrayOutputStream buffer = null;
public Wrapper(HttpServletResponse resp) throws IOException {
super(resp);
buffer = new ByteArrayOutputStream();
}
public PrintWriter getWriter() throws IOException {
if(outputType==OT_STREAM)
throw new IllegalStateException();
else if(outputType==OT_WRITER)
return writer;
else {
outputType = OT_WRITER;
writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));
return writer;
}
}
public ServletOutputStream getOutputStream() throws IOException {
if(outputType==OT_WRITER)
throw new IllegalStateException();
else if(outputType==OT_STREAM)
return output;
else {
outputType = OT_STREAM;
output = new WrappedOutputStream(buffer);
return output;
}
}
public void flushBuffer() throws IOException {
if(outputType==OT_WRITER)
writer.flush();
if(outputType==OT_STREAM)
output.flush();
}
public void reset() {
outputType = OT_NONE;
buffer.reset();
}
public byte[] getResponseData() throws IOException {
flushBuffer();
return buffer.toByteArray();
}
class WrappedOutputStream extends ServletOutputStream {
private ByteArrayOutputStream buffer;
public WrappedOutputStream(ByteArrayOutputStream buffer) {
this.buffer = buffer;
}
public void write(int b) throws IOException {
buffer.write(b);
}
public byte[] toByteArray() {
return buffer.toByteArray();
}
}
}
2.过滤器
Java代码
1.public class GZipFilter implements Filter
2.{
3.
4. public void destroy()
5. {
6. // TODO Auto-generated method stub
7.
8. }
9.
10. public void doFilter(ServletRequest request, ServletResponse response,
11. FilterChain chain) throws IOException, ServletException
12. {
13. System.out.println("进入过滤器");
14. HttpServletResponse resp = (HttpServletResponse)response;
15. Wrapper wrapper = new Wrapper(resp);
16. chain.doFilter(request, wrapper);
17. byte[] gzipData = gzip(wrapper.getResponseData());
18. resp.addHeader("Content-Encoding", "gzip");
19. resp.setContentLength(gzipData.length);
20. ServletOutputStream output = response.getOutputStream();
21. output.write(gzipData);
22. output.flush();
23. }
24.
25. public void init(FilterConfig arg0) throws ServletException
26. {
27. // TODO Auto-generated method stub
28.
29. }
30.
31. private byte[] gzip(byte[] data) {
32. ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
33. GZIPOutputStream output = null;
34. try {
35. output = new GZIPOutputStream(byteOutput);
36. output.write(data);
37. }
38. catch (IOException e) {}
39. finally {
40. try {
41. output.close();
42. }
43. catch (IOException e) {}
44. }
45. return byteOutput.toByteArray();
46. }
47.
48.}
public class GZipFilter implements Filter
{
public void destroy()
{
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
System.out.println("进入过滤器");
HttpServletResponse resp = (HttpServletResponse)response;
Wrapper wrapper = new Wrapper(resp);
chain.doFilter(request, wrapper);
byte[] gzipData = gzip(wrapper.getResponseData());
resp.addHeader("Content-Encoding", "gzip");
resp.setContentLength(gzipData.length);
ServletOutputStream output = response.getOutputStream();
output.write(gzipData);
output.flush();
}
public void init(FilterConfig arg0) throws ServletException
{
// TODO Auto-generated method stub
}
private byte[] gzip(byte[] data) {
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
GZIPOutputStream output = null;
try {
output = new GZIPOutputStream(byteOutput);
output.write(data);
}
catch (IOException e) {}
finally {
try {
output.close();
}
catch (IOException e) {}
}
return byteOutput.toByteArray();
}
}
3.在web.xml中配置 GZipFilter,当我们访问应用中以.html结尾的资源的使用,服务器端就开启http gzip压缩,将压缩后的信息通过http 协议传递给浏览器.
Xml代码
1.<filter>
2. <filter-name>ecsideExport</filter-name>
3. <filter-class>cn.com.xinli.test.GZipFilter</filter-class>
4. </filter>
5. <filter-mapping>
6. <filter-name>ecsideExport</filter-name>
7. <url-pattern>*.html</url-pattern>
8. </filter-mapping>
9.
<filter>
<filter-name>ecsideExport</filter-name>
<filter-class>cn.com.xinli.test.GZipFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ecsideExport</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
测试: 首先下载ieHttpHeader 插件.
测试地址:
http://localhost:9090/dwr/test.html
1.未开启http gzip 压缩
GET /dwr/test.html HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:9090
Connection: Keep-Alive
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"5060-1242444154000"
Last-Modified: Sat, 16 May 2009 03:22:34 GMT
Content-Type: text/html
Content-Length: 5060
Date: Mon, 18 May 2009 12:29:49 GMT
2.开启http gzip 压缩
GET /dwr/test.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:9090
Connection: Keep-Alive
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"5060-1242444154000"
Last-Modified: Sat, 16 May 2009 03:22:34 GMT
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 837
Date: Mon, 18 May 2009 12:27:33 GMT
效果是非常明显的..........
使用gzip优化web应用(filter实现)
以前使用过filter,也就是屏蔽一下受限制的资源访问路径,解决下中文乱码问题,其实filter在优化web应用发面也有出色的应用,我们可以使用filter,结合gzip 压缩技术,解决web应用中网络传输数据量大的问题,一般使用了gzip压缩,网络的传输流量能减少40%作用,效果还是相当明显的.在工作中,gzip在企业级的应用中还不是很普遍,也许是程序员一开始想的就是sql优化,缓存等更直接有效的方式,而忽略了gzip压缩方法吧.
为什么要开启Gzip ?
gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户端加载后渲染呈现,这种情况文件一般都比较大,如果开启Gzip ,那么服务器端响应后,会将页面,JS,CSS等文本文件或者其他文件通过高压缩算法将其压缩,然后传输到客户端,由客户端的浏览器负责解压缩与呈现。通常能节省40%以上的流量(一般都有60%左右),一些PHP,JSP文件也能够进行压缩。
那怎么开启呢?
Tomcat 开启Gzip :
1.找到Tomcat 目录下的conf下的server.xml,并找到如下信息
Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"
将它改成如下的形式(其实在上面代码的下面已经有了,将他们打开而已。):
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml" >
这样,就能够对html和xml进行压缩了,如果要压缩css 和 js,那么需要将
compressableMimeType=”text/html,text/xml”加入css和js:
<Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript" >
你甚至可以压缩图片:
compressableMimeType=”text/html,text/xml”加入css和js:
<Connector port="8080" ......... compressableMimeType="text/html,text/xml,text/css,text/javascript,image/gif,image/jpg" >
——开启后——–
开启后重启Tomcat ,通过浏览器查看headers信息就能看到是否开启(firebug中有),如果开启了,那么transfer-encoding就会是Gzip,否则就是chunked。
以上方式依赖了tomcat服务器的特性,如果你服务器是iis或者websphere那么还有不同的配置方式,下面我们使用filter,在代码级别完成web应用的gzip压缩的开启.
实现定制输出的关键是对HttpServletResponse 进行包装,截获所有的输出,等到过滤器链处理完毕后,再对截获的输出进行处理,并写入到真正的HttpServletResponse 对象中。JavaEE 框架已经定义了一个HttpServletResponseWrapper 类使得包装HttpServletResponse 更加容易。我们扩展这个HttpServletResponseWrapper,截获所有的输出,并保存到ByteArrayOutputStream 中
步骤:
1.Wrapper 用来包装HttpServletResponse 对象
Java代码
1.public class Wrapper extends HttpServletResponseWrapper
2.{
3. public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2;
4. private int outputType = OT_NONE;
5. private ServletOutputStream output = null;
6. private PrintWriter writer = null;
7. private ByteArrayOutputStream buffer = null;
8. public Wrapper(HttpServletResponse resp) throws IOException {
9. super(resp);
10. buffer = new ByteArrayOutputStream();
11. }
12. public PrintWriter getWriter() throws IOException {
13. if(outputType==OT_STREAM)
14. throw new IllegalStateException();
15. else if(outputType==OT_WRITER)
16. return writer;
17. else {
18. outputType = OT_WRITER;
19. writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));
20. return writer;
21. }
22. }
23. public ServletOutputStream getOutputStream() throws IOException {
24. if(outputType==OT_WRITER)
25. throw new IllegalStateException();
26. else if(outputType==OT_STREAM)
27. return output;
28. else {
29. outputType = OT_STREAM;
30. output = new WrappedOutputStream(buffer);
31. return output;
32. }
33. }
34. public void flushBuffer() throws IOException {
35. if(outputType==OT_WRITER)
36. writer.flush();
37. if(outputType==OT_STREAM)
38. output.flush();
39. }
40. public void reset() {
41. outputType = OT_NONE;
42. buffer.reset();
43. }
44. public byte[] getResponseData() throws IOException {
45. flushBuffer();
46. return buffer.toByteArray();
47.
48. }
49. class WrappedOutputStream extends ServletOutputStream {
50. private ByteArrayOutputStream buffer;
51. public WrappedOutputStream(ByteArrayOutputStream buffer) {
52. this.buffer = buffer;
53. }
54. public void write(int b) throws IOException {
55. buffer.write(b);
56. }
57. public byte[] toByteArray() {
58. return buffer.toByteArray();
59. }
60. }
61.}
public class Wrapper extends HttpServletResponseWrapper
{
public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2;
private int outputType = OT_NONE;
private ServletOutputStream output = null;
private PrintWriter writer = null;
private ByteArrayOutputStream buffer = null;
public Wrapper(HttpServletResponse resp) throws IOException {
super(resp);
buffer = new ByteArrayOutputStream();
}
public PrintWriter getWriter() throws IOException {
if(outputType==OT_STREAM)
throw new IllegalStateException();
else if(outputType==OT_WRITER)
return writer;
else {
outputType = OT_WRITER;
writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));
return writer;
}
}
public ServletOutputStream getOutputStream() throws IOException {
if(outputType==OT_WRITER)
throw new IllegalStateException();
else if(outputType==OT_STREAM)
return output;
else {
outputType = OT_STREAM;
output = new WrappedOutputStream(buffer);
return output;
}
}
public void flushBuffer() throws IOException {
if(outputType==OT_WRITER)
writer.flush();
if(outputType==OT_STREAM)
output.flush();
}
public void reset() {
outputType = OT_NONE;
buffer.reset();
}
public byte[] getResponseData() throws IOException {
flushBuffer();
return buffer.toByteArray();
}
class WrappedOutputStream extends ServletOutputStream {
private ByteArrayOutputStream buffer;
public WrappedOutputStream(ByteArrayOutputStream buffer) {
this.buffer = buffer;
}
public void write(int b) throws IOException {
buffer.write(b);
}
public byte[] toByteArray() {
return buffer.toByteArray();
}
}
}
2.过滤器
Java代码
1.public class GZipFilter implements Filter
2.{
3.
4. public void destroy()
5. {
6. // TODO Auto-generated method stub
7.
8. }
9.
10. public void doFilter(ServletRequest request, ServletResponse response,
11. FilterChain chain) throws IOException, ServletException
12. {
13. System.out.println("进入过滤器");
14. HttpServletResponse resp = (HttpServletResponse)response;
15. Wrapper wrapper = new Wrapper(resp);
16. chain.doFilter(request, wrapper);
17. byte[] gzipData = gzip(wrapper.getResponseData());
18. resp.addHeader("Content-Encoding", "gzip");
19. resp.setContentLength(gzipData.length);
20. ServletOutputStream output = response.getOutputStream();
21. output.write(gzipData);
22. output.flush();
23. }
24.
25. public void init(FilterConfig arg0) throws ServletException
26. {
27. // TODO Auto-generated method stub
28.
29. }
30.
31. private byte[] gzip(byte[] data) {
32. ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
33. GZIPOutputStream output = null;
34. try {
35. output = new GZIPOutputStream(byteOutput);
36. output.write(data);
37. }
38. catch (IOException e) {}
39. finally {
40. try {
41. output.close();
42. }
43. catch (IOException e) {}
44. }
45. return byteOutput.toByteArray();
46. }
47.
48.}
public class GZipFilter implements Filter
{
public void destroy()
{
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
System.out.println("进入过滤器");
HttpServletResponse resp = (HttpServletResponse)response;
Wrapper wrapper = new Wrapper(resp);
chain.doFilter(request, wrapper);
byte[] gzipData = gzip(wrapper.getResponseData());
resp.addHeader("Content-Encoding", "gzip");
resp.setContentLength(gzipData.length);
ServletOutputStream output = response.getOutputStream();
output.write(gzipData);
output.flush();
}
public void init(FilterConfig arg0) throws ServletException
{
// TODO Auto-generated method stub
}
private byte[] gzip(byte[] data) {
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
GZIPOutputStream output = null;
try {
output = new GZIPOutputStream(byteOutput);
output.write(data);
}
catch (IOException e) {}
finally {
try {
output.close();
}
catch (IOException e) {}
}
return byteOutput.toByteArray();
}
}
3.在web.xml中配置 GZipFilter,当我们访问应用中以.html结尾的资源的使用,服务器端就开启http gzip压缩,将压缩后的信息通过http 协议传递给浏览器.
Xml代码
1.<filter>
2. <filter-name>ecsideExport</filter-name>
3. <filter-class>cn.com.xinli.test.GZipFilter</filter-class>
4. </filter>
5. <filter-mapping>
6. <filter-name>ecsideExport</filter-name>
7. <url-pattern>*.html</url-pattern>
8. </filter-mapping>
9.
<filter>
<filter-name>ecsideExport</filter-name>
<filter-class>cn.com.xinli.test.GZipFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ecsideExport</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
测试: 首先下载ieHttpHeader 插件.
测试地址:
http://localhost:9090/dwr/test.html
1.未开启http gzip 压缩
GET /dwr/test.html HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:9090
Connection: Keep-Alive
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"5060-1242444154000"
Last-Modified: Sat, 16 May 2009 03:22:34 GMT
Content-Type: text/html
Content-Length: 5060
Date: Mon, 18 May 2009 12:29:49 GMT
2.开启http gzip 压缩
GET /dwr/test.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:9090
Connection: Keep-Alive
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"5060-1242444154000"
Last-Modified: Sat, 16 May 2009 03:22:34 GMT
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 837
Date: Mon, 18 May 2009 12:27:33 GMT
效果是非常明显的..........
发表评论
-
java对象的强引用,软引用,弱引用和虚引用
2017-03-09 23:36 335标签: javaoutofmemoryerror ... -
JAVA 中BIO,NIO,AIO的理解
2017-03-09 23:30 302JAVA 中BIO,NIO,AIO的理解 博客分类: 网络编 ... -
JAVA 中BIO,NIO,AIO的理解
2017-03-09 23:29 0博客分类: 网络编程 【转自】http://qindon ... -
诸葛亮为什么难以入围千古名相之列
2011-06-16 16:31 724诸葛亮为什么难以入围 ... -
windows 2003 密码的破解
2011-05-18 01:14 1025windows 2003 密码的破解 ... -
解决Linux操作系统下Java的中文乱码问题
2011-03-04 10:57 887解决Linux操作系统下Java的中文乱码问题 关注Linu ... -
利用sethc.exe粘滞键文件破解密码进系统小健
2011-01-20 22:42 1405利用sethc.exe粘滞键文件破解密码进系统小健 发表于 系 ... -
windows 2003服务器创建隐藏账号以及清除隐藏账号的完美教程
2011-01-20 14:18 3656一.建立一个别人永远删不掉的管理员用户 操作步骤: ... -
ulimit 设置
2010-11-29 22:58 1627ulimit 设置(2009-08-21 15:17:16) ... -
浅析tomcat nio 配置
2010-11-29 20:49 988浅析tomcat nio 配置 Tomcat 6.X实现了J ... -
tomcat too open files ,solution
2010-11-28 19:28 6971) # ulimit -a core file size ( ... -
Tomcat [java.net.SocketException: Too many open files]解决方法
2010-11-28 14:26 1112主题: Tomcat [java.net.SocketExce ... -
Android开发者如何玩转应用开发
2010-11-26 12:27 752Android开发者如何玩转应 ... -
令人担忧的国内java开发现状
2010-11-25 22:20 92823 令人担忧的国内java开发现状 文章分类:Java编程 ... -
paypal在线支付的通信接口
2010-11-25 22:15 871paypal在线支付的通信接口 ★★★ 本篇为原创,需要引用转 ... -
终于搞定了Windows下Tomcat Web服务器的SSL配置
2010-11-25 17:05 1180终于搞定了Windows下Tomcat Web服务器的SSL配 ... -
QQ能上网页打不开的终极解决办法:用WinSock XP Fix修复2009-4-25
2010-06-01 09:31 4727现在某些垃圾网站 ... -
使用org.apache.commons.net.ftp包开发FTP客户端,实现进度汇报,实现断点续传,中文支持
2010-02-23 18:04 2417使用org.apache.commons.net.ftp包开发 ... -
axis2创建web service(一)
2009-09-22 17:22 655axis2创建w ...
相关推荐
1. `@WebFilter`注解:这个注解可以直接应用到Filter类上,用于声明Filter的基本信息,如过滤的URL模式、过滤器名称等。例如: ```java @WebFilter(filterName = "访问量统计Filter", urlPatterns = "/*") public ...
4. **GZIP 压缩**:通过 Filter 实现响应内容的 GZIP 压缩,减少网络传输的数据量,提高性能。 5. **缓存控制**:Filter 可以控制资源是否需要从缓存中读取或更新缓存。 6. **安全过滤**:对请求参数进行检查和过滤...
JavaWeb的Gzip技术是一种用于优化Web应用性能的方法,它通过使用Gzip压缩算法来减小HTTP响应的数据量,从而加快网页加载速度。Gzip在Web服务器和浏览器之间工作,当浏览器请求一个页面时,如果支持Gzip压缩,它会...
在IT行业中,gzip是一种广泛使用的数据压缩算法,尤其在Web应用中扮演着重要角色。它能够有效地减小网络传输的数据量,从而提高页面加载速度,节省带宽资源。Java、AJAX(异步JavaScript和XML)是Web开发中的关键...
通过理解和熟练使用Filter,开发者可以更好地控制和优化Web应用程序的行为。 由于提供的压缩包文件名为`webfilter`,可能包含了示例代码或者项目的配置文件,这些内容可以进一步帮助理解Filter的工作方式和应用场景...
在Web开发中,为了提高网页加载速度和优化用户体验,经常...解压后,开发者可以根据提供的文档或示例来集成`tk-filter`到自己的Web应用中,通过调整配置,实现对js、jsp和css文件的有效压缩,从而提升网站的整体性能。
4. **Filter链**:在一个Web应用中,可以有多个Filter,它们组成一个Filter链。当请求到达时,Filter会按照配置的顺序依次执行,直到请求传递到目标资源。 5. **Filter的实际应用**: - **安全控制**:Filter可以...
标题中的“通过filter实现对输出内容的压缩处理”是指在编程中使用过滤器(Filter)技术来对输出数据进行压缩,以减少网络传输的数据量,提高传输效率,节省带宽资源。这种技术常见于Web开发中,如Java的Servlet ...
- **初始化**:每当Web应用启动时,每个`Filter`实例都会调用一次`init()`方法,传递一个`FilterConfig`对象,包含了`Filter`的初始化参数。 - **执行**:每次匹配的请求到达时,`doFilter()`方法被调用,它会按...
5. **自定义配置**:Tomcat的GZIP源码通常允许开发者通过web.xml配置文件调整过滤器的行为,例如设置最小压缩长度、启用或禁用GZIP,以及选择性地对某些类型的资源应用压缩。 6. **多线程安全**:在高并发环境下,...
4. **性能优化**:例如,使用GZIP Filter对响应内容进行压缩,减少网络传输量。 在实际开发中,Filter可以极大地提高应用的灵活性和可维护性,通过合理的Filter设计,可以解耦业务逻辑,使代码结构更加清晰。 以上...
在Java EE(企业版)平台中,Filter技术是核心...总之,Java EE中的Filter技术是构建高效、灵活Web应用程序的关键工具。理解并熟练运用Filter,可以帮助开发者更好地实现功能扩展和优化,提高系统的整体性能和稳定性。
通过深入学习"Servlet--2.filter",你将能更好地控制和优化Web应用的流程,提高系统的可维护性和安全性。在实际项目中,结合实际需求灵活运用Filter,可以解决许多复杂的问题,如性能优化、安全防护等。
在Java世界中,Servlet Filter是实现Web应用程序动态拦截请求的重要工具。`Filter`类的应用主要体现在对HTTP请求和响应进行预处理和后处理,比如权限验证、数据编码转换、日志记录等。在这个主题中,我们将深入探讨...
EhCache是一款流行的Java缓存系统...综上所述,EhCache开启gzip压缩功能是优化Web应用性能的有效手段,能够减少网络延迟,提高用户体验。同时,正确地配置和使用gzip压缩,还需考虑浏览器兼容性以及服务器资源的平衡。
- **性能优化**:如GZIP压缩,减少网络传输的数据量。 6. **Spring MVC中的Filter** 在Spring MVC中,虽然Controller承担了大部分业务逻辑,但Filter依然有用武之地,可以用于拦截和处理请求。Spring提供了一种更...
过滤器可以用来实现诸如登录验证、数据转换、日志记录等功能,为Web应用程序提供了强大的扩展性。 首先,我们需要理解过滤器的基本工作原理。当用户向服务器发送一个请求时,过滤器会按照在web.xml中的配置顺序被...
为了增强应用程序的安全性、性能优化或者实现特定的功能,我们常常会使用过滤器(Filter)来拦截请求和响应。本文将详细介绍如何使用filter来对servlet和jsp页面的内容进行过滤,并在过滤后输出。 首先,了解...
**JSP(JavaServer Pages)**是一种...通过合理配置和使用Filter,我们可以实现更灵活、更高效的Web应用程序。在学习和实践过程中,结合源码分析和开发工具,能更深入地理解其工作机制,从而更好地应用于实际项目中。
综上所述,Java Filter是Java Web开发中的关键组件,理解和熟练使用Filter能极大地增强你的应用程序的功能性和可维护性。通过深入学习和实践,你将能够利用Filter实现各种高效且灵活的解决方案。