Java 在";“html级别”;

Java 在";“html级别”;,java,jsp,caching,Java,Jsp,Caching,我想在“html级别”实现一个jsp缓存。我的想法是: for each request{ if(exists("/cache/<product_id>/<product_name>.html")){ response "/cache/product/1234/cat.html" }else{ response database.getCat("1234") } } exists(String path){ if(!file(path)

我想在“html级别”实现一个jsp缓存。我的想法是:

for each request{
  if(exists("/cache/<product_id>/<product_name>.html")){
    response "/cache/product/1234/cat.html"
  }else{
    response database.getCat("1234")
  }
}

exists(String path){
   if(!file(path)){
     return false;
   }else{
      if((currentDate = file(path).createdAt) > CACHE_TIME){
         return false
      }else{
          return true
      }
   }
}
每个请求的
{
如果(存在(“/cache/.html”)){
响应“/cache/product/1234/cat.html”
}否则{
响应数据库.getCat(“1234”)
}
}
存在(字符串路径){
如果(!文件(路径)){
返回false;
}否则{
if((currentDate=file(path).createdAt)>CACHE\u TIME){
返回错误
}否则{
返回真值
}
}
}
所以,正如您所看到的,只有在页面自CACHE_时间以来未显示时,才能转到数据库(或另一个繁重的进程)

例如:

用户1转到 系统转到数据库并生成一个html文件(products-1234-cat.html) 用户1查看页面 立即出现用户2并转到同一url 系统发现缓存存在,所以使用products-1234-cat.html(无数据库,无繁重的进程)进行响应

我如何实现这一点


我希望我清楚地知道我想要什么

如果您使用Apache,那么使用mem_缓存模块或类似模块会更好

但是,如果您确实有充分的理由使用应用程序级缓存,那么您应该采用不同的方式。除非您添加一些额外的逻辑(我指的是在创建那些缓存的html文件时的竞速条件),否则您想要的方式将不是线程安全的


我将向JSP标记库(customtag:cache)添加一个新的自定义标记,并将您的内容包装到该标记中。根据缓存ttl或其状态(温暖、寒冷),我将呈现缓存标记中的实际内容或其缓存版本(可存储在HashMap中)。

如果使用Apache,最好使用mem_缓存模块或类似模块

但是,如果您确实有充分的理由使用应用程序级缓存,那么您应该采用不同的方式。除非您添加一些额外的逻辑(我指的是在创建那些缓存的html文件时的竞速条件),否则您想要的方式将不是线程安全的


我将向JSP标记库(customtag:cache)添加一个新的自定义标记,并将您的内容包装到该标记中。根据缓存ttl或其状态(温暖、寒冷),我将呈现缓存标记中的实际内容或其缓存版本,这些内容可以存储在HashMap中。

只是澄清一下-您指的是应用服务器上的服务器端缓存?@home是的,我是,可能在应用服务器上调整了一些东西。您是否有web服务器保护您的应用服务器(例如apache http服务器)。。。这可能是实现缓存的最简单的方法?只是澄清一下-您指的是应用程序服务器上的服务器端缓存?@home是的,可能是在app server上调整了一些东西。您是否有web服务器保护您的应用程序服务器(例如apache http服务器)。。。这可能是实现缓存的最简单方法?