栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring MVC测试中如何避免“圆形视图路径”异常

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring MVC测试中如何避免“圆形视图路径”异常

这与Spring MVC测试无关。

当你不声明a时ViewResolver,Spring注册一个默认值InternalResourceViewResolver,该默认值创建的实例JstlView以呈现View。

的JstlView类扩展InternalResourceView其是

同一Web应用程序中的JSP或其他资源的包装。将模型对象公开为请求属性,然后使用javax.servlet.RequestDispatcher将请求转发到指定的资源URL。

该视图的URL应该用于指定Web应用程序中的资源,适用于RequestDispatcher的forward或include方法。

大胆是我的。。换句话说,视图渲染之前,将尝试获得RequestDispatcher到其中forward()。在执行此操作之前,它会检查以下内容

if (path.startsWith("/") ? uri.equals(path) : uri.equals(StringUtils.applyRelativePath(uri, path))) {    throw new ServletException("Circular view path [" + path + "]: would dispatch back " +  "to the current handler URL [" + uri + "] again. Check your ViewResolver setup! " +  "(Hint: This may be the result of an unspecified view, due to default view name generation.)");}

path视图名称在哪里,从中返回的名称

@Controller
。在此示例中,即
preference
。变量uri保存正在处理的请求的
uri /context/preferenc
e。

上面的代码意识到,如果要转发到

/context/preference
,则相同的
servlet
(因为相同的servlet处理了前一个)将处理请求,并且你将陷入无限循环。

当你使用特定的and 声明

a ThymeleafViewResolver
a ServletContextTemplateResolver
时,它会以不同的方式构建,并为它提供如下路径prefixsuffixView

WEB-INF/web-templates/preference.html

ThymeleafView实例使用以下命令相对于ServletContext路径 定位文件

ServletContextResourceResolver

templateInputStream = resourceResolver.getResourceAsStream(templateProcessingParameters, resourceName);`

最终

return servletContext.getResourceAsStream(resourceName);

这将获得相对于

ServletContext
路径的资源。然后,它可以使用
TemplateEngine
生成HTML。这里不可能发生无限循环。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/376231.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号