获取Struts2中的MANIFEST.MF路径
我想从我的web应用程序中读取MANIFEST.MF(我以前用附加属性填充了它)。在JSF中,我可以使用FacesContext轻松检索该路径值。如何使用静态调用实现Struts2的相同功能获取Struts2中的MANIFEST.MF路径,struts2,Struts2,我想从我的web应用程序中读取MANIFEST.MF(我以前用附加属性填充了它)。在JSF中,我可以使用FacesContext轻松检索该路径值。如何使用静态调用实现Struts2的相同功能 File manifestFile = null; //JSF Context String homePath = "EMPTY"; //homePath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/"); /
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()'/>
如果您了解
web应用程序中的javax.servlet.ServletContext
是什么,您可以通过实现ServletContextAware
接口在action类中获得它。此接口即javax.servlet.ServletContext
提供了类似getContextPath()
,getRealPath(字符串路径)
,getResource(字符串路径)
,getResourceAsStream(字符串路径)
等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;
}
}
有很多方法可以做到这一点,尽管Struts2提供了一种干净的方式来访问ServletContext
,如Uchenna
所述
有一种方法可以访问此文件
String relativePath = "/META-INF/MANIFEST.MF";
String diskPath = getServletContext().getRealPath(relativePath );
File file = new File(diskPath);
您可以通过实现ServletContextAware
来访问ServletContext
。
另一种方法是在getResourceAsStream()
like的帮助下,以InputStream
的形式访问它
InputStream is= getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF");
正如Steven在评论中提到的,更喜欢getResourceAsStream()
,因为getRealPath()
对于未爆炸战争可以为空。其中是MANIFEST.MF
文件的位置。您在问题中没有指定这一点?为什么需要清单文件?它对于读取版本信息或生成过程中可能添加的任何其他生成特定信息(例如,git分支或变更集哈希、生成时间等)非常有用。您最好使用getResourceAsStream()
<代码>getRealPath()
如果您的应用程序在未爆炸的战争中运行,则可以返回null。@Stevenbeintez:同意您的看法,谢谢您的指针,因为我忽略了它