我在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网址
我的应用应该像这样工作:
用户致电http://myapp/vues/page.jsp
我的应用程序接收调用并在我的控制器中找到处理程序,因为URL与RequestMapping网址格式相匹配
我的处理程序返回vues/pages.jsp
Spring Boot添加/WEB-INF/myapp/
以查找好的JSP文件
我已经开发了几个可以完美运行的Spring Boot应用程序,使用JSP等等。但在这种情况下,以JSP结尾的url模式将无效。
我在app.properties中使用@RequestMapping("/vues/*")
,spring.mvc.view.suffix=.jsp
尝试相同的应用,并调用相同的网址,但最后没有.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
文件来管理它吗?
答案 0 :(得分:0)
您需要在一类配置中启用默认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终止。