繁体   English   中英

在Eclipse上的JBoss 5.1中部署servlet时出现问题

[英]Problem deploying servlets in JBoss 5.1 on eclipse

昨天,我创建了一个简单的映像servlet并尝试对其进行部署。 我在JBoss启动时遇到错误,然后在尝试调用servlet时出现更多错误。

昨天我花了大约8个小时在网上搜索答案并尝试不同的情况。 我最终使我的JBoss问题变得更糟,然后解决了这些问题,但是我没有让servlet正常工作。

该servlet是com.controller.MyImageServlet,如下所示:

package com.controller;

import javax.servlet.http.*;

/**
 * Servlet implementation class MyImageServlet
 */
public class MyImageServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public MyImageServlet() {
        super();
    }

    // Process the HTTP Get request
      public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
             /* ... */
    }
}

我添加到web.xml的标签如下所示:

  <servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>com.controller.MyImageServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/CERTIMAGE/*</url-pattern>
  </servlet-mapping>

在服务器启动时,这是日志中唯一表明存在问题的指示:

01:59:25,328 WARN  [JAXWSDeployerHookPreJSE] Cannot load servlet class: com.controller.MyImageServlet

当我尝试URL模式( http:// localhost:9980 / CERTIMAGE / 1 )时,在日志(和浏览器)中得到以下堆栈跟踪:

01:59:39,640 INFO  [[/]] Marking servlet ImageServlet as unavailable
01:59:39,640 ERROR [[ImageServlet]] Allocate exception for servlet ImageServlet
java.lang.ClassNotFoundException: com.controller.MyImageServlet
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at org.jboss.web.tomcat.service.TomcatInjectionContainer.newInstance(TomcatInjectionContainer.java:262)
    at org.jboss.web.tomcat.service.TomcatInjectionContainer.newInstance(TomcatInjectionContainer.java:256)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1006)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:777)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

如果再次尝试使用URL模式,则会在日志中收到以下消息:

09:33:32,390 INFO  [[ImageServlet]] Servlet ImageServlet is currently unavailable

我已经在WEB-INF / classes / com / controller的WAR中验证了MyImageServlet.class。 实际上,我什至向我的一个JSP中添加了一些代码,以尝试实例化Servlet并调用doGet方法。 这实际上有效,并将正确的调试序列输出到日志,表明已调用Servlet构造函数和doGet方法。

我还尝试遵循一些说明来创建/部署一个非常简单的HelloWorld servlet,这具有完全相同的问题。 请注意,web.xml已经包含JBoss放置的servlet:org.jboss.web.tomcat.service.StatusServlet-Servlet在日志中未给出任何错误。 作为实验,我从该路径中删除了“ .web”,并最终得到与在Servlet上完全相同的错误。 因此,在指定的路径下,JBoss似乎无法找到我的Servlet。 只是为了踢球,我尝试了各种其他路径,例如普通的MyImageServlet,controller.MyImageServlet等。 另外,该Servlet最初命名为ImageServlet,但是我尝试更改名称是因为可能与现有的ImageServlet发生冲突。 在所有情况下,行为都是相同的。

经过昨天的所有研究,我想说这似乎是JBoss servlet容器的问题,并且我还了解到JBoss 5.1.0.GA应该与tomcat servlet容器捆绑在一起。 我不到两个月前(从jboss.org)在自己的PC(Windows XP)上安装了JBoss,并几乎完全使用了它。 请注意,我在JDK 1.6上运行,因此确实使用了jboss-jdk6安装版本。 我在Windows上运行,但同时也部署到Linux虚拟专用服务器。 我将程序的当前版本(包括servlet)部署到了Linux机器上,但是却得到了完全相同的错误。 我不愿意尝试重新安装JBoss,因为当在两个完全不同的安装中遇到相同的错误时,很难将责任归咎于JBoss安装。

我对捆绑的tomcat servlet容器有点怀疑,因为使用eclipse,我无法找到任何迹象表明JBoss中捆绑了tomcat。 我确实在JBoss common / lib目录中找到了servlet-api.jar。 这是在Eclipse构建路径上。

一个可能有用的注释:我以前在其他使用相同日食的项目中使用了独立的tomcat服务器,所以也许这是某种日食问题? 但是,正如我所说,在部署到Linux服务器时确实会遇到相同的错误,并且部署过程仅涉及将文件ftp到服务器上,然后将它们放入已部署的war软件包中,然后重新启动JBoss。

感谢您的任何帮助,您可以提供。

在花了最后几个星期处理类似的问题之后,我现在回头向过去的我建议我尝试以下方法之一:

  1. 确保在Eclipse Deployment Assembly中指定了源文件夹(右键单击项目,选择Properties,然后单击Deployment Assembly)。

  2. 确保源文件夹包含在服务器类路径中(双击服务器,单击“打开启动配置”,然后选择“ ClassPath”选项卡)。

但是,这个项目已经消失了很久,所以我无法确定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM