我在Spring Boot应用程序中有一个Controller
@Controller
public class MyController {
@RequestMapping("/vues/*.jsp")
public String views(HttpServletRequest request) {
return ((String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE)).substring(1);
}
}
在application.properties
server.context-path=/myapp
spring.mvc.view.prefix=/WEB-INF/myapp/
目标是在WEB-INF/myapp/vues/
目录中调度我的所有jsp,并使用.jsp URL保持旧应用程序的确切配置
我的应用应该像这样工作:
http://myapp/vues/page.jsp
vues/pages.jsp
/WEB-INF/myapp/
以找到好的JSP文件我已经开发了几个可以完美运行的Spring Boot应用程序,还有JSP等等。但似乎在这种情况下,以JSP结尾的url模式将不起作用。
我尝试使用@RequestMapping("/vues/*")
,spring.mvc.view.suffix=.jsp
在application.properties中的同一个应用程序,并调用相同的URL,但最后没有.jsp
,它工作。
有没有一个解决方案配置Spring Boot接受*.jsp
的RequestMapping
?
注意:我看过很多帖子都在讨论这个问题,但没有人回答这个问题
更新:我继续开发没有结束jsp,但在我覆盖的代码中,有调用response.sendRedirect("../vues/view1");
或request.getRequestDispatcher("../vues/view1.jsp")
和request.getRequestURI().endsWith("/vues/view1.jsp");
。一切似乎有点令人困惑。我知道(因为它已经在过去完成!)是否可以管理带有.jsp
结尾的URL。为什么这不是更受欢迎?为什么springboot会出现这样的问题?我必须编辑一个web.xml
文件来管理它吗?
您需要在一类配置中启用默认servlet。你可以通过这种方式做到这一点:
@Configuration @EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/");
resolver.setSuffix(".html");
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
在此之后,您可以使用@RequestMapping(“/ some-mapping”)而不指定.jsp终止。