首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Servlet类不是javax.servlet.Servlet

Servlet类不是javax.servlet.Servlet
EN

Stack Overflow用户
提问于 2014-03-28 10:42:18
回答 4查看 5.4K关注 0票数 1

我正在开发一个GWT应用程序,但当我将它部署到Equinox-jetty服务器时,遇到了以下异常:

代码语言:javascript
复制
404 Servlet class com.cartif.gui.autentication.server.AppServiceImpl is not a javax.servlet.Servlet <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 404 Servlet class com.cartif.gui.autentication.server.AppServiceImpl is not a javax.servlet.Servlet</title>
</head>
<body><h2>HTTP ERROR 404</h2>
    <p>Problem accessing /baasGUIAutentication/baasgui/autentication. Reason:
    <pre>    
    Servlet class com.cartif.gui.autentication.server.AppServiceImpl is not a javax.servlet.Servlet</pre></p><h3>Caused by:</h3><pre>javax.servlet.UnavailableException: Servlet class com.cartif.gui.autentication.server.AppServiceImpl is not a javax.servlet.Servlet
         at org.mortbay.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:362)
         at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:243)
         at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
         at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
         at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
         at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
         at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
         at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
         at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
         at org.springframework.osgi.web.deployer.jetty.JettyWarDeployer.startWebAppContext(JettyWarDeployer.java:210)
         at org.springframework.osgi.web.deployer.jetty.JettyWarDeployer.startDeployment(JettyWarDeployer.java:122)
         at org.springframework.osgi.web.deployer.support.AbstractWarDeployer.deploy(AbstractWarDeployer.java:93)
         at org.springframework.osgi.web.extender.internal.activator.WarLoaderListener$DeploymentManager$DeployTask.doRun(WarLoaderListener.java:257)
         at org.springframework.osgi.web.extender.internal.activator.WarLoaderListener$DeploymentManager$BaseTask.run(WarLoaderListener.java:215)
         at org.springframework.scheduling.timer.DelegatingTimerTask.run(DelegatingTimerTask.java:66)
         at java.util.TimerThread.mainLoop(Unknown Source)
         at java.util.TimerThread.run(Unknown Source)

    </pre>
<hr /><i><small>Powered by Jetty://</small></i><br/> 

AppServiceImpl类的代码头是:

代码语言:javascript
复制
public class AppServiceImpl extends RemoteServiceServlet implements AppService  

和AppService:

代码语言:javascript
复制
@RemoteServiceRelativePath("autentication")
public interface AppService extends RemoteService {
    User getUser(String user, String pass) throws Exception;
}

此外,web.xml声明servlet如下:

代码语言:javascript
复制
<servlet>
    <servlet-name>baasguiServlet</servlet-name>
    <servlet-class>com.cartif.gui.autentication.server.AppServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>baasguiServlet</servlet-name>
    <url-pattern>/baasgui/autentication</url-pattern>
</servlet-mapping>

baasgui是编译GWT Java代码的文件夹。我还检查了javax.servlet类,并且只使用了一次。

有人能帮我吗?

提前谢谢!何塞

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-04 09:51:56

我找到解决办法了。在GWT库包中,我必须添加以下行:

代码语言:javascript
复制
Bundle-SymbolicName: gwtlibraries; singleton:=true
Require-Bundle: javax.servlet

标记不需要导入包,而是需要- bundle和部分单例包。在GUI清单中,我还必须添加下一行:

代码语言:javascript
复制
Bundle-SymbolicName: GUI; singleton:=true
Require-Bundle: gwtlibraries //apart from importing the specific libraries
Eclipse-RegisterBuddy: com.cartif.gwt
Eclipse-BuddyPolicy: registered

我所部署的GWT库的早期版本并没有出现这种情况,但是包结构是不同的,因为现在我使用的是解压缩的库,而在以前的版本中使用的是压缩的jar文件。

感谢您的合作和帮助!

票数 0
EN

Stack Overflow用户

发布于 2014-03-28 11:30:16

当将javax.servlet包嵌入到包中时,通常会发生这种情况。然后,jetty会看到作为一个包部署的普通javax.servlet,而您的应用程序只看到嵌入的类。因此,接口被认为是不同的。

最好的解决方案是不要将外部内容嵌入到包中。如果无法避免,则导出和导入javax.servlet包。因此,框架可以将jetty连接起来,并将其捆绑到提供包的相同的类加载器上。

票数 0
EN

Stack Overflow用户

发布于 2014-03-28 13:54:27

  • 用控制台启动春分
    • 如果是春分3.7.x,-Dosgi.console=6666
    • 如果是春分3.8或更高版本:-Dosgi.console.enable.builtin=true -Dosgi.console=6666

  • 你可以打电话到6666端口。
  • 在telnet会话中输入命令: packages javax.servlet
  • 在结果列表中,您将看到包在OSGi容器中多次可用。泽西的电线给他们其中一个,而你的wab连线到另一个。尝试实现只有在容器中的包。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22710535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档