一个默认页面跳转问题

记录一个前端页面问题:意图是在浏览器输入ip+port后自动跳转登陆页面login.html,springmvc拦截器添加:

1     @Override
2     public void addViewControllers(ViewControllerRegistry registry) {
3         registry.addViewController("/").setViewName("forward:/login.html");
4     }

但添加后拉起服务不定时报错:

查询后分析原因:Spring MVC 的 setViewName("forward:/xxx") 语法默认会通过视图解析器(比如 Thymeleaf、JSP)来解析这个路径。
如果:
当前项目模块没有配置视图解析器(比如 Thymeleaf、 JSP)
或者 /login.html 不在视图解析器的查找目录(如 templates/)

就会报:Could not resolve view with name 'forward:/login.html' in servlet with name 'dispatcherServlet'

修改为:

1     @Override
2     public void addViewControllers(ViewControllerRegistry registry) {
3         registry.addViewController("/").setViewName("redirect:/login.html");
4     }

日志中不定时的报错没有了,但当尝试使用/直接访问/login.html时,还有报错:

继续分析,login.html 放在 src/main/resources/static/ 目录下,是 Spring Boot 默认静态资源目录,不需要视图解析器。

采用addRedirectViewController,这个方法是专门用于跳转静态资源的重定向用法,不会走视图解析器,也不会报错。

1 @Override
2 public void addViewControllers(ViewControllerRegistry registry) {
3     registry.addRedirectViewController("/", "/login.html");
4 }

此段代码作用:

请求 /,
302 重定向到 /login.html
浏览器直接访问静态资源 /login.html
✅ 不会走视图解析器,不会报错

 

 

 

 

posted @ 2025-06-10 16:51  Marktowin  阅读(23)  评论(0)    收藏  举报