2013-08-06 2 views
0

웹 응용 프로그램에서 MANIFEST.MF를 읽으 려합니다. (이전에 추가 속성을 채웠습니다). JSF에서는 FacesContext를 사용하여 경로 값을 쉽게 검색 할 수있었습니다. 정적 호출을 사용하여 Struts2에서 어떻게 동일한 작업을 수행합니까?Struts2에서 MANIFEST.MF 경로를 얻으십시오.

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='@[email protected]()'/> 
+0

여기서는 MANIFEST.MF 파일의 위치입니다. 질문에 그걸 명시하지 않았습니까? –

+0

왜 매니페스트 파일을 원합니까? –

+0

빌드 과정에서 추가 될 수있는 버전 정보 나 기타 빌드 관련 정보 (예 : 자식 분기 또는 변경 세트 해시, 빌드 시간 등)를 읽을 때 유용합니다. –

답변

0

당신이 javax.servlet.ServletContextweb application에 무엇인지 이해한다면, 당신은 ServletContextAware 인터페이스를 구현하여 액션 클래스에서 그것을 얻을 수 있습니다. 이 인터페이스 (예 : javax.servlet.ServletContext)는 getContextPath(), getRealPath(String path), getResource(String path), getResourceAsStream(String path) 등과 같은 API를 제공합니다.이 API는 원하는 것을 얻을 수 있도록 도와줍니다. 더 나은 이해를 얻으려면이 API에서 javadoc을 읽으십시오. 인터페이스를 구현하는 방법은 Struts2는 Uchenna에 의해 설명 된 바와 같이 ServletContext에 대한 액세스 권한을 얻을 수있는 깨끗한 방법을 제공하지만 당신이 할 수있는 많은 방법이있다

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

입니다.

하나의 방법은 ServletContextAware을 구현하여 ServletContext

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

당신이 얻을 수있는 액세스에 액세스 할 수 있습니다. 또 다른 방법은 스티븐 코멘트에서 언급 한 바와 같이

InputStream is= getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF"); 

처럼 getResourceAsStream()의 도움으로 InputStream로 접근하는 것입니다, getResourceAsStream()getRealPath() 때문에이 불발 전쟁 널 (null)이 될 수 좋아한다.

+0

'getResourceAsStream()'을 사용하는 것이 더 낫습니다. 'getRealPath()'는 응용 프로그램이 코드되지 않은 전쟁에서 실행중인 경우 null을 반환 할 수 있습니다. –

+0

@StevenBenitez : 너와 동의해라, 간과 한 포인터 주셔서 감사. –

관련 문제