You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC中dispatcherServlet无法解析getAllUsers视图求助

问题描述

访问http://localhost:8081/user/getAllUsers时出现白标错误,报错信息如下:

上下文路径为[]的servlet [dispatcherServlet]执行Servlet.service()时抛出异常:[无法在名为'dispatcherServlet'的servlet中解析名为'getAllUsers'的视图]
根本原因:
jakarta.servlet.ServletException: Could not resolve view with name 'getAllUsers' in servlet with name 'dispatcherServlet'
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1394) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1159) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1098) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.0.10.jar:6.0.10]

已确认的信息:

  • JSP文件getAllUsers.jsp位于webapp/WEB-INF/jsp/user/路径下
  • 控制器中存在处理/user/getAllUsersGET请求的方法,返回视图名getAllUsers
  • Spring MVC配置类中视图解析器前缀为/WEB-INF/jsp/,后缀为.jsp

控制器代码:

@Controller
@RequestMapping("/user")
@EnableWebMvc
@ComponentScan(basePackages = "com.example.UserManagment")
public class UserController {
    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }
    @GetMapping("/getUser")
    public Optional<UserModel> showUser(@RequestParam Long id){
        return userService.findById(id);
    }
    @GetMapping("/getAllUsers")
    public String showAllUser(Model model){
        List<UserModel> users = userService.getAll();
        model.addAttribute("users",users);
        return "getAllUsers";
    }
}
解决方案

1. 修正视图名路径匹配

你的JSP文件实际路径是/WEB-INF/jsp/user/getAllUsers.jsp,结合视图解析器的前缀/WEB-INF/jsp/和后缀.jsp,返回的视图名需要加上user/前缀才能匹配到文件。修改控制器方法:

@GetMapping("/getAllUsers")
public String showAllUser(Model model){
    List<UserModel> users = userService.getAll();
    model.addAttribute("users",users);
    return "user/getAllUsers"; // 补充user/路径前缀
}

2. 迁移全局配置注解

@EnableWebMvc和@ComponentScan是Spring MVC的全局配置注解,不应放在控制器类上,需创建独立的配置类:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.UserManagment")
public class WebConfig implements WebMvcConfigurer {
    // 配置视图解析器
    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

然后删除控制器类上的@EnableWebMvc和@ComponentScan注解,控制器仅保留业务相关注解:

@Controller
@RequestMapping("/user")
public class UserController {
    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }
    @GetMapping("/getUser")
    public Optional<UserModel> showUser(@RequestParam Long id){
        return userService.findById(id);
    }
    @GetMapping("/getAllUsers")
    public String showAllUser(Model model){
        List<UserModel> users = userService.getAll();
        model.addAttribute("users",users);
        return "user/getAllUsers";
    }
}

3. 验证文件路径一致性

确认webapp/WEB-INF/jsp/user/getAllUsers.jsp文件存在,且文件名大小写与返回的视图名完全匹配(Spring MVC视图解析默认区分大小写)。

内容的提问来源于stack exchange,提问作者Kunciak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:54:57