如何从 servlet 中访问相应 servlet 过滤器中的变量集?
Posted
技术标签:
【中文标题】如何从 servlet 中访问相应 servlet 过滤器中的变量集?【英文标题】:From within a servlet how do you access a variable set inside a corresponding servlet filter? 【发布时间】: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
变量。
【问题讨论】:
【参考方案1】:在过滤器中,将管理器作为请求属性:
request.setAttribute("persistenceManager", manager);
然后,在 servlet 中,可以通过以下方式访问它:
PersistenceManager manager =
(PersistenceManager) request.getAttribute("persistenceManager");
【讨论】:
以上是关于如何从 servlet 中访问相应 servlet 过滤器中的变量集?的主要内容,如果未能解决你的问题,请参考以下文章
如何从我的 servlet 类访问放置在 /tmp 文件夹中的 sqlite db 文件?
如何从作为 Web 应用程序插件一部分的 servlet 中访问 .js 文件?