Java 如何在jsp/struts2中访问servlet上下文?

Java 如何在jsp/struts2中访问servlet上下文?,java,jsp,Java,Jsp,我有一个HashMap,在启动时放在ServletContext上 //During application-startup: //getProperties() returns HashMap<Long, ClientProperties> context.setAttribute("clientProps", clientManager.getProperties()); ClientProperties是一个具有5个属性的POJO,我需要在jsp中访问这些属性。 基本

我有一个HashMap,在启动时放在ServletContext上

//During application-startup:
//getProperties() returns HashMap<Long, ClientProperties>
context.setAttribute("clientProps", clientManager.getProperties());    
ClientProperties是一个具有5个属性的POJO,我需要在jsp中访问这些属性。 基本上,我需要通过HashMap键获得正确的POJO,并在jsp中访问其属性

例如,POJO属性之一是clientLogo 在我的jsp中,我现在有: alt=徽标>

我需要用POJO的clientLogo属性替换logo文件的路径。 应该从会话中存储的用户对象中提取要使用的HashMap键。可以如下方式检索:${sessionScope['user'].clientId}

有什么想法吗? 如果有必要,请使用struts2和spring。要从servlet上下文中获取属性foo,可以使用与从会话中获取属性foo相同的语法,但将sessionScope替换为applicationScope

但是这里有太多嵌套的东西,所以应该定义变量:

<c:set var="map" value="${applicationScope['clientProps']}"/>
<c:set var="mapKey" value="${sessionScope['user'].clientId}"/>
<c:set var="pojo" value="${map[mapKey]}"/>
<c:set var="clientLogo" value="${pojo.clientLogo}"/>

<c:url value="${clientLogo}"/>

请注意,这通常是您不必在视图中执行的一种艰苦工作。在控制器中用Java实现对图像路径的检索,并将其作为操作/表单的属性提供,然后直接从视图中访问它。

谢谢您的回答。非常有帮助!我在视图中这样做的原因是因为这是header.jsp,由sitemesh修饰。jsp可以访问struts操作属性吗?我不明白为什么不能。但我对Struts2没有太多经验,也不知道你的应用程序是如何配置的。