2012-02-09 27 views
5

Tôi đã nhúng Jetty và tôi đang cố đặt tham số khởi tạo.Jetty setInitParameter KHÔNG khởi tạo bất kỳ tham số

Lớp chính Main tạo một servlet Cgi mở rộng CGI.

Trong chính, tôi có đoạn mã sau:

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); 

Trong Cgi, tôi kiểm tra xem các thông số:

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

Mỗi lần, nó in ra null cho getInitParameter cuộc gọi. Sau đó, khi Cgi thực sự CẦN sử dụng này, nó không, bởi vì nó không được thiết lập. Tại sao điều này có thể xảy ra?

Trả lời

9

Bạn đang đặt InitParameter trên ServletContextHandler, nhưng bạn nên đặt nó trên ServletHolder.

(Nó hơi khó hiểu, tôi biết)

+0

Cảm ơn bạn !! Điều này đã khiến tôi bối rối như những tuần vừa qua điên rồ – joslinm

2

Bạn đã thiết lập một tham số bối cảnh init, không phải là một tham số servlet init. Vì vậy, bạn cần lấy nó như một tham số init context thay vì tham số init servlet.

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

Ngoài ra, bạn có thể dĩ nhiên cũng thiết lập nó như một tham số servlet init thay vào đó, nhưng cách này các tham số sẽ chỉ có sẵn cho các servlet liên quan, không phải cho tất cả các servlets khác chạy trong bối cảnh tương tự. Điều này có thể hoặc không thể là những gì bạn muốn, tùy thuộc vào yêu cầu chức năng cụ thể.

Các vấn đề liên quan