【问题标题】:Returning static page with url path parameters返回带有 url 路径参数的静态页面
【发布时间】:2016-08-24 22:35:16
【问题描述】:

我有以下控制器

@Controller
@RequestMapping("/room/{roomId:^(?!main.html$).*}")
public class Rooms {

    @RequestMapping
    public String index(@PathVariable(value = "roomId") String id) {
       // do some stuff...
       return "main.html";
    }
}

我的资源/静态文件夹中有一个 main.html 文件。我想当用户去 /room/{something} 做一些处理时,返回我拥有的静态 main.html 页面。

我尝试的所有操作都会导致页面未找到异常或

javax.servlet.ServletException: Circular view path [main.html]: 
would dispatch back to the current handler URL 
[/room/main.html] again

我错过了什么才能让它工作?

感谢您的帮助

【问题讨论】:

  • 您在项目中添加了 InternalViewResolver?
  • 没有。我对这个春天的东西很陌生。我认为spring应该能够在没有任何配置的情况下处理html文件?如何添加内部视图解析器?
  • 另外,如果我没有 URL 路径参数然后返回 main.html,它可以正常工作。只有在我引入 URL 路径参数时才会出现问题。
  • 嘿!你解决了吗?我被困在完全相同的地方。

标签: java spring-mvc spring-boot request-mapping


【解决方案1】:

如果您在课堂上为视图解析器进行配置

@Bean
    public UrlBasedViewResolver urlBasedViewResolver()
    {
        UrlBasedViewResolver res = new InternalResourceViewResolver();
        res.setViewClass(JstlView.class);
        res.setPrefix("/WEB-INF/");
        res.setSuffix(".jsp");
        return res;
    }

如果使用 xml

<beans:bean     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/jsp/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

还可以通过以下代码更改您的控制器

@RestController
@RequestMapping("/room/")
public class Rooms {

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView index(@PathVariable(value = "roomId") String id) {
       // do some stuff...

       ModelAndView model = new ModelAndView();
        model.setViewName("main");
       return model;
    }
}

【讨论】:

  • 感谢您的建议。我会尽快尝试一下。几个问题。为什么我们将后缀设置为 .jsp?我的文件是 main.html。如果我的 html 文件位于资源/静态中,为什么前缀是 WEB-INF/jsp?我应该移动我的文件吗?最后,我当然可以将代码更改为您提供的代码。但是你能解释一下为什么返回模型和视图而不是我拥有的字符串吗?谢谢
  • 您也可以设置 .html。我使用 .jsp 这就是我编写的原因。您可以更改它。通常 jsp 文件保存在 web-Inf 内的文件夹中。但您可以更改文件也。它都是关于配置的。只需在配置文件中提及正确的位置就可以了。我没有尝试过返回字符串的方法,但你可以尝试。
猜你喜欢
  • 2017-09-08
  • 2012-11-10
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
相关资源
最近更新 更多