关于项目: 我正在尝试用 Java 编写类似 CMS 的网站。以前我将 PHP 用于此类目的,但现在我需要与现有的用 java 编写的服务器端解决方案紧密集成,因此决定也将 Java 用于网站。目前,为了更容易开发,我为我的项目制作了一些“层次结构”:顶级“服务器”类(在最近的将来它将充满内容和功能,但现在它是空的),下一个子系统,扩展,以及其中任何一个的一部分 - 模块和块。每个都有一些限制和可能性,彼此不可用......也许还有其他方式,但目前我不知道。
我正在做某种缓存,这取决于事实,即我的动态 Web 项目的变量可以一直保存在内存中。例如,“树”代表所有这些元素,从数据库加载并保存在内存中,以及所有下一个请求(例如,扩展将此模块作为子模块 - 用于管理权限)在不询问数据库的情况下进行。
当然,出于这个目的,我需要有一些标志,它会告诉元素,他们的数据已更改,他们需要从数据库中刷新它。单个全局标志(例如在上下文中)很糟糕,而在几乎所有情况下,我都需要刷新单个元素或组。单个元素的标志已经完成,但是......
关于实现: 问题本身。假设我有类模块:
public abstract class Module{
private final static boolean Changed;
public static boolean getChanged(){
return Changed;}
public static void setChanged(boolean newState){
Changed = newState;}
public abstract String getName();
public abstract String getTitle(HttpServletRequest request,
HttpServletResponse response, ServletContext context);}
我有一些模块:
public final class Articles extends Module{
public class Article{...}
private Tree<Article> ArticleList;
public final ArrayList<Article> getArticlesInGroup(int groupID){
if(getChanged())
refreshFromDatabase();
...
}
}
在这里,例如,此标志用于更改某些全局首选项的情况,这可能会更改文章工作 - 例如,数据库上的某些操作,通过查询浏览器或其他执行 - 类“缓存”文章和组树(它没有保留整篇文章 - 只有标题、ID、ParentGroup 或其他一些......
问题本身:在 doGet(...) 中的 servlet Main 中,我执行了下一个代码:
if(request.getParameter("SetModify") && UsersManager.inGroup(currentUser,"Administrator")
Module.setChanged(true);
而且,我检查了,“Module.setChanged(true)”执行成功......但是当谈到文章类中的“getChanged()”时,我得到了错误......
是否有任何方法可以创建静态变量,在所有类中都是静态的,可以扩展它,或者我根本不明白什么?类文章中的案例“Module.getChanged()”也进行了测试 - 结果是一样的......