当前位置: 首页 > news >正文

企业微信下载官方网站购门网站建设

企业微信下载官方网站,购门网站建设,那个网站上找工程造价私活做,php网站开发架构相关知识#xff1a; gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后#xff0c;通常情况下服务器端会将页面文件和其他资源#xff0c;返回到客户端#xff0c;客户端加载后渲染呈现#xff0c;这种情况文件一般都比较大#xff0c;如果开启Gzip …相关知识   gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后通常情况下服务器端会将页面文件和其他资源返回到客户端客户端加载后渲染呈现这种情况文件一般都比较大如果开启Gzip 那么服务器端响应后会将页面JS,CSS等文本文件或者其他文件通过高压缩算法将其压缩然后传输到客户端由客户端的浏览器负责解压缩与呈现。通常能节省40%以上的流量一般都有60%左右一些PHPJSP文件也能够进行压缩。   1.实现   Tomcat 开启Gzip 1.找到Tomcat 目录下的conf下的server.xml并找到如下信息 Connector port8080 maxHttpHeaderSize8192 maxThreads150 minSpareThreads25 maxSpareThreads75 enableLookupsfalse redirectPort8443 acceptCount100 connectionTimeout20000 disableUploadTimeouttrue 将它改成如下的形式其实在上面代码的下面已经有了将他们打开而已。 !-- Define a non-SSL HTTP/1.1 Connector on port 8080 -- Connector port8080 maxHttpHeaderSize8192 maxThreads150 minSpareThreads25 maxSpareThreads75 enableLookupsfalse redirectPort8443 acceptCount100 connectionTimeout20000 disableUploadTimeouttrue compressionon compressionMinSize2048 noCompressionUserAgentsgozilla, traviata compressableMimeTypetext/html,text/xml 这样就能够对html和xml进行压缩了如果要压缩css 和 js那么需要将 compressableMimeType”text/html,text/xml”加入css和js Connector port8080 ......... compressableMimeTypetext/html,text/xml,text/css,text/javascript 你甚至可以压缩图片 compressableMimeType”text/html,text/xml”加入css和js Connector port8080 ......... compressableMimeTypetext/html,text/xml,text/css,text/javascript,image/gif,image/jpg 开启后重启Tomcat 通过浏览器查看headers信息就能看到是否开启firebug中有如果开启了那么transfer-encoding就会是Gzip否则就是chunked。     2.在代码级别完成web应用的gzip压缩的开启     1.Wrapper  用来包装HttpServletResponse 对象   package com.shop.gzip;import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter;import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper;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.过滤器 package com.shop.gzip;import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.GZIPOutputStream;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class GZipFilter implements Filter {public void destroy() {}/*** 判断浏览器是否支持GZIP* param request* return*/private static boolean isGZipEncoding(HttpServletRequest request){boolean flagfalse;String encodingrequest.getHeader(Accept-Encoding);if(encoding.indexOf(gzip)!-1){flagtrue;}return flag;}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletResponse resp (HttpServletResponse) response;HttpServletRequest req(HttpServletRequest)request;if(isGZipEncoding(req)){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();} else {chain.doFilter(request, response);} }public void init(FilterConfig arg0) throws ServletException {}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,当我们访问应用中以.do结尾的资源的使用,服务器端就开启http gzip压缩,将压缩后的信息通过http 协议传递给浏览器. filter filter-nameecsideExport/filter-name filter-classcom.web.servlet.GZipFilter/filter-class /filter filter-mapping filter-nameecsideExport/filter-name url-pattern*.do/url-pattern /filter-mapping     番外使用Jayson Falkner的过滤器   Jayson Falkner 在他的Two Servlet Filters Every Web Application Should Havehttp://www.onjava.com/pub/a/onjava/2003/11/19/filters.html?page1 里面介绍了2个提高Java Web Application 效能的Servlet。这里记一下其中的GZIPFilter。 GZIPFilter可以用gzip的方式压缩HTTP Response的内容从而在Server端加快了响应回复的速度gzip压缩过程需耗用CPU资源却大幅减轻了网卡的处理负担在Client端缩短了页面刷新时间在网络内减少了数据流量。另一方面因为采用的Filter的方式无需改动应用现有的代码就可引入该功能。   以上Filter的source code在这里http://www.onjava.com/onjava/2003/11/19/examples/jspbook.zip 下载。当然也可以在这里http://www.onjava.com/onjava/2003/11/19/examples/jspbook.jar 下载现成的JAR。 作者定义了3个类来实现这个压缩功能GZIPFilter, GZIPResponseWrapper, GZIPResponseStream。类图大致如下   这3个类要做的就是在Server将响应内容装入HTTP Response之前先对内容进行GZIP压缩。其中GZIPFilter实现了javax.servlet.Filter接口在Java Web Container处理HTTP Response的过程中便可以挂载使用。另外2个类GZIPResponseWrapper,GZIPResponseStream基本上是辅助类真正的压缩动作是在GZIPResponseStream中由java.util.zip.GZIPOutputStream来完成的除此还有其它的一些方法感觉似乎并没有全部用到。这部分还需要另外再研究。   要布署这个Filter也很简单。只要将JAR放至应用的library目录并且在应用的布署配置文件web.xml中加入 GZIPFilter com.jspbook.GZIPFilter GZIPFilter /*.jsp 然后启动Server就可以了。 GZIPFilter压缩HTTP Response内容的作用非常明显。作者在source code的包里面另外放了TestGZIP.jsp这是用来显示GZIPFilter的压缩效果的JSP。你可以找一支产生大量内容的目标JSP来测验一下就像下面这支show_response_compressed.jsp % page importjava.io.* %% page importjava.util.zip.* %%String title Show Compressed Response;int size 100000;out.println(HTML/n HEADTITLE title /TITLE/HEAD/n BODY BGCOLOR/#FDF5E6//n H1 ALIGN/CENTER/ title SIZEsize/H1/n);String line Blah, blah, blah, blah, blah. Yadda, yadda, yadda, yadda.;for(int i0; isize; i) {out.println(line);}out.println(/BODY/HTML);% 运行show_response_compressed.jsp可以产生类似如下截图中的页面。       运行TestGZIP.jsp在URL中填入show_response_compressed.jsp 所在的地址提交后即可得到如下结果。     可以看到未经压缩的HTTP Response数据量达到了2,950,086 bytes (2.9MB)而压缩后的数据量仅有8,687 bytes8 KB压缩比高达99.7%   因为是在一台机器上作的验证所以在响应时间的改善方面感觉不是很明显。同样的如果是在Intranet环境内则这种效果也不会很明显。如果是在Internet上测试改善的效果应该会比较明显。           附上源码 /** Copyright 2003 Jayson Falkner (jaysonjspinsider.com)* This code is from Servlets and JavaServer pages; the J2EE Web Tier,* http://www.jspbook.com. You may freely use the code both commercially* and non-commercially. If you like the code, please pick up a copy of* the book and help support the authors, development of more free code,* and the JSP/Servlet/J2EE community.*/ package cn.javass.common.web.filter;/*使用gzip优化web应用(filter实现)*/ import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.io.IOException;public class GZIPFilter implements Filter {private static Logger log LoggerFactory.getLogger(GZIPFilter.class);public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {if (req instanceof HttpServletRequest) {HttpServletRequest request (HttpServletRequest) req;HttpServletResponse response (HttpServletResponse) res;String ae request.getHeader(accept-encoding);if (ae ! null ae.indexOf(gzip) ! -1) {log.debug(GZIP supported, compressing.);GZIPResponseWrapper wrappedResponse new GZIPResponseWrapper(response);chain.doFilter(req, wrappedResponse);wrappedResponse.finishResponse();return;}chain.doFilter(req, res);}}public void init(FilterConfig filterConfig) {// noop}public void destroy() {// noop} } /** Copyright 2003 Jayson Falkner (jaysonjspinsider.com)* This code is from Servlets and JavaServer pages; the J2EE Web Tier,* http://www.jspbook.com. You may freely use the code both commercially* and non-commercially. If you like the code, please pick up a copy of* the book and help support the authors, development of more free code,* and the JSP/Servlet/J2EE community.*/ package cn.javass.common.web.filter;import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.GZIPOutputStream;public class GZIPResponseStream extends ServletOutputStream {protected ByteArrayOutputStream baos null;protected GZIPOutputStream gzipstream null;protected boolean closed false;protected HttpServletResponse response null;protected ServletOutputStream output null;public GZIPResponseStream(HttpServletResponse response) throws IOException {super();closed false;this.response response;this.output response.getOutputStream();baos new ByteArrayOutputStream();gzipstream new GZIPOutputStream(baos);}Overridepublic void close() throws IOException {if (closed) {throw new IOException(This output stream has already been closed);}gzipstream.finish();byte[] bytes baos.toByteArray();// response.addHeader(Content-Length, Integer.toString(bytes.length));response.addHeader(Content-Encoding, gzip);output.write(bytes);output.flush();output.close();closed true;}Overridepublic void flush() throws IOException {if (closed) {throw new IOException(Cannot flush a closed output stream);}gzipstream.flush();}Overridepublic void write(int b) throws IOException {if (closed) {throw new IOException(Cannot write to a closed output stream);}gzipstream.write((byte) b);}Overridepublic void write(byte b[]) throws IOException {write(b, 0, b.length);}Overridepublic void write(byte b[], int off, int len) throws IOException {if (closed) {throw new IOException(Cannot write to a closed output stream);}gzipstream.write(b, off, len);}public boolean closed() {return (this.closed);}public void reset() {//noop} } /** Copyright 2003 Jayson Falkner (jaysonjspinsider.com)* This code is from Servlets and JavaServer pages; the J2EE Web Tier,* http://www.jspbook.com. You may freely use the code both commercially* and non-commercially. If you like the code, please pick up a copy of* the book and help support the authors, development of more free code,* and the JSP/Servlet/J2EE community.*/ package cn.javass.common.web.filter;import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter;public class GZIPResponseWrapper extends HttpServletResponseWrapper {protected HttpServletResponse origResponse null;protected ServletOutputStream stream null;protected PrintWriter writer null;public GZIPResponseWrapper(HttpServletResponse response) {super(response);origResponse response;}public ServletOutputStream createOutputStream() throws IOException {return (new GZIPResponseStream(origResponse));}public void finishResponse() {try {if (writer ! null) {writer.close();}else {if (stream ! null) {stream.close();}}}catch (IOException e) {}}Overridepublic void flushBuffer() throws IOException {stream.flush();}Overridepublic ServletOutputStream getOutputStream() throws IOException {if (writer ! null) {throw new IllegalStateException(getWriter() has already been called!);}if (stream null) stream createOutputStream();return (stream);}Overridepublic PrintWriter getWriter() throws IOException {if (writer ! null) {return (writer);}if (stream ! null) {throw new IllegalStateException(getOutputStream() has already been called!);}stream createOutputStream();writer new PrintWriter(new OutputStreamWriter(stream, UTF-8));return (writer);}Overridepublic void setContentLength(int length) {} } web.xml !--GZIP文件压缩的应用 --filterfilter-nameGZIPFilter/filter-namefilter-classcn.javass.common.web.filter.GZIPFilter/filter-class/filterfilter-mappingfilter-nameGZIPFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping
http://www.pierceye.com/news/577066/

