2013-08-06 3 views
0

Я хочу прочитать MANIFEST.MF из моего веб-приложения (ранее я заполнял его дополнительными атрибутами). В JSF я мог бы легко получить это значение пути с помощью FacesContext. Как вы делаете то же самое с Struts2, используя статический вызов?Получить путь MANIFEST.MF в 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='@[email protected]()'/> 
+0

Где находится файл 'MANIFEST.MF'. Вы не указали это в своем вопросе? –

+0

Зачем вам файл манифеста? –

+0

Это полезно для чтения информации о версии или любой другой информации, связанной с построением, которая может быть добавлена ​​во время процесса сборки (например, git branch или changeet hash, время сборки и т. Д.). –

ответ

0

Если вы понимаете, что такое javax.servlet.ServletContext находится в web application, вы можете получить его в своем классе действий по реализации ServletContextAware интерфейса. Этот интерфейс, т.е. javax.servlet.ServletContext, предоставляет API, такие как getContextPath(), getRealPath(String path), getResource(String path), getResourceAsStream(String path) и т. Д. Эти API-интерфейсы могут помочь вам получить то, что вы хотите. Попробуйте прочитать javadoc в этом API, чтобы лучше понять. Способ реализации интерфейса является

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; 
    } 

} 
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() может быть пустым для неразорвавшихся войны.

+0

Вам лучше использовать 'getResourceAsStream()'. 'getRealPath()' может возвращать значение null, если ваше приложение работает от невзорвавшейся войны. –

+0

@StevenBenitez: Соглашайтесь с вами, спасибо за указатель, поскольку я его не замечал –

Смежные вопросы