RequestMapping以jsp结尾的URL模式

时间:2018-02-22 15:13:38

标签: java spring jsp spring-boot

我在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网址

保持旧应用的确切配置

我的应用应该像这样工作:

  1. 用户致电http://myapp/vues/page.jsp

  2. 我的应用程序接收调用并在我的控制器中找到处理程序,因为URL与RequestMapping网址格式相匹配

  3. 我的处理程序返回vues/pages.jsp

  4. Spring Boot添加/WEB-INF/myapp/以查找好的JSP文件

  5. 我已经开发了几个可以完美运行的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文件来管理它吗?

1 个答案:

答案 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终止。