我已经嵌入了Jetty,我正在尝试设置初始化参数。
主要类 Main 创建一个 Cgi 的servlet,它扩展了CGI。
在 Main 中,我有以下代码:
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);
在 Cgi 中,我查看参数:
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println(servletConfig.getInitParameter("commandPrefix"));
super.init(servletConfig);
}
每次都会为 getInitParameter 调用打印出null。然后,当Cgi确实需要使用它时,它没有,因为它没有设置。为什么会发生这种情况?
答案 0 :(得分:10)
您在ServletContextHandler
上设置了InitParameter,但您应该在ServletHolder
上进行设置。
(我知道这有点令人困惑)
答案 1 :(得分:2)
您已设置了上下文init参数,而不是servlet init参数。因此,您需要将其作为上下文init参数而不是servlet init参数进行检索。
System.out.println(servletConfig.getServletContext().getInitParameter("commandPrefix"));
或者,您当然也可以将其设置为servlet init参数,但这样参数只能用于关联的servlet,而不能用于在同一个上下文中运行的所有其他servlet。根据具体的功能要求,这可能是你想要的,也可能不是你想要的。