Java 使用eclipse创建servlet后,Tomcat 7服务器无法启动

Java 使用eclipse创建servlet后,Tomcat 7服务器无法启动,java,eclipse,jsp,tomcat,servlets,Java,Eclipse,Jsp,Tomcat,Servlets,在Eclipse中尝试启动本地Tomcat 7服务器时出现错误: “在本地主机上启动Tomcat v7.0服务器”遇到问题。 本地主机上的服务器Tomcat v7.0无法启动 以下是我采取的步骤: 创建一个名为“test”的新项目 创建一个新的index.jsp文件 创建一个名为“Testservlet”的新的servlet 包名称:testpackage 为Web应用程序库配置新的生成路径。从Tomcat7目录添加一个外部JAR,我添加了ServletAPI.JAR 这是Eclipse中的路径

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


“在本地主机上启动Tomcat v7.0服务器”遇到问题。 本地主机上的服务器Tomcat v7.0无法启动

以下是我采取的步骤:

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

    包名称:testpackage

  • 为Web应用程序库配置新的生成路径。从Tomcat7目录添加一个外部JAR,我添加了
    ServletAPI.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>
    
    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>
    
    
    Testservlet
    testpackage.Testservlet
    Testservlet
    /Testservlet
    
    我假设我需要web.xml中的上述标记,以便在导航到test/Testservlet时显示servlet?尤其是当我将项目部署到远程服务器时


    我做错了什么?

    Servlet API 3.0包含了一个名为
    javax.Servlet.annotation
    的新包,它提供了类似
    @WebServlet
    的注释,用于注释Servlet类,这可以消除
    web.xml
    中Servlet配置的使用。因此,
    servlet
    servlet映射
    已经过时


    另外,您不应该在应用程序中部署
    ServletAPI.jar
    。Tomcat7已经有了这些类,并且它支持许多ServletAPI。它将使用web应用程序部署描述符自动选择要加载的ServletAPI

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

    “在本地主机上启动tomcat v7.0服务器”遇到问题。本地主机上的服务器Tomcat v7.0无法启动。是否有关于此错误的更多详细信息?查看存储在tomcat文件夹下的
    日志
    文件夹请转到您的工作空间文件夹,然后导航到[workspace\u文件夹]\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\logs检查此处的日志以查找发生的情况。我想您可能不知道为什么在我将此项目部署到远程Tomcat7服务器后导航到test/Testservlet时出现404错误?是您创建了
    test.war
    还是您的应用程序的上下文?项目名称与用于部署应用程序的上下文不同。您应该指定部署应用程序的上下文。我创建了一个test.war,并在
    webapps
    中部署了它。它创建了测试目录,我将其放在webapps/ROOT/中。我可以使用
    导航到index.jsp文件http://host.biz:8080/test/
    但是当我尝试在
    http://host.biz:8080/test/Testservlet
    ROOT代表上下文
    /
    ,您应该在url中使用它而不是
    /test
    ,为什么要手动执行此操作?只需将
    test.war
    复制到
    webapps
    即可自动部署。或者最好使用Tomcat管理器来完成,但这需要使用管理器的权限。当我将其放置在
    webapps
    中时,它会自动部署,但我必须将其移动到根目录中才能导航到它,而它不会在根目录中自动部署,我不知道这两方面的原因。我不理解您关于Testservlet 404的第一点。谢谢你的帮助。