2013-01-16 2 views
6

첫 번째 요청보다는 서버 시작시 struts2 작업을 실행해야합니다.Struts2를 사용하여 서버를 시작할 때 액션을 어떻게 실행합니까?

+0

서버 시작시 ACTION을 왜 호출해야합니까? – DarkHorse

+0

응용 프로그램 범위에 저장된 일부 데이터를 미리 초기화해야 사용자가 보낸 첫 번째 요청 이후로 해당 데이터에 액세스하는 아약스 요청이 빠르게 응답해야합니다. – LNyarla

답변

4

응용 프로그램 시작시 데이터를로드하는 것이 일반적인 작업입니다. 웹에서 몇 가지 예를 찾을 수 있습니다. 다른 답변에서 말했듯이, ServletContextListener (Struts2에만 해당)를 구현해야합니다 ... read a great example here 수 있습니다.

여기서 중요한 것은

은 작업 개념을 이해하는 것입니다 :

Struts2 MVC (모델 뷰 컨트롤러) 프레임 워크에서, ActionController합니다 ( Model의 및 부품)입니다

.

Action s는 Client에서 오는 Request에 의해 호출되며 (모든 요청에서 하나의 액션이 만들어 지므로 스레드로부터 안전합니다).

이것은 클라이언트가 필요하다는 것을 의미합니다. 보통은 브라우저를 클릭하고 PC 앞에서 사람을 의미합니다 ... 그러면 클라이언트 호출이 자동 서버 측 작업을 수행하는 올바른 방아쇠가 아닙니다. 공유 객체에.

물론 lazy-initialitazion의 일부 양식을 구현할 수 있습니다 (예 : lazy-initialitazion).사용자 정의 인터셉터의 도움으로) 첫 번째 사용자가 Application 범위에서 어떤 것을 설정하고 다른 사용자가 이미 채워진 객체를 검색 할 수 있도록하는 것이 가장 좋은 방법은 아닙니다 (동시성을 처리해야합니다 초기에 서버를 시작할 때 밤에 서버가 수행 할 수있는 작업을 기다리는 사용자가 첫 번째 사용자가됩니다.

2

ServletContextListener를 작성하면 웹 응용 프로그램 당 하나만 사용할 수 있으며 응용 프로그램이 배포되면 instatiiated됩니다. 여기

은 서블릿과 JSP의 시작에 post

1

로드 당신이 서버가 시작될 때로드 할 페이지를 요청할 수 있습니다

아래와 같이 존재한다. 이것은 일반적으로 JSP 파일이

<servlet> 
<servlet-name>login</servlet-name> 
<jsp-file>/login.jsp</jsp-file> 
<load-on-startup>1</load-on-startup> 
</servlet> 

처음 명중에 컴파일 web.xml 파일을 통해 이루어집니다. 이제 코드는 첫 번째 히트를 기다리지 않고 jsp 파일을 사전 컴파일합니다.

For struts2 you can change programatically in web.xml 

<listener> 
    <listener-class>your listener class</listener-class> 
</listener> 

은 당신

Loadonstart up에게 도움이 될 수있는이 링크를 참조하십시오. 당신이 당신의 웹 응용 프로그램, 일명 서블릿 컨텍스트가 처음 시작될 때 실행하는 몇 가지 코드를 원하는 경우

+0

당신은 설명과 링크 (그리고 결국 코드)를 주어야합니다 :) 외부 사이트가 다운되면 독자가 대답을 이해할 수 없기 때문에 링크 만 사용하는 것은 권장하지 않습니다 –

1

는, 당신은이 기술에 의해 제공되는 후크를 활용해야한다. Servlet API는 웹 애플리케이션의 다양한 라이프 사이클 단계에서 코드를 실행하는 데 사용할 수있는 라이프 사이클 후크를 제공합니다. 모든 Struts 2 애플리케이션은 웹 애플리케이션 인 서블릿 API이기 때문에 직접 활용할 수 있습니다.

ServletContextListener 인터페이스는 init 후크 방법을 제공합니다. 이 인터페이스를 구현하고 구현을 web.xml에 등록하기 만하면됩니다.

더 많은 Struts 2가 필요하다면 Struts 2 API 자체에서 무언가를 활용하는 것이 좋습니다.

관련 문제