Way*_*yne 5 java servlets glassfish
我需要在运行时创建添加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);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误.
java.lang.IllegalStateException:PWC1422:无法为servlet上下文/ 123-LBS的servlet 1114600676配置映射,因为此servlet上下文已经初始化
是否无法在运行时添加新的servlet,即在Servlet Context初始化之后或者我做错了什么?
是否无法在运行时添加新的servlet,即在初始化Servlet Context之后?
那是对的.你需要这样做ServletContextListener#contextInitialized().
@WebListener
public class Config implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// Do it here.
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
但是,对于您的特定功能要求,单个控制器servlet与命令模式相结合更适合.然后,您可以在运行时添加命令(操作),并根据请求URI对其进行拦截.另请参阅我对设计模式基于Web的应用程序的回答.
| 归档时间: |
|
| 查看次数: |
5871 次 |
| 最近记录: |