【问题标题】:HTTP Status 500 - Error instantiating servlet in eclipse mavenHTTP 状态 500 - 在 eclipse maven 中实例化 servlet 时出错
【发布时间】:2017-03-19 11:58:07
【问题描述】:

我正在尝试使用 Eclipse 在 Maven 中运行一个简单的 servlet。但收到错误 500。请看看我做错了什么。主要关心的是如何在 maven 中运行 servlet,因为我不熟悉 maven。

index.jsp

  <html>
  <body>
  <h2>Hello World!</h2>
  <form action="mylog" method="post">  
  loginID:<input type="text" name="name"/><br/>
  <input type="submit" value="login"/> 

  </form>
  </body>
  </html>

mylog.java(servlet 类)

  import java.io.IOException;
  import java.io.PrintWriter;

  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;


   public class mylog extends HttpServlet {
   private static final long serialVersionUID = 1L;


   public mylog() {
    super();
    // TODO Auto-generated constructor stub
    }


     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
     }


     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
      String n = request.getParameter("name");

      PrintWriter out = response.getWriter();
      out.print(n);
      out.close();

      doGet(request, response);
    }

}

web.xml 和目录结构 - 见附图

错误堆栈

     HTTP Status 500 - Error instantiating servlet class com.issac.mylog

  type Exception report

  message Error instantiating servlet class com.issac.mylog

 description The server encountered an internal error that prevented it from fulfilling this request.

 exception

javax.servlet.ServletException: Error instantiating servlet class     com.issac.mylog
  org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
  org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
  org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
  org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
  org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
  org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)
  org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
  org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
   java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  java.lang.Thread.run(Unknown Source)

root cause

 java.lang.ClassNotFoundException: com.issac.mylog
  org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
  org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
  org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
  org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
  org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
  org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
  org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
  org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)
  org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
  org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  java.lang.Thread.run(Unknown Source)

【问题讨论】:

    标签: java eclipse maven servlets


    【解决方案1】:

    创建一个源文件夹src/main/java并将java源文件移到那里

    【讨论】:

    • 尝试创建它但显示“这个文件夹已经是一个源文件夹”,当我去构建路径->订单和导出时,它显示所有三个 src/main(资源、java 和测试)但是在 src/main/java& src/main/test 的括号中写有“缺失”。两天前我也在尝试一个类似的项目,它显示了所有三个,并且 servlet 也在工作。
    • 听起来 Eclipse 与文件系统不同步。尝试在 Package Explorer 中删除项目(仅查看 - 不是文件),然后作为 Maven 项目重新导入
    • 是的,eclipse 存在一些问题,它没有显示所有三个文件夹。但是现在我已经尝试了两个差异项目,它适用于一个但对于另一个项目同样的问题。没有永久的解决方案吗?
    • 可能有许多不同的原因。见this post。确保所有内容都显示的一种可靠方法是使用 Maven 原型创建项目并导入
    • 即使放置在指定文件夹下,对于具有类似 servlet 的不同项目,错误 500 仍然存在。
    【解决方案2】:

    src/main/resources用于放置properties文件(或静态资源),所以服务器找不到类文件,所以需要在src/main/java文件夹下创建Java源文件。

    另外,请确保 .class 文件已生成并且在服务器类路径中可用(即,在 WEB-INF/classes 下),这将解决上述 java.lang.ClassNotFoundException

    【讨论】:

      猜你喜欢
      • 2017-08-02
      • 2017-03-08
      • 2017-02-20
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多