Рубрики
Без рубрики

Отладка ошибки Spring MVC 404 “Не найдено сопоставление для HTTP-запроса”

Узнайте, как исправить распространенные причины 404 ошибок в Spring MVC

Автор оригинала: baeldung.

1. введение

Spring MVC-это традиционное приложение, построенное с использованием шаблона переднего контроллера. DispatcherServlet , который выступает в качестве переднего контроллера, отвечает за маршрутизацию и обработку запросов.

Как и в случае с любым веб-приложением или веб-сайтом, Spring MVC возвращает код ответа HTTP 404, когда запрошенный ресурс не может быть найден. В этом уроке мы рассмотрим общие причины 404 ошибок в Spring MVC .

2. Возможные причины ответа 404

2.1. Неправильный URI

Допустим, у нас есть GreetingController , который сопоставляется с /приветствием и отображает greeting.jsp :

@Controller
public class GreetingController {

    @RequestMapping(value = "/greeting", method = RequestMethod.GET)
    public String get(ModelMap model) {
        model.addAttribute("message", "Hello, World!");
        return "greeting";
    }
}

Соответствующее представление отображает значение переменной message :

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

    
        Greeting
    
    
        

${message}

Как и ожидалось, запрос GET на /приветствие работает:

curl http://localhost:8080/greeting

Мы увидим HTML-страницу с сообщением “Привет, мир”:


    
        Greeting
    
    
        

Hello, World!

Одной из наиболее распространенных причин появления 404 является использование неправильного URI. Например, было бы неправильно делать запрос GET на /приветствия вместо /приветствия :

curl http://localhost:8080/greetings

В таком случае мы увидим предупреждающее сообщение в журналах сервера:

[http-nio-8080-exec-6] WARN  o.s.web.servlet.PageNotFound - 
  No mapping found for HTTP request with URI [/greetings] in DispatcherServlet with name 'mvc'

И клиент увидит страницу с ошибкой:


    
        Home
    
    
        

Http Error Code : 404. Resource not found

Чтобы избежать этого, нам нужно убедиться, что мы правильно ввели URI.

2.2. Неправильное отображение сервлетов

Как объяснялось ранее, DispatcherServlet является передним контроллером в Spring MVC. Следовательно, как и в стандартном приложении на основе сервлета, нам нужно создать отображение для сервлета с помощью web.xml файл.

Мы определяем сервлет внутри тега servlet и сопоставляем его с URI внутри тега servlet-mapping . Нам нужно убедиться, что значение url-pattern является правильным, потому что довольно часто можно увидеть предложения , где сервлет сопоставлен с “/*” — обратите внимание на конечную звездочку :



    
    
        mvc
        org.springframework.web.servlet.DispatcherServlet
        1
    
    
        mvc
        /*
    
    

Теперь, если мы запросим /приветствие , мы увидим предупреждение в журналах сервера:

curl http://localhost:8080/greeting
WARN  o.s.web.servlet.PageNotFound - No mapping found for HTTP request with URI 
  [/WEB-INF/view/greeting.jsp] in DispatcherServlet with name 'mvc'

На этот раз ошибка гласит, что greeting.jsp не найден, и пользователь видит пустую страницу.

Чтобы исправить ошибку, нам нужно сопоставить DispatcherServlet вместо “/” (без конечной звездочки):


    mvc
    /

После исправления отображения все должно работать правильно. Запрос /приветствие теперь отображается сообщение “Привет, мир!”:

curl http://localhost:8080/greeting

    
        Greeting
    
    
        

Hello, World!

Причина проблемы заключается в том, что если мы сопоставляем DispatcherServlet с/* , , то мы сообщаем приложению, что каждый запрос, поступающий в наше приложение, должен обслуживаться DispatcherServlet . Однако это неправильный подход, потому что DispatcherServlet не способен на это. Вместо этого Spring MVC ожидает, что реализация ViewResolver будет обслуживать представления, такие как файлы JSP.

3. Заключение

В этой краткой статье мы объяснили, как отлаживать 404 ошибки в Spring MVC. Мы рассмотрели две наиболее распространенные причины получения ответа 404 от нашего весеннего приложения. Во – первых, при отправке запроса использовался неверный URL-адрес. Вторым было сопоставление DispatcherServlet с неправильным url-шаблоном в web.xml .

Как всегда, полную реализацию этого учебника можно найти на Github .