当前位置: 首页 > 图灵资讯 > 技术篇> javax.servlet.ServletException: Circular view path

javax.servlet.ServletException: Circular view path

来源:图灵教育
时间:2023-08-13 09:37:05

javax.servlet.ServletException: Circular view path - 解析与解决

![Circular view path](

在Java 在Web开发中,我们经常遇到javax.servlet.ServletException: Circular view path异常。这种异常通常是由视图分析器配置错误或循环依赖引起的。本文将详细介绍异常的原因和常见的解决方案,并提供一些实际的代码示例。

异常原因分析

Spring 在MVC中,视图分析器(View Resolver)负责将控制器方法返回的逻辑视图名分析为特定的视图对象。当控制器方法返回的逻辑视图名与实际视图名相同时,Circular就会出现 view path异常。

例如,我们有以下控制器方法:

@GetMapping("/home")public String home(Model model) {    model.addAttribute("message", "Hello World");    return "home";}

假设我们的视图解析器配置了逻辑视图名和前缀"/WEB-INF/views/"并加上后缀".jsp",然后视图解析器将逻辑视图名称"home"解析为"/WEB-INF/views/home.jsp"。但是,如果我们的项目结构已经被称为"home.jsp"视图解析器将其视为视图文件,而非逻辑视图。因此,会出现循环引用,从而抛出Circularar view path异常。

解决办法

解决Circular view path异常有以下几种方法:

1. 检查视图分析器的配置

首先,我们需要检查视图分析器的配置,以确保逻辑视图名和实际视图名不重复。如果有重复,我们需要修改视图分析器的配置,以避免循环引用。

例如,我们可以将视图分析器的前缀和后缀修改为其他值,也可以将逻辑视图名改为与实际视图名不同的值。

@Beanpublic InternalResourceViewResolver viewResolver() {    InternalResourceViewResolver resolver = new InternalResourceViewResolver();    resolver.setPrefix("/WEB-INF/views/");    resolver.setSuffix(".jsp");    return resolver;}
2. 检查控制器法的返回值

此外,我们还需要检查控制器方法的返回值。确保返回的是逻辑视图名,而不是实际视图名。

例如,我们可以用它redirect:前缀将返回值改为重定向URL。

@GetMapping("/home")public String home(Model model) {    model.addAttribute("message", "Hello World");    return "redirect:/home";}
3. 检查URL路径映射

最后,我们还需要检查URL路径映射的配置。确保URL路径映射与返回的逻辑视图名没有冲突。

例如,如果我们的URL路径映射为/home,控制器方法返回的逻辑视图名也是/home,然后就会出现循环引用。

@GetMapping("/home")public String home(Model model) {    model.addAttribute("message", "Hello World");    return "/home";}
代码示例

下面是一个完整的Spring MVC项目的代码示例演示了如何避免Circularr view path异常。

1. 视图分析器配置
@Beanpublic InternalResourceViewResolver viewResolver() {    InternalResourceViewResolver resolver = new InternalResourceViewResolver();    resolver.setPrefix("/WEB-INF/views/");    resolver.setSuffix(".jsp");    return resolver;}
2. 控制器方法
@Controllerpublic class HomeController {    @GetMapping("/home")    public String home(Model model) {        model.addAttribute("message", "Hello World");        return "home";    }}
3. 视图文件

/WEB-INF/views/在目录下创建名称"home.jsp"的文件。

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Home</title></head><body>    ${message}</body></html>

上一篇:

java8字符串链接

下一篇:

Java中Integer方法