【问题标题】:best approach to implement getRealPath()实现 getRealPath() 的最佳方法
【发布时间】:2013-06-04 13:09:03
【问题描述】:

我正在研究 struts 2.0 。我正在设计一个网络应用程序。 我在我的应用程序中使用 Jasper Report。我想访问我的操作类中的*.jrxml 文件。我不想为文件提供硬编码路径。因此,为了动态获取路径,我用谷歌搜索并得到了可以使用getRealPath() 方法获取路径的解决方案。但我发现了两种实现方式:

  1. 使用HttpSession 获取ServletContext 的对象并使用ServletContext 对象的getRealPath() 方法。 像这样:

    HttpSession session = request.getSession();
    String realPath = session.getServletContext().getRealPath("/");
    
  2. 第二种方法直接使用ServletActionContext的静态方法getServletContext()。然后我们可以使用getRealPath() 方法获取应用程序的真实路径。 像这样:

    String realPath = ServletActionContext.getServletContext().getRealPath("/");

请告诉我,以上两者有什么区别,还请告诉我是否有其他方法可以获取路径?

【问题讨论】:

  • 你为什么不把你的文件放到webapp里呢?
  • @AleksandrM 这些文件在我的 webapp 中。但是我们在三个地方部署我们的应用程序。 localhost 开发和测试应用程序,然后演示我们公司的服务器和现场服务器。如果我给出/WebContent/reports/ 位置的硬编码路径,那么每次我将其部署到服务器时都必须相应地更改它。而且我想要一种方式,这样就不用每次都改了。

标签: servlets struts2


【解决方案1】:

两者都不是“更好”,真的,我认为两者都不是特别好。

我可能会尝试在初始化 servlet 中获取上下文路径并将其粘贴到应用程序上下文中,然后执行您的操作 ApplicationAware 并从映射中检索值。

这具有帮助可测试性和删除操作中的静态引用的额外好处。

也就是说,我认为使用第一种方法的额外机制的理由为零:它增加了很多噪音而没有明显的好处;我什至不确定为什么要考虑它。

除非有真正的需要,否则我也会对将你的行为与这样的路径联系起来有点警惕,具体用途是什么?一般来说,您不需要通过路径访问应用内资源。

【讨论】:

  • 我在我的应用程序中使用 JasperReports,访问操作类中的 jasper 文件需要路径,并且我使用路径字符串作为字段,以便我可以访问报告所需的图像.我所做的只是避免给出静态路径。
猜你喜欢
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
相关资源
最近更新 更多