posts - 59, comments - 244, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          頁面緩存的小測(cè)試

          Posted on 2011-04-10 23:21 penngo 閱讀(2622) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          OSCache支持JSP標(biāo)簽頁面內(nèi)緩存、整個(gè)頁面的緩存、對(duì)象緩存,試用了下OSCache的頁面緩存,并使用JMeter測(cè)試。
          1、使用的測(cè)試頁面代碼test1.jsp
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>Filter Test Page</title>
          <style type="text/css">
          body 
          {font-family: Arial, Verdana, Geneva, Helvetica, sans-serif}
          </style>
          </head>
          <body>
          <href="/OSCache/">返回</a><p>
          <hr>
          <b>當(dāng)前時(shí)間</b>: 2011-04-09 12:20:07<br>
          <b>當(dāng)前毫秒數(shù)</b>: 1302322807867<br>
          </body>
          </html>

          JMeter線程組設(shè)置:


          運(yùn)行結(jié)果:


          2、把文件放在cache/test1.jsp
          并在web.xml增加配置:
           <filter>
                  
          <filter-name>CacheFilter</filter-name>
                  
          <filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
              
          </filter>
          <filter-mapping>
                  
          <filter-name>CacheFilter</filter-name>
                  
          <url-pattern>/cache/*</url-pattern>
          </filter-mapping>

          JMeter測(cè)試結(jié)果


          3、把文件放在WEB-INF/template/test1.jsp,并寫一個(gè)servlet處理文件先把test1.jsp讀取進(jìn)內(nèi)存HashMap,訪問時(shí)從這個(gè)HashMap中取出test1.jsp的文件內(nèi)容。
          增加一個(gè)servlet文件CacheServlet.java
          import java.io.ByteArrayOutputStream;
          import java.io.File;
          import java.io.FileInputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.util.HashMap;
          import java.util.Map;

          import javax.servlet.ServletException;
          import javax.servlet.ServletOutputStream;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;

          public class CacheServlet extends HttpServlet {
              
          private static final long serialVersionUID = 1L;
              
          private static final Map<String, byte[]> cacheMap = new HashMap<String, byte[]>();
              
          protected static final Log log = LogFactory.getLog(CacheServlet.class);

              
          public CacheServlet() {
                  
          super();
              }

              
          protected void doGet(HttpServletRequest request,
                      HttpServletResponse response) 
          throws ServletException, IOException {
                  cache(request, response);
              }

              
          protected void doPost(HttpServletRequest request,
                      HttpServletResponse response) 
          throws ServletException, IOException {
                  cache(request, response);
              }

              
          protected void cache(HttpServletRequest request,
                      HttpServletResponse response) 
          throws ServletException, IOException {
                  String path 
          = request.getSession().getServletContext().getRealPath("")
                          
          + "/WEB-INF/template";
                  String key 
          = request.getRequestURI();  //從靜態(tài)變量中取出頁面
                  byte[] by = cacheMap.get(key);
                  
                  
          if (by != null) {       //如果不為空,則直接把文件內(nèi)容返回給客戶端
                      byte[] b = new byte[256];
                      
          int len = 0;
                      ServletOutputStream out 
          = response.getOutputStream();
                      out.write(by);
                      log.debug(
          "輸出緩存==============\n" );
                      out.flush();
                      out.close();
                  }
                  
          else{                 //如果為空,則先把文件內(nèi)容以字節(jié)形式保存在靜態(tài)變量中,
                      File f = new File(path + "/test1.jsp");
                      StringBuffer sr 
          = new StringBuffer();
                      InputStream in 
          = new FileInputStream(f);
                      ByteArrayOutputStream  bos 
          = new ByteArrayOutputStream();
                      
          int len = 0;
                      
          byte[] b = new byte[256];
                      
          while((len = in.read(b)) > 0){
                          bos.write(b, 
          0, len);
                      }
                      
          byte[] sByte = bos.toByteArray();
                      log.debug(
          "生成緩存:" );
                      cacheMap.put(key, sByte);
                      in.close();
                      bos.close();
                      ServletOutputStream out 
          = response.getOutputStream();
                      out.write(sByte);
                      out.flush();
                      out.close();
                  }
              }
          }

          web.xml中增加內(nèi)容:
          <servlet>
              
          <servlet-name>CacheServlet</servlet-name>
              
          <servlet-class>com.ocache.servlet.CacheServlet</servlet-class>
            
          </servlet>
            
          <servlet-mapping>
              
          <servlet-name>CacheServlet</servlet-name>
              
          <url-pattern>/CacheServlet</url-pattern>
            
          </servlet-mapping>
              
          <session-config>
                  
          <session-timeout>10</session-timeout>
           
          </session-config>

          先用瀏覽器訪問該sevlet,把頁面內(nèi)容保存進(jìn)cacheMap中,再用JMeter測(cè)試。
          測(cè)試結(jié)果:


          測(cè)試發(fā)現(xiàn),服務(wù)器本身對(duì)靜態(tài)內(nèi)容的處理比緩存還快。而自己寫的servlet緩存比OSCache快,主要是因?yàn)镺SCache多了內(nèi)部處理的代碼,至于是哈內(nèi)部處理,還要看過源碼才知。

          本程序的測(cè)試環(huán)境:
          服務(wù)器:apache-tomcat-6.0.20
          緩存組件:oscache-2.4.1
          JDK:jdk1.6.0_17
          JMeter:jakarta-jmeter-2.4

          測(cè)試代碼:OSCache.zip
          主站蜘蛛池模板: 萨嘎县| 西贡区| 宁阳县| 甘德县| 荃湾区| 佛冈县| 醴陵市| 阳原县| 陈巴尔虎旗| 来凤县| 图木舒克市| 甘谷县| 固镇县| 安塞县| 闵行区| 吉木萨尔县| 赞皇县| 仙居县| 鄂尔多斯市| 东平县| 盐边县| 元朗区| 大姚县| 威远县| 武宣县| 上饶市| 陈巴尔虎旗| 印江| 澄城县| 周至县| 台东市| 渭南市| 丹东市| 正宁县| 深泽县| 宁强县| 抚远县| 叙永县| 沙坪坝区| 阿荣旗| 通州市|