2008-09-16 5 views
0

문제는 간단하지만 이미 조금 어려움을 겪고 있습니다.임베디드 서블릿 엔진 인스턴스 생성 서블릿을 열심히 만드는 방법은 무엇입니까?

Server server = new Server(8080); 
Context context = new Context(server, "/", Context.NO_SESSIONS); 
context.addServlet(MainPageView.class, "/"); 
context.addServlet(UserView.class, "/signup"); 
server.start(); 

이것은 제티 세계 어디에서나 찾을 수있는 아주 기본적인 코드입니다. Jetty를 서블릿 엔진으로 포함하고 일부 서블릿을 포함하는 응용 프로그램이 있습니다.

일부 서블릿을 인스턴스화 할 때 시작시 많은 작업이 필요합니다. 추가 설정 파일을 읽고 데이터베이스에 연결하는 등 –을 말하십시오. 서블릿 엔진이 모든 서블릿을 열심히 인스턴스화하도록 만들면 어떻게하면 첫 번째 사용자 요청이 아닌 모든 선행 작업을 수행 할 수 있습니까?

답변

2

Guice make의 Justin의 옵션을 사용하는 것이 왜 효과가 없는지 잘 모르겠습니다. 정확히 주사를 맞은 것은 무엇입니까? 이것이 저스틴이 위에서 쓴 것과 매우 유사하기 때문에 이것이 당신을 전혀 도울 지 확신하지 못합니다. 그러나 만약 당신이 그것을 그렇게한다면, 부두는 실제로 예시를 할 것입니다.

Context context = new Context(server, "/", Context.NO_SESSIONS); 
ServletHolder mainPageViewHolder = new ServletHolder(MainPageView.class); 
// Do this to force Jetty to instantiate the servlet 
mainPageViewHolder.getServlet(); 
context.addServlet(mainPageViewHolder, "/"); 
+0

서블릿의 전용 필드가 주입됩니다. 이 대답은 더 좋지만, 나는 아직도 설정할 수있는 알 수없는 누락 된 국기가 있기를 바래 왔으며, 열심히 모든 것을 실증 할 것입니다. 어쨌든, 나는 그걸로 살아야 할 것 같아. – Marcin

0

ServletHolder를 사용하는 Context.addServlet 오버로드를 사용합니다. ServletHolder는 Class 또는 Servlet 인스턴스를 받아들이는 클래스입니다.

Servlet myServlet = new MyServlet(); 
ServletHolder holder = new ServletHolder(myServlet); 
context.addServlet(holder, "/"); 

이것은 부두 6을 전제로합니다. 부두 7에도 적용됩니다.

+0

저스틴, 그 트릭을 할 것입니다. 그러나 숨겨진 Guice 기반 종속성 삽입과 같은 몇 가지 이유로 서블릿을 열렬하게 인스턴스화하려면 부두가 필요합니다. – Marcin