如何从 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连接数据库查询班级及相应班级学生

如何从我的 servlet 类访问放置在 /tmp 文件夹中的 sqlite db 文件?

servlet映射路径

如何从作为 Web 应用程序插件一部分的 servlet 中访问 .js 文件?

如何在从 servlet 检索的 JSP 数据中显示数组数组。尝试从 JSP 访问时,记录不显示任何内容

Servlet response原理