我正在研究struts 2.0。我正在设计一个Web应用程序。
我在我的申请中使用了Jasper报告。我想访问动作类中的*.jrxml
个文件。我不想给文件提供硬编码路径。因此,为了动态获取路径,我使用Google搜索并获得了可以使用getRealPath()
方法获取路径的解决方案。但是我发现了两个这样做的实现:
使用HttpSession
获取ServletContext
的对象并使用getRealPath()
对象的ServletContext
方法。
像这样:
HttpSession session = request.getSession();
String realPath = session.getServletContext().getRealPath("/");
使用getServletContext()
的静态方法ServletActionContext
直接执行此操作的第二种方法。然后我们可以使用getRealPath()
方法获取应用程序的真实路径。
像这样:
String realPath = ServletActionContext.getServletContext().getRealPath("/");
请告诉我,上述两者之间是否有任何区别,请告诉我是否还有其他方法可以获得这条路径?
答案 0 :(得分:0)
两者都不是“更好”,而且我认为两者都不是特别好。
我可能会尝试在初始化servlet中获取上下文路径并将其粘贴到应用程序上下文中,然后执行您的操作ApplicationAware
并从地图中检索值。
这具有辅助可测试性和删除操作中的静态引用的附加好处。
那就是说,我认为没有理由通过你的第一种方法的额外机制:它增加了很多噪音,没有可感知的好处;我甚至不确定为什么会被考虑。
除非有真正的需要,具体用途是什么,否则我也会谨慎对待这样的道路。通常,您不需要按其路径访问应用内部资源。