JavaEE无法访问Payara服务器上的servlet

时间:2019-02-10 12:55:54

标签: java xml jsp java-ee

我现在尝试了几个小时,但没有任何反应 在这里需要帮助!

我正在尝试在http://localhost:8080/hello-world上运行javaEE Web应用程序

当我转到http://localhost:8080时,我看到服务器正在运行。但是找不到/ hello-world HTTP Status 404 - Not Found

项目结构:

enter image description here

Web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <servlet-name>MainServlet</servlet-name>
    <servlet-class>controller.MainServlet</servlet-class>
  </servlet>

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

MainServlet

package controller;

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

@WebServlet(urlPatterns="/hello-world")
public class MainServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("TESTTESTTEST");

        request.getRequestDispatcher("/test.jsp").forward(request, response);
    }
}

我在这里做错了什么?为什么在控制台中看不到日志消息:TESTTESTTEST,为什么不返回/test.jsp

请帮帮我。

-编辑

服务器配置:

enter image description here

1 个答案:

答案 0 :(得分:1)

web.xml中,您已配置MainServlet来匹配模式/。 也许您应该使用/*网址格式:

<servlet-mapping>
  <servlet-name>MainServlet</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

有关进一步的阅读,请参见以下问题:Difference between / and /* in servlet mapping url pattern

还请注意,如果已将应用程序部署到任意应用程序名称,则不会通过http://localhost:8080/访问应用程序:如果上下文路径为/myWebApp,则必须调用{{1} }或http://localhost:8080/myWebApp/

对于Apache Tomcat,如果要通过http://localhost:8080/myWebApp/hello-worldROOT访问它,则可以命名上下文路径http://localhost:8080/

编辑:

似乎两个映射规范都冲突。从web.xml中删除Serlvet定义:

http://localhost:8080/hello-world

在git仓库中,您指定了<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> </web-app> ,在@WebServlet(urlPatterns="/servlet")中,您将pom.xml命名为“ 1”,这会产生上下文路径“ / 1”。

现在调用artifacId转到http://localhost:8080/1/。 调用index.jsp已通过您的方法转发到http://localhost:8080/1/servlet,但由于test.jsp不存在,将导致错误404。