0

我想从我的网络应用程序中读取 MANIFEST.MF(我之前用其他属性填充了它)。在 JSF 中,我可以使用 FacesContext 轻松检索该路径值。您如何使用静态调用在 Struts2 中完成同样的任务?

File manifestFile = null;
//JSF Context
String homePath = "EMPTY";
//homePath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/");
// HOW DO I RETRIEVE THE homePath VALUE OF THE WAR FILE?
java.util.jar.Manifest manifest = null;
manifestFile = new File(homePath, "META-INF/MANIFEST.MF");

来自 JSP Struts2 页面的静态调用有效,但不返回任何值,当然,因为它manifestFile是 null。

<s:property value='@ch.ejpd.admin.ManifestReader@getAppVersion()'/>
4

2 回答 2

0

如果您了解 ajavax.servlet.ServletContext在 a 中的含义web application,则可以通过实现ServletContextAware接口在您的操作类中获取它。该接口即javax.servlet.ServletContext提供API,如,,getContextPath()等。该API可以帮助您获得所需的内容。尝试阅读此 API 以获得更好的理解。实现接口的方式是getRealPath(String path)getResource(String path)getResourceAsStream(String path)javadoc

public class MyAction extends ActionSupport implements ServletContextAware
{

    private ServletContext servletCtx;

    public void setServletContext(ServletContext context)
    {
        this.servletCtx = context;
    }

    public String execute()
    {
        //Use the servletCtx variable to perform your logic here
        return SUCCESS;
    }

}
于 2013-08-06T08:02:00.247 回答
0

有很多方法可以做到这一点,尽管 Struts2 提供了一种干净的方式来访问,ServletContextUchenna.

访问此的一种方法

String relativePath = "/META-INF/MANIFEST.MF";
String diskPath = getServletContext().getRealPath(relativePath );
File file = new File(diskPath);

您可以ServletContext通过实施ServletContextAware. 另一种方法是在likeInputStream的帮助下访问它getResourceAsStream()

InputStream is= getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF");

正如史蒂文在评论中提到的,对于未爆炸的战争,prefer getResourceAsStream()sincegetRealPath()可以为空。

于 2013-08-06T11:18:48.697 回答