【问题标题】:JavaEE cannot acces servlet on payara serverJava无法访问payara服务器上的servlet
【发布时间】:2019-07-04 02:59:40
【问题描述】:

我现在尝试了几个小时,但没有任何效果 在这里需要一些帮助!

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

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

项目结构:

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

请帮帮我。

--编辑

服务器配置:

【问题讨论】:

    标签: java xml jsp jakarta-ee


    【解决方案1】:

    web.xml 中,您已将MainServlet 配置为匹配模式/。 也许你应该使用/* url-pattern:

    <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,则必须分别调用http://localhost:8080/myWebApp/http://localhost:8080/myWebApp/hello-world .

    对于 Apache Tomcat,如果您想通过http://localhost:8080/http://localhost:8080/hello-world 访问它,您可以将上下文路径命名为ROOT

    编辑:

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

    <!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>
    

    在您的 git 存储库中,您指定了 @WebServlet(urlPatterns="/servlet"),在 pom.xml 中,您将 artifacId 命名为“1”,这会产生上下文路径“/1”。

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

    【讨论】:

    • 感谢您的帮助。当我添加/* 时,我得到javax.servlet.ServletException: Exceeded maximum depth for nested request dispatches: 20。我已经添加了任意应用程序名称,这样应该很好。
    • 如果你使用&lt;url-pattern&gt;/hello-world&lt;/url-pattern&gt;会改变吗?听起来你现在有一个无限循环 MainServlet -> test.jsp -> MainServlet -> test.jsp ...
    • 然后消息消失了...我已经把它放在 Github aswel github.com/larsjanssen6/jea6a 非常奇怪的问题:(
    • 还是不行。未到达 servlet doGet
    • 当我执行&lt;url-pattern&gt;/hello-world&lt;/url-pattern&gt; 时,它会使用index.jsp 而不是我的doGet 方法Servlet
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多