Java Tomcat上的Servlet配置

Java Tomcat上的Servlet配置,java,tomcat,Java,Tomcat,我使用Netbeans和Glassfish服务器开发了一个web应用程序。我想在Tomcat服务器上部署它,但我无法在Tomcat上运行servlet。我做了以下几件事 在Tomcat的根目录中创建了一个文件夹“fti” 将index.jsp放在fti目录中,我可以通过浏览器访问该目录 我在“fti”文件夹中创建了WEB-INF文件夹,并将WEB.xml文件放入其中 我在“WEB-INF”文件夹中创建了classes文件夹,并将编译好的java文件test.class放入其中 我试图通过浏览器访

我使用Netbeans和Glassfish服务器开发了一个web应用程序。我想在Tomcat服务器上部署它,但我无法在Tomcat上运行servlet。我做了以下几件事

  • 在Tomcat的根目录中创建了一个文件夹“fti”
  • 将index.jsp放在fti目录中,我可以通过浏览器访问该目录
  • 我在“fti”文件夹中创建了WEB-INF文件夹,并将WEB.xml文件放入其中
  • 我在“WEB-INF”文件夹中创建了classes文件夹,并将编译好的java文件test.class放入其中
  • 我试图通过浏览器访问/fti/test来调用servlet,但得到的错误是“请求的资源(/fti/test)不可用”
  • 我能够在Netbeans和glassfish服务器上使用相同的web.xml文件运行相同的servlet

    我的
    test.java
    文件:

    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 test extends HttpServlet {
    
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
    
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet test</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet test </h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }
    
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
    
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
    
    
    @Override
    public String getServletInfo() {
        return "Short description";
    }
    
    }
    
    import java.io.IOException;
    导入java.io.PrintWriter;
    导入javax.servlet.ServletException;
    导入javax.servlet.http.HttpServlet;
    导入javax.servlet.http.HttpServletRequest;
    导入javax.servlet.http.HttpServletResponse;
    公共类测试扩展了HttpServlet{
    受保护的void processRequest(HttpServletRequest请求、HttpServletResponse响应)
    抛出ServletException、IOException{
    setContentType(“text/html;charset=UTF-8”);
    尝试(PrintWriter out=response.getWriter()){
    out.println(“”);
    out.println(“”);
    out.println(“”);
    out.println(“Servlet测试”);
    out.println(“”);
    out.println(“”);
    out.println(“Servlet测试”);
    out.println(“”);
    out.println(“”);
    }
    }
    @凌驾
    受保护的void doGet(HttpServletRequest请求、HttpServletResponse响应)
    抛出ServletException、IOException{
    processRequest(请求、响应);
    }
    @凌驾
    受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)
    抛出ServletException、IOException{
    processRequest(请求、响应);
    }
    @凌驾
    公共字符串getServletInfo(){
    返回“简短描述”;
    }
    }
    
    我的web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    
    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>test</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    
    
    测试
    测试
    测试
    /试验
    30
    

    servlet或任何REST请求路径不仅仅是一个远程文件系统。在
    web.xml
    中,您已经告诉容器servlet的名称是
    test
    ,其路径是
    test/
    ,因此尝试调用
    test
    ,而不是
    fti/test

    您将“根”webapp与顶级文档目录混淆
    fti
    必须是ROOT的兄弟,才能像您期望的那样工作,而不是孩子。

    文件夹
    fti
    应该位于安装Tomcat的同一文件夹中的文件夹
    webapps
    下。此外,类
    test.class
    应位于
    webapps/fti/WEB\u INF/classes
    中。您应该能够通过
    /fti/test

    访问它。“用于映射到servlet的路径是来自请求对象的请求URL减去上下文路径和路径参数。”因此上下文路径
    fti
    必须存在……在步骤4中,您是否手动将.class文件放入classes文件夹?您确定您的代码编译成功而没有此错误:
    尝试
    而不使用
    捕获
    最终
    或资源声明您究竟为什么不使用IDE?它将为您自动化许多这些步骤,并确保一切都在正确的位置。