java - 为什么这个 java servlet 不起作用 [OpenShift+Tomact6+Git+Jboss]

标签 java tomcat servlets jboss openshift

我已经创建了 Openshift 应用程序,现在我正在尝试编辑它。 这是项目结构:

http://my.jetscreenshot.com/demo/20130525-t2mt-28kb

我已将此代码添加到 index.html 中:

<form action="/uploadFile" enctype="multipart/form-data" method="post">
    <input type="file" name="uploadFile" />
    <input type="submit" />
</form>

最后我创建了 servlet 文件 fileUploader.java:

package main.java;
import *;

@WebServlet(name = "uploadFile",urlPatterns = {"/uploadFile"})
@MultipartConfig
public class fileUploader extends javax.servlet.http.HttpServlet {

//class code
}

你可以在这里看到@WebServlet注解,我读到它已经足够了,但是它不起作用(404错误),所以我在web.xml中添加了代码:

<servlet>
<servlet-name>uploadFile</servlet-name>
<servlet-class>main.java.fileUploader</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>uploadFile</servlet-name>
<url-pattern>/uploadFile</url-pattern>
</servlet-mapping>

index.html 有效,但 servlet 无效。现在出现 500 错误:


type Exception report
message 
description The server encountered an internal error () that prevented it from fulfilling this request.
exception 

javax.servlet.ServletException: Wrapper cannot find servlet class main.java.fileUploader or a class it depends on
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:722)


root cause 

java.lang.ClassNotFoundException: main.java.fileUploader
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:722)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.35 logs.

我研究过这个问题,但我仍然不知道问题出在哪里

最佳答案

如果您使用 Maven 来构建您的 WAR,它可能会将类从 src/main/java 打包到 WEB-INF/classes 而不是从 src 文件夹。不同之处在于 Maven 认为您的类在默认(无命名空间)包中,即没有任何包声明。

但是您的 Eclipse 配置了 src 作为您的源目录而不是 src/main/java 因此它添加了 package main.java; 声明到你的类,它现在与 Maven 默认值冲突。

在您的 Eclipse 中,右键单击 src > Build Path > Remove from Build Path。然后导航到 src\main\java 并右键单击 > Build Path > Add as Source Directory。让 Eclipse 也修复您的包语句,即删除 package main.java; 或创建包文件夹,如 src\main\java\main\java\fileUploader.java。 (顺便提一下,不建议对类名使用驼峰式大小写。)

关于java - 为什么这个 java servlet 不起作用 [OpenShift+Tomact6+Git+Jboss],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751138/

相关文章:

java - 指向结构体数组的指针

java - Apache Tomcat - 来回流

Tomcat 从 Tomcat Web 应用程序管理器重新启动虚拟主机

java - 删除cookie的方法

java - 如何在git项目中包含库jar

java - 如何在不对 URL 进行硬编码的情况下调用我的 REST API get 方法?

java - Java 控制台应用程序中的 Guice 自定义范围进入和退出

tomcat - 如何在 tomcat 上获取 Jersey 2.5.1 以记录包括实体(请求/响应正文)的请求/响应

java - 出现 "java.net.ProtocolException: Server redirected too many times"错误

java - 如何使用 Java 查找应用程序引擎数据存储中具有最大重复项的值?