【问题标题】:From within a servlet how do you access a variable set inside a corresponding servlet filter?如何从 servlet 中访问相应 servlet 过滤器中的变量集?
【发布时间】:2011-04-14 19:16:34
【问题描述】:

我想使用以下过滤器来打开和关闭持久性管理器。

public final class PersistenceFilter implements Filter {
    private static final PersistenceManagerFactory persistenceManagerFactory
        = JDOHelper.getPersistenceManagerFactory("transactions-optional");

    private static PersistenceManagerFactory factory() {
        return persistenceManagerFactory;
    }

    private static ThreadLocal currentManager = new ThreadLocal();

    public static PersistenceManager getManager() {
        if (currentManager.get() == null) {
            currentManager.set(factory().getPersistenceManager());
        }
        return currentManager.get();
    }
    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        PersistenceManager manager  = null;
        try {
            manager = getManager();
            //Optional: allow all persistent objects implementing a custom interface
            //to be notified of when they are saved and loaded.
            manager.addInstanceLifecycleListener(new PersistHookListener(), PersistHooks.class);
            chain.doFilter(req, res);
        } finally {
            if (manager != null) {
                manager.flush();
                manager.close();
            }
        }
    }
    @Override
    public void init(FilterConfig arg0) throws ServletException {}
    @Override
    public void destroy() {}
}

我不知道如何从在此过滤器之后调用的相应 servlet 内部访问 manager 变量。

【问题讨论】:

    标签: java google-app-engine servlets scope servlet-filters


    【解决方案1】:

    在过滤器中,将管理器作为请求属性:

    request.setAttribute("persistenceManager", manager);
    

    然后,在 servlet 中,可以通过以下方式访问它:

    PersistenceManager manager = 
         (PersistenceManager) request.getAttribute("persistenceManager");
    

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 2014-03-20
      • 2014-02-22
      • 2010-11-26
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多