Как устранить неполадки HTTP 404 Исходный сервер не нашел текущего представления для целевого ресурса - PullRequest
0 голосов
/ 30 декабря 2018

После демонстрации программного обеспечения на Skillsoft я создал простое демонстрационное приложение Spring MVC в Eclipse.Приложение загружается нормально, и я могу попасть на домашнюю страницу («Hello World»).Но когда я пытаюсь поразить мой контроллер, я получаю следующее сообщение об ошибке

Статус HTTP 404 - Не найдено

Тип Отчет о состоянии

Сообщение /springMVCDemo/WEB-INF/jsp/quote.jsp

Описание Исходный сервер не нашел текущего представления для целевого ресурса илине хочет раскрывать, что он существует.

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

Ошибка Tomcat 404:Исходный сервер не нашел текущего представления для целевого ресурса или не хочет раскрывать, что он существует

Сервлет возвращает "HTTP Status 404 Запрашиваемый ресурс (/ сервлет) недоступен"

Исходный сервер не нашел текущего представления для целевого ресурса или не хочет раскрыть, что он существует.при развертывании на tomcat

Исходный сервер не нашел текущего представления для целевого ресурса или не хочет раскрывать, что он существует

web.xml

<web-app>
    <display-name>Archetype Created Web Application</display-name> 
    <servlet>
    <servlet-name>MyDemoApp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/myDemoApp-servletConfig.xml</param-value>
    </init-param>
    </servlet>

    <servlet-mapping>
    <servlet-name>MyDemoApp</servlet-name>
    <url-pattern>*.html</url-pattern>
    </servlet-mapping>
</web-app>

myDemoApp-servletConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

<mvc:annotation-driven/>
<context:component-scan base-package="com.demo.controllers"</context:component-scan>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>
</beans>

MyDemoController.java

package com.demo.controllers;

import java.util.Random;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MyDemoController {
private String[] quotes = {"To be or not to be -Shakespeare",
                            "Stay hungry you're alone -Dee Snider",
                            "Might as well jump! -David Lee Roth"};

//http://localhost:8080/springMVCDemo/getQuote.html
@RequestMapping(value="/getQuote")
public String getRandomQuote(Model model) {
    int rand = new Random().nextInt(quotes.length);
    String randomQuote = quotes[rand];

    model.addAttribute("randomQuote", randomQuote);
    return "quote";
}

}

Quote.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>My Demo App</title>
</head>
<body>

<h1>The quote is:</h1>
<p>${randomQuote}</p>

</body>
</html> 

index.jsp

<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

КаталогСтруктура

springMVCDemo
|
-->main
   -->java
      -->com
         -->demo
            -->controllers
               -->MyDemoController.java
-->webapp
   -->WEB-INF
      myDemoApp-servletConfig.xml
      web.xml
      index.jsp
      -->jsp
         -->Quote.jsp

Что я пробовал и результаты

Эксперимент № 1:

http://localhost:8080/springMVCDemo

Результат: отображение в браузере"Привет, мир!"как и ожидалось

Эксперимент № 2:

http://localhost:8080/springMVCDemo/getQuote.html

Ожидаемое поведение: отображается одна из трех цитат

Фактический результат: HTTP 404 + сообщения консоли Eclipse:

Dec 29, 2018 5:59:40 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'MyDemoApp'
Dec 29, 2018 5:59:40 PM org.springframework.web.servlet.DispatcherServlet initServletBean
INFO: FrameworkServlet 'MyDemoApp': initialization started
Dec 29, 2018 5:59:40 PM org.springframework.web.context.support.XmlWebApplicationContext prepareRefresh
INFO: Refreshing WebApplicationContext for namespace 'MyDemoApp-servlet': startup date [Sat Dec 29 17:59:40 EST 2018]; root of context hierarchy
Dec 29, 2018 5:59:40 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/myDemoApp-servletConfig.xml]
Dec 29, 2018 5:59:42 PM org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping registerHandlerMethod
INFO: Mapped "{[/getQuote],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.demo.controllers.MyDemoController.getRandomQuote(org.springframework.ui.Model)
Dec 29, 2018 5:59:42 PM org.springframework.web.servlet.DispatcherServlet initServletBean
INFO: FrameworkServlet 'MyDemoApp': initialization completed in 1751 ms

Эксперимент № 3:

http://localhost:8080/springMVCDemo/getQuote2.html

Результат: Как и ожидалось, я получил HTTP 404, поскольку такого сопоставления не существует.Также было отображено следующее консольное сообщение Eclipse:

Dec 29, 2018 6:03:21 PM org.springframework.web.servlet.PageNotFound noHandlerFound
WARNING: No mapping found for HTTP request with URI [/springMVCDemo/getQuote2.html] in DispatcherServlet with name 'MyDemoApp'

В целом, я считаю, что мой контроллер отображается правильно, но по какой-то причине страница не отображается: (

Версии программного обеспечения, которые я использую

Eclipse 2018-09 (4.9.0); Tomcat v9.0

Если кто-нибудь может дать какой-либо совет по устранению неполадок, он будет очень признателен.Я потратил почти 8 часов, пытаясь адаптировать свой конфигурационный файл сервлета, но пока не повезло.

1 Ответ

0 голосов
/ 30 декабря 2018

Я заметил несколько вещей в вашем коде:

  1. Отображение вашего контроллера getQuote, и, похоже, оно настроено и работает на основе этого журнала вашего сервера:

ИНФОРМАЦИЯ: Сопоставлено "{[ / getQuote ], методы = [], params = [], заголовки = [], потребляет = [], производит = [],custom = []} "на общедоступный java.lang.String com.demo.controllers.MyDemoController.getRandomQuote (org.springframework.ui.Model)

Ваше имя jsp Quote вместо quote (учитывает регистр):

-> jsp -> Quote.jsp

Итак, сначала вы должны сделать запрос на ваш сопоставленный URL-адрес, в случае getQuote следующим образом:

http://localhost:8080/springMVCDemo/getQuote

Поставьте точку остановав вашем контроллере и проверьте, действительно ли вы можете достичь его, запросив этот URL.

Также исправьте страницу возврата вашего контроллера, так как ваша страница называется Quote, вы вместо этого возвращаете страницу цитаты (помните, что с учетом регистра)):

@RequestMapping(value="/getQuote")
public String getRandomQuote(Model model) {
    ...
    return "quote";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...