2012-02-09 11 views
5

He incorporado Jetty, y estoy tratando de establecer un parámetro de inicialización.Jetty setInitParameter NO está inicializando ningún parámetro

La clase principal principal crea un servlet de cgi que se extiende CGI.

Dentro principal, tengo el siguiente código:

ServletContextHandler context2 = new ServletContextHandler(ServletContextHandler.SESSIONS); 
context2.setContextPath("/cgi"); 
context2.setResourceBase("./cgi-bin"); 
context2.setInitParameter("commandPrefix", "perl"); 
context2.addServlet(new ServletHolder(new Cgi()), "/"); 
server.setHandler(context2); 

Dentro cgi, puedo comprobar para ver el parámetro:

public void init(ServletConfig servletConfig) throws ServletException { 
     System.out.println(servletConfig.getInitParameter("commandPrefix")); 
     super.init(servletConfig); 
} 

Cada vez, imprime nulo para el getInitParameter llamada. Entonces, cuando Cgi realmente NECESITA usar esto, no lo hace, porque no está configurado. ¿Por qué podría estar pasando esto?

Respuesta

9

Está configurando el parámetro InitParameter en el ServletContextHandler, pero debe configurarlo en el ServletHolder.

(Es un poco confuso, lo sé)

+0

Gracias! Esto me ha estado confundiendo como loco después de dos semanas – joslinm

2

Usted ha fijado un parámetro de contexto de inicio, no un parámetro init del servlet. Por lo tanto, debe recuperarlo como un parámetro de inicio de contexto en lugar de como un parámetro de inicio del servlet.

System.out.println(servletConfig.getServletContext().getInitParameter("commandPrefix")); 

Como alternativa, puede, por supuesto, también se establece como un parámetro de inicialización del servlet en su lugar, pero de esta manera el parámetro sólo estará disponible para el servlet asociado solamente, no a todos los demás servlets se ejecutan en el mismo contexto. Esto puede o no ser lo que quiera, dependiendo del requisito funcional concreto.

Cuestiones relacionadas