【问题标题】:Problem with Spring MVC Controller and Servlet error [ERR_TOO_MANY_REDIRECTS]Spring MVC 控制器和 Servlet 错误问题 [ERR_TOO_MANY_REDIRECTS]
【发布时间】:2021-02-11 07:18:02
【问题描述】:

servlet 不做重定向,使用 Spring Boot 2.4.1。下面是代码和cmets。

类小服务程序

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 - 

Spring 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");
}
}

Project structure

Resources

此代码在浏览器 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";
}

将服务/服务更改为重定向:/索引将出现错误 ERR_TOO_MANY_REDIRECTS。也许资源路径有问题?感谢您的关注。

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    [已解决]

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 2016-03-06
      • 1970-01-01
      • 2010-12-30
      • 2012-11-23
      • 2018-04-07
      • 2020-03-27
      • 2011-03-19
      • 2012-12-30
      相关资源
      最近更新 更多