将jersey SpringServlet配置为servlet会抛出“IllegalStateException:No Such servlet”

时间:2016-10-05 14:31:03

标签: spring servlets jetty servlet-filters servlet-3.0

我正在尝试在Jersey {x上为我的Jetty 8服务器import random import wx class TabPanel(wx.Panel): #---------------------------------------------------------------------- def __init__(self, parent): """""" wx.Panel.__init__(self, parent=parent) colors = ["red", "blue", "gray", "yellow", "green"] self.SetBackgroundColour(random.choice(colors)) btn = wx.Button(self, label="Press Me") sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(btn, 0, wx.ALL, 10) self.SetSizer(sizer) class DemoFrame(wx.Frame): """ Frame that holds all other widgets """ def __init__(self): """Constructor""" wx.Frame.__init__(self, None, wx.ID_ANY, "Notebook Tutorial", size=(600,400) ) panel = wx.Panel(self) notebook = wx.Notebook(panel) tabOne = TabPanel(notebook) notebook.AddPage(tabOne, "Tab 1") tabTwo = TabPanel(notebook) notebook.AddPage(tabTwo, "Tab 2") sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(notebook, 1, wx.ALL|wx.EXPAND, 5) panel.SetSizer(sizer) self.Layout() self.Show() if __name__ == "__main__": app = wx.App(False) frame = DemoFrame() app.MainLoop() 配置Jersey SpringServlet,当我将其配置为web.xml时,我会抛出异常:

<servlet>

对于短堆栈跟踪,我无法复制/粘贴。

这是我的java.lang.IllegalStateException: No Such servlet: null at org.eclipse.jetty.servlet.ServletHandler.updateMappings(ServletHandler.java:1320) at org.eclipse.jetty.servlet.ServletHandler.setFilterMappings(ServletHandler.java:1414) at org.eclipse.jetty.servlet.ServletHandler.addServletMapping(ServletHandler.java:896)

web.xml

我需要让SpringServlet作为Servlet而不是Filter工作,因为我正在添加另一个使用Comet执行推送服务的Servlet。如果我将SpringServlet保留为Filter,则请求永远不会进入我的新Servlet。

1 个答案:

答案 0 :(得分:1)

  

注意:Jetty 8 is EOL(生命终结),请考虑升级。

堆栈跟踪毫无意义。

java.lang.IllegalStateException: No Such servlet: null
    at org.eclipse.jetty.servlet.ServletHandler.updateMappings(ServletHandler.java:1320)
    at org.eclipse.jetty.servlet.ServletHandler.setFilterMappings(ServletHandler.java:1414)
    at org.eclipse.jetty.servlet.ServletHandler.addServletMapping(ServletHandler.java:896)

它来自addServletMapping - &gt; setFilterMappings - &gt; updateMappings

我找不到具有该呼叫路径的Jetty 8版本。

您使用的是哪个版本的Jetty 8?

甚至考虑到com.sun.jersey.spi.spring.container.servlet.SpringServlet实现以下所有接口的事实......

  • javax.servlet.Filter
  • javax.servlet.Servlet
  • javax.servlet.ServletConfig

如果我们假设jetty确定类型不好,那么仍然无法调用堆栈。

向前走,用一个实现所有这三个接口的类来快速测试一个快速测试用例,并将它用于Jetty 8.1.16.v20140903发布,它不会触发那个堆栈跟踪。

也许您需要启用完整的调试日志记录,以查看在IllegalStateException发生之前发生的事情。 (它很可能不是导致它的SpringServlet init)

如果你有更大(更准确)的堆栈跟踪,那也可能有所帮助。