问题与Spring MVC控制器和Servlet错误[ERR_TOO_MANY_REDIRECTS]



servlet不做重定向,使用Spring Boot 2.4.1。下面的代码和注释

servlet类

code

@WebServlet(name = "estore",
urlPatterns = {"/"},
loadOnStartup = 1)
public class EstoreServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws 
IOException{                                            
// Here logic and after need redirect
response.sendRedirect("/index.html");
}
}

请求信息

code

Session - org.apache.catalina.session.StandardSessionFacade@2e555cdd
Servlet path - /
Server name - localhost
Local name - 0:0:0:0:0:0:0:1
Local addr - 0:0:0:0:0:0:0:1
Get Remote user - null
Get method - GET
Get protocol - HTTP/1.1
Get content type - null
Get server port - 8080
Get sheme - http
Get Request URI - /
Get Context Path - 

MVC配置文件

code

@Configuration
@ServletComponentScan(basePackages = "internet_store.web_ui.servlet")
@EnableWebMvc
public class MvcConfiguration implements WebMvcConfigurer {
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver resourceViewResolver = new SpringResourceTemplateResolver();
resourceViewResolver.setPrefix("classpath:/templates/internet_store/");
resourceViewResolver.setSuffix(".html");
resourceViewResolver.setTemplateMode(TemplateMode.HTML);
resourceViewResolver.setCharacterEncoding("UTF-8");
resourceViewResolver.setCheckExistence(false);
return resourceViewResolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/resources/**")
.addResourceLocations("/resources/", "classpath:/templates/internet_store/")
.setCachePeriod(320000)
.resourceChain(true)
.addResolver(new PathResourceResolver());
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable("estore");
}
}

项目结构

资源此代码返回浏览器ERR_TOO_MANY_REDIRECTS错误。如果在控制器设置中,返回"redirect:/foo"然后重定向不做。在下面的例子。

code

@GetMapping(value = "/back_client")
public String backButtonClientFormPressed() {

return "service/service";
}       

index.html有控制器方法

code

@GetMapping(value = "/index")
public String index(ModelMap modelMap) {
updatePage();
Path resourceDirectory = Paths.get("resources");
modelMap.addAttribute("error", "");
refreshData(modelMap);
return "index";
}

将service/service改为redirect:/index指向错误ERR_TOO_MANY_REDIRECTS。也许是资源路径的问题?谢谢您的关注。

[SOLVED]

需要删除response.sendRedirect("/index.html");从servlet类中添加

@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/index");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}

最新更新