当前位置: 首页 > 知识库问答 >
问题:

Spring boot单页应用程序-将每个请求转发到索引。html

归翔
2023-03-14

我有一个Spring Boot(v1.3.6)单页应用程序(angular2),我想将所有请求转发到index.html

对http://localhost:8080/index.html的请求正在工作(200,我得到index.html),但http://localhost:8080/home不是(404)。

Runner.class

@SpringBootApplication
@ComponentScan({"packagea.packageb"})
@EnableAutoConfiguration
public class Runner {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext run = SpringApplication.run(Runner.class, args);
    }
}

WebAppConfig.class

@Configuration
@EnableScheduling
@EnableAsync
public class WebAppConfig extends WebMvcConfigurationSupport {

    private static final int CACHE_PERIOD_ONE_YEAR = 31536000;

    private static final int CACHE_PERIOD_NO_CACHE = 0;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.setOrder(-1);
        registry.addResourceHandler("/styles.css").addResourceLocations("/styles.css").setCachePeriod(CACHE_PERIOD_ONE_YEAR);
        registry.addResourceHandler("/app/third-party/**").addResourceLocations("/node_modules/").setCachePeriod(CACHE_PERIOD_ONE_YEAR);
        registry.addResourceHandler("/app/**").addResourceLocations("/app/").setCachePeriod(CACHE_PERIOD_NO_CACHE);
        registry.addResourceHandler("/systemjs.config.js").addResourceLocations("/systemjs.config.js").setCachePeriod(CACHE_PERIOD_NO_CACHE);
        registry.addResourceHandler("/**").addResourceLocations("/index.html").setCachePeriod(CACHE_PERIOD_NO_CACHE);
    }

}

styles.css/app/第三方/xyz/xyz.js,...正在工作(200和我得到正确的文件).只有/**index.html是不工作的。

共有3个答案

龙才俊
2023-03-14

这一条对我不管用:

return "forward:/";

多亏了Spring MVC@RestController和redirect,我找到了一个很好的解决方案:

@RequestMapping(value = "/{[path:[^\\.]*}")
public void redirect(HttpServletResponse response) throws IOException {
    response.sendRedirect("/");
}
南宫泓
2023-03-14

如果不查看日志,我不完全确定它为什么没有正确映射,但是如果您想将URL映射到视图(HTML),那么使用spring提供的viewController机制可能会更好http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-配置视图控制器。例如

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("home");
  }

}

(摘自上面链接的spring文档——这是您应该如何将url映射到视图,而不是重新定位静态资源的映射。)

我不确定资源映射是否有任何类型的后缀过滤——例如,我不知道spring如何决定将请求映射到ResourceHttpRequestHandler——您是否尝试过(只是确认或拒绝)类似于http://localhost:8080/home.html有电流吗?

您在上面定义的html映射也可能被忽略,索引也可能被删除。由于Spring Boot的默认主页行为,html才起作用:https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ResourceProperties.java#L108

马权
2023-03-14

您还可以添加转发控制器,如:

@Controller
public class ForwardingController {
    @RequestMapping("/{path:[^\\.]+}/**")
    public String forward() {
        return "forward:/";
    }
}

第一部分{path:[^\\.]}匹配除之外的一个或多个字符 。这将确保请求文件。ext不由此RequestMapping处理。如果还需要支持转发的子路径,请将/**放在{…}之外

 类似资料:
  • 我有NGINX作为反向代理运行,它将所有超文本传输协议和https流量转发到我的node.js应用程序,该应用程序监听localhost: port 然而,我的问题是节点。js应用程序将所有传入请求视为来自::ffff:127.0。0.1 如何更改NGINX配置,使真正的IP能够通过并转发到节点。js应用程序? 编辑:快车。js/node。js应用程序处理请求。ip和应用程序。启用(“信任代理”)

  • 问题内容: 我正在使用似乎成功的jQuery 执行-request。但是如何在服务器端使用它并修改响应? 我是否需要另一个Servlet,因为Faces Servlet并非旨在解决这个问题? 它用于以下过程: 用户输入调用JS的地址和点击 JS使用Google地图检索地理数据并将其发送到服务器(我正在考虑将其用于上述代码) 服务器响应从数据库发送一些接近的位置 JS再次使用Google地图检索精确

  • 我有一个小应用程序(HTML表单、servlet作为控制器和jsp文件),我试图弄清楚为什么我不能将请求从servlet转发到jsp文件。 问题是从html提交后,显示“HTTP状态404” null 谢谢! 项目层次结构:http://s23.postimg.org/kgt7r7lwb/capture.jpg main.html: 更新:问题可能出在Controller.java。当我尝试下面的

  • 我有一个应用程序,可以接受一个POST请求。为了请求,我需要定义一些标题、边界和连字符。换句话说,我需要制定完整的请求。我成功地使用了HttpURLConnection。现在,我想从我的Spring应用程序中请求应用程序。 比如说,我有三个应用程序A(传感器)、B(Spring)和C(服务器)。 在这种情况下,B将充当网桥,从a接收请求,对其进行身份验证并将其发送给C。 我不想在Spring中再次