在JSP页面上从ServletContext获取属性

11

我该如何在JSP页面从ServletContext对象中找到我的属性?

我之前在以下位置设置了它:

public class MyServletContextListener implements ServletContextListener{

private static final Logger logger = LoggerFactory.getLogger(MyServletContextListener.class);

@Override
public void contextInitialized(ServletContextEvent event) {
    logger.info("Init gameEngine in listener");
    Engine engine = Engine.getInstance();
    event.getServletContext().setAttribute("engine", engine);
}

@Override
public void contextDestroyed(ServletContextEvent event) {

}}

现在想要进入JSP页面。 也许可以使用${pageContext.servletContext.attributeNames}实现吗?

1个回答

19

使用JSTL,您可以直接在JSP中获取应用程序对象。

${applicationScope['attributeNames']}

通过使用这个表达式,你可以直接在jsp中获取你的应用程序级对象。

或者

也可以使用 scriptlet 在jsp中获取应用程序对象, 如果你正在运行web_app版本3.0并且具有Servlet 3.0 API,则可以像下面的示例中所示直接从HttpServletRequest中获取ServletContext对象:

<%

     ServletContext sc = request.getServletContext();
     sc.getAttribute("attributeName");

%>

但是当你使用Scriptlet来获取应用程序对象时,你必须强制转换应用程序对象,所以使用JSTL比Scriptlet代码更好。

阅读更多:


3
谢谢回答。我使用了 ${applicationScope.engine.rooms},对我很有效!) - Turlife_07
request.getServletContext()没有这个方法;为什么? - shareef
请使用 request.getSession().getServletContext() - DFB
@shareef,这是因为您正在尝试在Servlet API <3.0上执行此操作,但是getServletContext()方法仅在Servlet API 3.0中添加到HttpServletRequest中。 - zb226

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接