【问题标题】:Tomcat 7 server failed to start after creating a servlet using eclipse使用eclipse创建servlet后Tomcat 7服务器启动失败
【发布时间】:2014-07-14 10:13:28
【问题描述】:

当我尝试在 Eclipse 中启动本地 Tomcat 7 服务器时出现错误:

'Starting Tomcat v7.0 Server at localhost'遇到了问题。 Server Tomcat v7.0 Server at localhost 启动失败。

这些是我采取的步骤:

  1. 创建一个名为“test”的新项目。
  2. 创建一个新的 index.jsp 文件。
  3. 创建一个名为“Testservlet”的新servlet

    包名:testpackage

  4. 为 Web 应用程序库配置新的构建路径。从我添加的 Tomcat 7 目录添加一个外部 JAR servlet-api.jar

这是Eclipse中的路径结构:

web.xml 文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>test</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>Testservlet</servlet-name>
    <servlet-class>testpackage.Testservlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>Testservlet</servlet-name>
    <url-pattern>/Testservlet</url-pattern>
  </servlet-mapping>
</web-app>

Testservlet.java 文件的内容:

package testpackage;

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

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

@WebServlet(description = "a test servlet", urlPatterns = { "/Testservlet" })
public class Testservlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        response.setContentType("text/html");
        out.println("This is a test servlet");
    }
}

接下来,我将项目添加到 Tomcat 服务器并尝试启动服务器。当我收到停止服务器运行的错误时。

如果我从 web.xml 文件中删除与 servlet 相关的标记,则服务器可以正常启动。这是我删除的标记:

 <servlet>
    <servlet-name>Testservlet</servlet-name>
    <servlet-class>testpackage.Testservlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>Testservlet</servlet-name>
    <url-pattern>/Testservlet</url-pattern>
  </servlet-mapping>

我假设我需要 web.xml 中的上述标记,以便在我导航到 test/Testservlet 时显示 servlet?特别是当我将项目部署到远程服务器时。

我在这里做错了什么?

【问题讨论】:

  • 'Starting Tomcat v7.0 Server at localhost' 遇到了问题。 Server Tomcat v7.0 Server at localhost 启动失败。
  • 是否有更多关于错误的详细信息?查看tomcat文件夹下的logs文件夹
  • 请转到您的工作空间文件夹,然后导航到 [workspace_folder]\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\logs 在此处查看日志以了解发生了什么.

标签: java eclipse jsp tomcat servlets


【解决方案1】:

Servlet API 3.0 包含一个名为 javax.servlet.annotation 的新包,它提供了像 @WebServlet 这样的注释,用于注释 servlet 类,这可以消除在 web.xml 中使用 servlet 配置。所以,servletservlet-mapping 已经过时了。

此外,您不应将servlet-api.jar 与您的应用程序一起部署。 Tomcat 7 已经拥有这些类,并且它支持许多 Servlet API。它将使用您的 Web 应用程序部署描述符自动选择要加载的 servlet API。

【讨论】:

  • 我想你可能不知道为什么在我将此项目部署到远程 Tomcat7 服务器后导航到 test/Testservlet 时出现 404 错误?
  • 您是否创建了test.war 或者您的应用程序的上下文是什么?项目名称与用于部署应用程序的上下文不同。您应该指定应部署应用程序的上下文。
  • 我创建了一个 test.war 并将其部署在 webapps 中。它会创建测试目录,我将它放在 webapps/ROOT/ 中。我可以使用http://host.biz:8080/test/ 很好地导航到 index.jsp 文件,但是当我尝试导航到 http://host.biz:8080/test/Testservlet 的 Testservlet 时出现 404 错误
  • ROOT 用于上下文 /,您应该在 url 中使用它而不是 /test,为什么要手动执行?只需将test.war 复制到webapps,它就会自动部署。或者最好使用Tomcat管理器来做,但这需要权限才能使用管理器。
  • 当我将它放在webapps 中时它会自动部署,但我必须将它移动到 ROOT 中才能导航到它,它不会在 ROOT 中自动部署,我不知道为什么两者都很重要。我不明白您关于 Testservlet 404 的第一点。感谢您的帮助。
【解决方案2】:

最好的解决方案是在创建 servlet 时添加服务器运行时 1.在创建sevelet名称时添加服务器运行时 2.添加指定的tomcat安装位置

【讨论】:

    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 2015-12-26
    • 2019-06-08
    • 1970-01-01
    • 2012-06-14
    • 2023-02-10
    • 2020-01-11
    • 1970-01-01
    相关资源
    最近更新 更多