JavaEE не может получить доступ к сервлету на сервере Payara - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь пару часов сейчас, но ничего не работает, нужна помощь здесь!

Я пытаюсь запустить веб-приложение javaEE на http://localhost:8080/hello-world

Когда я иду в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 голосов
/ 10 февраля 2019

В web.xml вы настроили MainServlet для соответствия шаблону /.Возможно, вам следует использовать /* шаблон URL-адреса:

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

См. Этот вопрос / ответ для дальнейшего чтения: Разница между / и / * в шаблоне URL-адреса отображения сервлета

Обратите также внимание, что вы не получаете доступ к своему приложению через http://localhost:8080/, если вы развернули его для произвольного имени приложения: если контекстный путь равен /myWebApp, вам придется вызывать http://localhost:8080/myWebApp/ или http://localhost:8080/myWebApp/hello-world соответственно.

В случае Apache Tomcat вы можете назвать контекстный путь ROOT, если хотите получить к нему доступ через http://localhost:8080/ или http://localhost:8080/hello-world.

Редактировать:

Кажется, обе спецификации сопоставления конфликтуют.Удалите определения Serlvet из 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>
</web-app>

В вашем git-репо вы указали @WebServlet(urlPatterns="/servlet"), в pom.xml вы называете artifacId "1", что дает contextpath "/ 1".

Теперь вызов http://localhost:8080/1/ переходит к index.jsp.Вызов http://localhost:8080/1/servlet перенаправляется в test.jsp вашим методом, но приводит к ошибке 404, так как test.jsp не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...