服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

用cashfilter实现页面级缓存实践

1.mysql在本地localhost的test数据库 建person表,暂以字段id,name,password ,表中可输入一行值.

2.建类 daoutil

import  java.sql.connection;
import  java.sql.drivermanager;

public class daoutil {
    public daoutil() {
    }

   public static connection getconn() {
        connection conn = null;
        string db_url = "jdbc:mysql://127.0.0.1:3306/test?useunicode=true&characterencoding=gb2312";
        string db_user = "root";
        string db_password= "admin";
        string db_driver = "com.mysql.jdbc.driver";

        try {
            class.forname(db_driver);
            conn = drivermanager.getconnection(db_url, db_user, db_password);
             } catch (exception ex) {
             ex.printstacktrace();
        }
        return conn;
    }

  /**
  * dbclose
  * 关闭connection,statement
  * @param conn connection
  * @param stmt statement
  */
 public static void dbclose(connection conn, statement stmt) {
       try {
           if (stmt != null)
               stmt.close();
       } catch (exception e) {
         e.printstacktrace();
       }
       try {
           if (conn != null)
               conn.close();
       } catch (exception e) {
          e.printstacktrace();
       }
   }

}

3.建类 persondao

import java.util.*;
import java.sql.connection;
import java.sql.statement;
import java.sql.resultset;


public class persondao {
    static persondao pdao;
    public static persondao getinstance() {
        if (pdao == null) {
            synchronized (persondao.class) {
                pdao = new persondao();
            }
        }
        return pdao;
    }

    public persondao() {
        super();    }

    public static void main(string[] args) {
          system.out.println("person==="+persondao.getinstance().getpersoninfo());
    }
  
       private static list getpersoninfo() {
          string name  = "";
          string password = "";
          connection conn = null;
          list list = new java.util.arraylist();
          statement stmt = null;
          string sql =
                  "select name,password from person";
          try {
              conn = daoutil.getconn();
              stmt = conn.createstatement();
              resultset rs = stmt.executequery(sql);
              while (rs.next()) {
                  name = (string)rs.getstring("name");
                  password = (string)rs.getstring("password");
                  list.add(name+","+password);
                 }
          } catch (exception ex) {
              ex.printstacktrace();
               } finally {
              daoutil.dbclose(conn, stmt);
          }
          return list;
      } 
}

4.建testcache.jsp,testcache2.jsp

<%@page contenttype="text/html; charset=gbk"%>
<%@page import="com.mcsky.dao.persondao" session="false"%>
<%@page import="java.util.list" session="false"%>
<html>
<body bgcolor="#ffffff">
test ,hello world!!<p>
  <table width="85%" border="1" align="center">
   <tr>
      <td width="8%" height="20"> <div align="center">序号</div></td>
      <td width="12%"><div align="center">名字</div></td>
      <td width="17%"><div align="center">密码 </div></td>
       </tr>
<%
//todo connect mysql server (localhost root/admin) and test(db) person(table)
list list =persondao.getinstance().getpersoninfo();
system.out.println("size==="+list.size());
for(int i=0;i<list.size();i++){
string namepass = (string)list.get(i);
java.util.stringtokenizer st = new  java.util.stringtokenizer(namepass,",");
string   name = st.nexttoken();
string    pass = st.nexttoken();
system.out.println("namepass+++++"+namepass);
%>
  <tr>
      <td><div align="center"><%=i+1%></div></td>
      <td> <div align="center"><%=name%></div></td>
      <td><div align="center"><%=pass%></div></td>
      </tr>
    <%
        }
%>
  </table>

</body>
</html>

5.把module部署在tomcat的webapp下

5.1 在web-inf/lib/log4j-1.2.8.jar,mysql-connector-java-3.0.11-stable-bin.jar,oscache-2.3.2.jar,commons-logging.jar,jgroups-all.jar

5.2 在web-inf/classes拷贝cach/etc/下的oscache.tld,oscache.properties

5.3 只对/testcache.jsp缓存

修改web-inf/web.xml

<?xml version="1.0" encoding="utf-8"?>
<!doctype web-app public "-//sun microsystems, inc.//dtd web application 2.3//en" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>test</display-name>
  <taglib><taglib-uri>oscache</taglib-uri><taglib-location>/web-inf/classes/ oscache.tld</taglib-location></taglib>
   <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>/testcache.jsp</url-pattern>
      </filter-mapping>
    
</web-app>

启动tomcat,在mysql的person中增加一条记录,发现已对/testcache.jsp页面进行缓存,而/testcache2.jsp页面未缓存,如去掉黑体,则数据表增加一行,testcache.jsp也随之修改

5.4对所有的jsp缓存,

修改web-inf/web.xml

<?xml version="1.0" encoding="utf-8"?>
<!doctype web-app public "-//sun microsystems, inc.//dtd web application 2.3//en" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>test</display-name>
      <filter>   
        <filter-name>cachefilter</filter-name>
        <filter-class>com.opensymphony.oscache.web.filter.cachefilter</filter-class>
          <init-param>       
           <param-name>time</param-name>
                    <param-value>60</param-value>  
           </init-param>   
          <init-param>                           
          <param-name>scope</param-name>
                     <param-value>session</param-value>
          </init-param>
          </filter>
          <filter-mapping>
          <filter-name>cachefilter
          </filter-name>
            <url-pattern>*.jsp</url-pattern>
          </filter-mapping>
</web-app>

其中60s,是失效时间,在mysql的person中增加一条记录,发现已对/testcache.jsp,/testcache2.jsp页面进行缓存,页面不变化,60s后页面变化.

扫描关注微信公众号