0

Web アプリケーションから 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

javax.servlet.ServletContexta の aが何であるかを理解していればweb application、インターフェイスを実装することでアクション クラスでそれを取得できServletContextAwareます。このインターフェイスは、つまり、、、などのAPIjavax.servlet.ServletContextを提供します。この API は、必要なものを取得するのに役立ちます。この API を読んで理解を深めてください。インターフェイスを実装する方法は次のとおりです。getContextPath()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 は、 でServletContext 説明されているように、 にアクセスするクリーンな方法を提供しUchennaます。

これにアクセスする 1 つの方法

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");

スティーブンがコメントで述べたように、不発の戦争では null になる可能性があるためgetResourceAsStream()、 prefer します。getRealPath()

于 2013-08-06T11:18:48.697 に答える