相关文章:

  • 做网站推广广告房地产行业网站开发
  • 济宁网站建设 企业谷wordpress手机 不适应
  • 如何用php做网站合肥专业手机网站哪家好
  • 如何推广自己的网站和产品如何用dw做网站地图
  • 株洲有名的网站重庆市公路建设信息网官网
  • 网站安全证书出错怎么做dw网页制作素材网站
  • 收录查询 站长工具给网站做解答是干嘛的
  • 成都哪些公司可以做网站建网站现软件
  • 深圳wap网站建设传奇霸主页游
  • 做网站首先要干什么营销软文200字
  • 帝国cms做的网站私人定制女装店
  • 网站建设南沙wordpress video
  • 网站建设开票应该开哪个行业什么网站可以免费做视频的软件
  • 百度seo查询收录查询网站推广策划案seo教程
  • 如何免费建立网站中贤建设集团网站
  • 如何做转运网站黄聪 wordpress
  • 临海市住房与城乡建设规划局网站宁波网络推广培训
  • go 网站开发自己在线制作logo
  • 重庆市网站建设公司企业服务账号
  • 网站建设的市场情况网站系统里不能打印
  • 网站如何适应屏幕做网站时无法上传图片
  • 网站的橱窗怎么做嘉兴住房和城乡建设厅网站
  • 吉林省城乡建设官方网站163企业邮箱登录入口官网
  • 做网站参考文献某企业网站建设方案2000字
  • 网站托管哪家好织梦购物网站整站源码
  • 怎么做网站的优化排名wordpress的目录结构(一)
  • 个人可以做公益网站吗美食杰网站的建设目的
  • 宿迁公司企业网站建设《网站基础建设-首保》
  • 做全屏式网站尺寸是多大国外虚拟主机 两个网站
  • 黑龙江建设网站招聘广西住房和城乡建设厅培训中心官方网站