2016-06-14 2 views
1

я борюсь с проблемой, описанной здесьзапроса конфигурации Spring загрузки MVC перенаправлены Dispatcher снова

No mapping found for HTTP request with URI Spring MVC

Проблема однократно распознаватель ресурса разрешает вид, он снова перенаправлены на Dispatcher, который Безразлично» t найти метод, сопоставленный с ним.

Например, если пользователь запрашивает для /test и распознаватель отображает его /views/test.jsp, диспетчер вместо оказания ответа пытается для поиска пути /views/test.jsp снова.

Я попытался изменить путь сервлетов диспетчера по умолчанию на / (который, кстати, равен /).

Он не работает с конфигурацией Spring Boot.

Я хотел бы знать, есть ли решение для этого без установки пути диспетчера к чему-то, кроме /, как /page.

Следующий тестовый код для создания проблемы. (Вот GitHub ссылка на проект Test https://github.com/ConsciousObserver/stackoverflow/tree/master/TestMvc)

package com.example; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.context.embedded.ServletRegistrationBean; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.DispatcherServlet; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

@SpringBootApplication 
public class TestMvcApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(TestMvcApplication.class, args); 
    } 
} 

@Configuration 
class MvcConfig extends WebMvcConfigurerAdapter { 
    public MvcConfig() { 
     System.out.println("%%%%%%%%%%%%% " + getClass() + " loaded %%%%%%%%%%%%%%%"); 
    } 

    @Bean 
    public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) { 
     ServletRegistrationBean registration = new ServletRegistrationBean(
       dispatcherServlet); 
     System.out.println("%%%%%%%%%%%%%%%%% Adding dispatcher servletmapping"); 
     registration.addUrlMappings("/"); 
     return registration; 
    } 
} 

@Controller 
class TestController { 
    @RequestMapping("test") 
    public String test() { 
     return "test"; 
    } 
} 

application.properties

logging.level.org.springframework.web=DEBUG 

spring.mvc.view.prefix: /views/ 
spring.mvc.view.suffix: .jsp 

Ниже приведены соответствующие журналы

Returning [org.springframework.web.servlet.view.InternalResourceView: name 'test'; URL [/views/test.jsp]] based on requested media type 'text/html' 
Rendering view [org.springframework.web.servlet.view.InternalResourceView: name 'test'; URL [/views/test.jsp]] in DispatcherServlet with name 'dispatcherServlet' 
Forwarding to resource [/views/test.jsp] in InternalResourceView 'test' 
DispatcherServlet with name 'dispatcherServlet' processing GET request for [/views/test.jsp] 
Looking up handler method for path /views/test.jsp 
Did not find handler method for [/views/test.jsp] 
Matching patterns for request [/views/test.jsp] are [/**] 
URI Template variables for request [/views/test.jsp] are {} 
Mapping [/views/test.jsp] to HandlerExecutionChain with handler [ResourceHttpRequestHandler [locations=[ServletContext resource [/], class path resource [META-INF/resources/], class path resource [resources/], class path resource [static/], class path resource [public/]], resolvers=[[email protected]362712]]] and 1 interceptor 
Last-Modified value for [/views/test.jsp] is: -1 
Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling 
Successfully completed request 
Successfully completed request 
+0

Удалите свой 'MvcConfig', так как это нарушает правильную интеграцию, также вы действительно хотите использовать JSP? Это будет работать только с упаковкой 'war', и в вашем случае файлы jsp должны будут войти в' webapp/views'. –

+0

Не могли бы вы рассказать о том, как это нарушает конфигурацию, удаление его не помогает? Да, мне нужны JSP, поскольку я конвертирую унаследованный проект в Spring Boot, у него много JSP, и я еще не готов перейти на любой другой уровень представления. – 11thdimension

+0

Это ломается, потому что отключает (часть) автоматическую конфигурацию, которую вы, вероятно, все еще ожидаете работать. –

ответ

1

я, наконец, нашел решение.

Включая следующие зависимости, разрешает проблему.

<dependency> 
    <groupId>org.apache.tomcat.embed</groupId> 
    <artifactId>tomcat-embed-jasper</artifactId> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>jstl</artifactId> 
</dependency> 

Я предполагаю, что там была ошибка синтаксического анализа JSP внутренне (или JSTLView не присутствовал), который перенаправляет запрос на просмотр диспетчеру.

После включения этих зависимостей представление JSP отображается успешно.

Смежные вопросы