我需要以编程方式在 Jetty 6 服务器上添加和删除 servlet。 虽然添加几乎很简单,但我找不到有效的删除方法。 出于我的目的,添加和删除 servlet 非常重要,因为它与动态组件体系结构相关联。添加组件时需要添加新服务,删除组件时需要删除该服务。
为了添加 servlet,我使用了以下模式:
Server server = new Server(8080);
class MyServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
resp.getOutputStream().write("Hello World!".getBytes());
}
}
...
public void addServlet(HttpServlet s, String path)
{
Context root = new Context(server,"/",Context.SESSIONS);
root.addServlet(new ServletHolder(new MyServlet()), "/test/*");
root.getServletHandler().
}
public void removeServlet(HttpServlet s, String path)
{
//What I have to put here ? There is no removeServlet like methods in server/Context/ServletHolder
}
为什么删除 servlet 不是那么明显?你能解释一下动机吗?
最佳答案
首先,如果可能的话,我建议更新到 jetty 7 或 8,jetty 6 目前已经很老了,缺乏 7 和 8 中最近几年的开发。哎呀,jetty 9 正在积极开发中现在正在工作。
其次,我不会在 servlet 级别上查看此内容,而是在处理程序级别上查看此内容,与服务器一起添加和删除处理程序,这些处理程序可以是静态资源类型处理程序或完整的 servlet 上下文处理程序,甚至是 webapp 上下文处理程序.
至于为什么 servlet 上下文处理程序没有删除 servlet 类型操作,它实际上不是删除该级别的 Activity servlet 的 servlet 规范的一部分,更适合 war 部署/取消部署级别。不过,请随意提出一个问题,我确实在 servlet 上下文处理程序级别尝试添加和删除,您可以删除它们,但之后添加更多内容似乎会出现问题,所以我怀疑删除上下文本身并添加一个新的上下文此时将是您最好的选择。
关于java - jetty 6 : How to remove a Servlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637975/