RequestMapping以jsp结尾的URL模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RequestMapping以jsp结尾的URL模式相关的知识,希望对你有一定的参考价值。

我在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保持旧应用程序的确切配置

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

  1. 用户致电http://myapp/vues/page.jsp
  2. 我的应用程序接收调用并在我的控制器中找到处理程序,因为URL与RequestMapping url模式匹配
  3. 我的经纪人返回vues/pages.jsp
  4. Spring Boot添加/WEB-INF/myapp/以找到好的JSP文件

我已经开发了几个可以完美运行的Spring Boot应用程序,还有JSP等等。但似乎在这种情况下,以JSP结尾的url模式将不起作用。

我尝试使用@RequestMapping("/vues/*")spring.mvc.view.suffix=.jsp在application.properties中的同一个应用程序,并调用相同的URL,但最后没有.jsp,它工作。

有没有一个解决方案配置Spring Boot接受*.jspRequestMapping

注意:我看过很多帖子都在讨论这个问题,但没有人回答这个问题

更新:我继续开发没有结束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终止。

以上是关于RequestMapping以jsp结尾的URL模式的主要内容,如果未能解决你的问题,请参考以下文章

为啥当参数以(.pl)结尾时,Spring MVC @RequestMapping 会为映射(/user/username:.+)抛出 406 错误

如何将参数从漂亮的 URL 传递到 JSP 页面?

Jsp第二课 Servlet入门学习

Spring 4:如何将 RequestMapping URL 映射到特定控制器

JSP 中的 Spring MVC 请求 URL

springmvc中@RequestMapping的使用