我想从我的网络应用程序中读取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()'/>
答案 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()
对于未爆战争可能为空。