在Struts2中获取MANIFEST.MF路径

时间:2013-08-06 06:26:35

标签: struts2

我想从我的网络应用程序中读取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为空。

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

2 个答案:

答案 0 :(得分:0)

如果您了解javax.servlet.ServletContext中的web application是什么,可以通过实施ServletContextAware界面在操作类中获取它。此接口即javax.servlet.ServletContext提供了getContextPath()getRealPath(String path)getResource(String path)getResourceAsStream(String path)等API。此API可帮助您获得所需内容。尝试阅读此API上的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;
    }

}

答案 1 :(得分:0)

有很多方法可以做到这一点,尽管Struts2提供了一种干净的方式来访问ServletContext,如Uchenna所述。

访问此

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

您可以通过实施ServletContext来访问ServletContextAware。 另一种方法是在InputStream喜欢

的帮助下以getResourceAsStream()的形式访问它
InputStream is= getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF");

正如史蒂文在评论中提到的那样,更喜欢getResourceAsStream(),因为getRealPath()对于未爆战争可能为空。