я борюсь с проблемой, описанной здесьзапроса конфигурации 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
Удалите свой 'MvcConfig', так как это нарушает правильную интеграцию, также вы действительно хотите использовать JSP? Это будет работать только с упаковкой 'war', и в вашем случае файлы jsp должны будут войти в' webapp/views'. –
Не могли бы вы рассказать о том, как это нарушает конфигурацию, удаление его не помогает? Да, мне нужны JSP, поскольку я конвертирую унаследованный проект в Spring Boot, у него много JSP, и я еще не готов перейти на любой другой уровень представления. – 11thdimension
Это ломается, потому что отключает (часть) автоматическую конфигурацию, которую вы, вероятно, все еще ожидаете работать. –