스트럿츠 (Struct) 기반 xml 을 WAS 재구동없이 자동으로 로드하기 |
스트럿츠 기반으로 개발을 할 때 action 관련 xml 을 수정하거나 메시지 리소스등을
수정하게 되면 WAS 를 재가동해야되는 불편함이 있다. 수정할때 마다 재가동해야하니
시간과 인력을 엄청나게 낭비하게 되며 운영에 반영해야 되는 경우 어려움이 있다.
사람이 쓰지 않는 새벽에 반영해야 된다던지 잘못 올렸다가 금방수정할 수도 없다.
WAS 를 재로딩할려면 시간이 꽤 걸리기 때문이다. 그러나 이런 불편함을 해소할수 있는
방법이 있다.
전체 구현 절차는 ActionServlet 을 상속받아 사용자 정의 ActionServlet 을 만든다.
거기에 ActionServlet 의 init() 함수를 호출하여 초기화 하고 getRequestProcessor()
함수를 호출하여 초기화 내용을 반영한다. getRequestProcessor 호출하지 않으면
이전 정보를 반영하기 때문에 재로딩 되지 않는다.
1. reload.do 로 호출할 클래스
단순히 호출만 하는 의도로 제작이 된것이다.
public class ReloadStructsConfigAction extends ActionServlet { public ActionForward execute ( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return null; } }
2. ActionServlet 클래스 제작
어플리케이션의 모든 요청을 처리하기 위한 ActionServlet 를 사용자 정의 클래스로
만들어서 web.xml 에 설정한다. 당연히 ActionServlet 클래스를 상속해서 만든다.
소스를 보게 되면 reload.do 가 호출되면서 재로딩 로직이 가동되게 되어있다.
이전소스들에 보면 RequestUtils.selectModule ( request, getServletContext() ); 처럼
RequestUtils.selectModule 로 처리하였는데 이것은 Struct 1.2 부터 deprecated 되었다.
곧 사용하지 않을 함수라는 것이다. 이것은 ModuleUtils.getInstance().selectModule();
로 교체를 하였다public class ReloadServlet extends ActionServlet { protected void process(HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException { String uri = request.getRequestURI(); if ((uri.indexOf(“reload.do”) != (-1))) { this.removeAttribute(); // Attribute 삭제 this.init(); ModuleUtils.getInstance().selectModule(request, getServletContext()); ModuleConfig config = getModuleConfig(request); // Request 초기화를 하지 않으면 재반영 되지 않는다. // 이전에 내용을 가져오기 때문이다. getRequestProcessor(config).init(this, config); RequestDispatcher dispatcher = request.getRequestDispatcher(“/index.jsp”); dispatcher.forward(request, response); } else { super.process(request, response); } } private void removeAttribute(){ ServletContext context = getServletContext(); Enumeration applications = context.getAttributeNames(); List contextAttributes = new ArrayList(); while (applications.hasMoreElements()) { String attributeName = (String) applications.nextElement(); if (attributeName.startsWith(“org.apache.struts.”)) { contextAttributes.add(attributeName); } } for (int i = 0; i < contextAttributes.size(); i++) { context.removeAttribute((String) contextAttributes.get(i)); } } }
3. web.xml 에 요청을 처리할 사용자 정의 ActionServlet 을 정의한다.
action com.ReloadServlet
4. struct-config.xml 에 reload.do 를 호출할 Action 을 설정한다.
클래스는 위에서 만든 ReloadStructsConfigAction 로 링크를 걸면 된다.
'자바(JAVA)' 카테고리의 다른 글
Spring 환경에서 JSON 사용시 한글 Encoding 에러 처리 (0) | 2012.09.04 |
---|---|
Java 를 알기위한 기본 용어 정리와 관계도 (1) | 2012.03.18 |
JSTL 의 변수 설정기본 정보와 예제들 (0) | 2010.12.13 |
weblogic.xml 설정 스크립트에 대한 내용 (0) | 2010.08.10 |
자바 프로젝트 jar -> exe 로 바꿔주는 JSmooth (12) | 2010.08.02 |
자신만의 filter class 만들어서 적용하기 (1) | 2010.08.02 |
JSP 페이지에서 JSTL 에러 : According to TLD or attribute directive in tag file, (0) | 2010.08.02 |
JSP 페이지에서 contentType with different values 에러가 날 때 (0) | 2010.08.02 |