您现在对其进行编码的方式 - 每次调用 getMap() 方法时都会重新创建 testMap。我不确定“如果调用了动作类”是什么意思-如果在您的类上调用了 getMap() 方法,那么是的-如果调用了其他方法而不会以某种方式调用 getMap() , 那就不要。
我应该将地图加载为静态吗?加载这个地图静态有什么好处?如果我要调用这个 Action 类 100 次,这张地图只会被加载一次?
如果您将 Map引用设为静态,它将在类级别存在一次。您也可以静态加载地图,这只会发生一次。仅当您不打算更改地图的内容时才应该这样做,因为您可能会遇到线程问题,或者如果地图不断将数据添加到其中但从未删除,则必须处理确定何时清空地图, ETC。
也不是每次动作类调用我都可以访问这个地图。如果我调用这个动作类 100 次只有 40 次,可能需要访问这个地图。
如果您担心您可能永远不需要地图,您可能需要研究延迟加载 - 使地图成为静态引用,但始终通过检查地图是否已创建的静态方法访问它 - 如果没有在第一次需要时而不是在启动时创建。虽然在这种情况下它可能无关紧要。
我必须在动作类中定义这个地图
我认为这更多的是假设而不是要求 - 因为这是一个网络应用程序 - 更好的解决方案可能是在启动时将 Map 放入应用程序范围 - 就像静态一样,只是它不依赖于类。
您可以添加一个ServletContextListener来监听您的 Web 应用程序的启动和停止,并通过调用将 Map 添加到 Application 范围
servletContext.setAttribute("mapKey", testMap)
然后在您的操作中(或您的网络应用程序中的其他任何地方)您可以调用
servletContent.getAttribute("mapKey")
并访问您的地图。