gpt4 book ai didi

java - 使用 servlet 3.0 添加动态 servlet 会抛出异常

转载 作者:搜寻专家 更新时间:2023-10-31 19:50:07 25 4
gpt4 key购买 nike

我需要在运行时创建添加 servlet。当我运行以下代码时。

protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException 
{

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {

out.println("<html>");
out.println("<head>");
out.println("<title> URI out</title>");
out.println("</head>");
out.println("<body>");
Integer generatedKey = Math.abs(randomiser.nextInt());
out.print(generatedKey);

createServlet(Integer.toString(generatedKey),request.getServletContext());

} finally {
out.println("</body>");
out.println("</html>");
out.close();
}
}


private void createServlet(String generatedKey, ServletContext servletContext) {
String servletMapping = "/"+generatedKey;

ServletRegistration sr = servletContext.addServlet(generatedKey, "com.path.lbs.servlets.testDynamic");

sr.setInitParameter("keyname", generatedKey);
sr.addMapping(servletMapping);

}

我收到以下错误。

java.lang.IllegalStateException: PWC1422: Unable to configure mapping for servlet 1114600676 of servlet context /123-LBS, because this servlet context has already been initialized

是否无法在运行时添加新的 servlet,即在 Servlet 上下文初始化之后,还是我做错了什么?

最佳答案

Is it impossible to add new servlets at runtime i.e. after the Servlet Context is initialised?

没错。您需要在 ServletContextListener#contextInitialized() 中完成.

@WebListener
public class Config implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// Do it here.
}

@Override
public void contextDestroyed(ServletContextEvent event) {
// ...
}
}

但是,对于您的特定功能需求,结合命令模式的单个 Controller servlet 更适合。然后,您可以在运行时添加命令(操作)并根据请求 URI 对其进行拦截。另见 my answer on Design Patterns web based applications开始。

关于java - 使用 servlet 3.0 添加动态 servlet 会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4490648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com