2017-02-27 2 views
-1

나는 지불 게이트웨이로부터 return url을 가진 하나의 변수를가집니다.리스너의 HttpServletRequest 객체에 액세스

private static String response_url = "http://1.1.1.1:8001/abc/xyz.html"; 
// private static String response_url = "http://www.something.com/xyz.html"; 

첫 번째 변수는 프로덕션 환경의 변수이고, 변수에 주석을 추가하고 주석을 제거하고 환경 변수에 따른 주석을 제거합니다.

<action name="viewResponseFile" class="controller.RAction" method="viewResponseFile"> 
    <result name="success">somepage.jsp</result> 
</action> 

컨트롤러는 xyz.html에 매핑되고 그것은 payment gateway에서 반환 URL입니다. 이제 일반화하고 싶습니다.

기존 리스너 클래스에서 해당 변수를 설정하려고합니다.

<listener> 
    <listener-class>in.com.Initializer</listener-class> 
</listener> 

나는 RequestURI를 얻을 수 ServletRequestAware를 사용하여 HttpServletRequest을 만들려고하지만 성공이 없었다.

public class Initializer implements ServletContextListener 
{ 
    ServletContext context; 


    public Initializer() 
    { 

    } 

    public void contextInitialized(ServletContextEvent contextEvent) 
    { 
     // set-up code 
    } 

    public void contextDestroyed(ServletContextEvent contextEvent) 
    { 

    } 

} 

어떻게 이러한 요구 사항을 충족시킬 수 있습니까?

답변

1

분명히 댓글을 달고을 주석 처리하는 것은 실행 가능한 방법이 아니며, 작업과 관련되어 심각한 실수를 유발할 수 있습니다.

하지만 빌드 프로세스 중에 .properties 파일을 제공하는 것이 좋지 않다는 것을 고려해야합니다. 자동화 된 경우에도 다른 환경간에 빌드가 다르기 때문입니다. dev.properties에 속성을 추가하고 prod.properties에 해당 속성을 추가하는 것을 잊어 버리면 어떻게 될까요? 다른 문자 인코딩을 사용하는 편집기로 다른 사용자가 파일을 수정하면 어떻게 될까요?

가장 좋은 것은 방법은 이러한 매개 변수를 외부에 만드는 것입니다.

웹 응용 프로그램을 통합 안

, 대신 환경에 물어 봐야하십시오 구성 테이블을 데이터베이스에 등 환경 변수 세트를 ...

이 방법 WAR는 항상과 같으며 서로 다른 값이 다른 서버에서 제공됩니다 (올바른 위치에 올바른 변수를 작성하는 것은 시스템 관리자의 책임이지만 정상입니다).

그러면 한 환경에서만 발생하는 오류는 코드 문제가 될 수 없습니다.

+0

환경 변수 접근 방식의 경우, N 개의 서버에 환경을 설정해야합니다. DB 접근 방식의 경우 단일 URL에 대한 테이블 생성이 가능하지 않습니다. Listener 클래스에서'localhost : 8080 \ project_name \'(동적 호스트 이름)을 선택할 수있는 방법이 없습니까? – piechuckerr

+0

일반적으로 웹 응용 프로그램은 dev와 prod 환경 사이에 다른 설정이 많이 있거나 환경간에 동일하지만 나중에 변경 될 수 있습니다. 따라서 테이블이나 env 변수에서 매개 변수화됩니다. BTW, 단일 URL의 경우 상대 참조 헤더에서 * referer *를 읽을 수 없습니까? –