dropwizard应用程序中的配置更改与反应browserHistory一起使用

时间:2017-08-08 06:02:13

标签: java react-router react-redux dropwizard browser-history

我在react服务器上运行了dropwizard个应用。 {/ 1}}在/ ui上提供。当我打开/ ui上的url并导航应用程序(和goto / ui / content)时,它运行正常。但是当我尝试刷新/ app / content这样的特定页面时,它会提供bundle.js

我知道客户端渲染和服务器端渲染以及我需要对/ ui进行404调用并在客户端路由其余部分,但我找不到任何关于如何做的文档它在GET

我也知道使用dropwizard代替hashHistory会起作用(因为url的哈希部分没有发送到服务器),但我想知道是否可以使用browserHistory完成此操作。

有关于如何配置browserHistory服务器的文档,但我找不到express的任何内容。

1 个答案:

答案 0 :(得分:2)

在Dropwizard级别,您可以使用servlet过滤器重写URL。一个流行的实现是Tucky UrlRewriteFilter。您可以按如下方式实现它:

  1. 使用Dropwizard注册过滤器:

    @Override
    public void run(ExampleConfiguration configuration, Environment environment) {
        FilterRegistration.Dynamic registration = environment.servlets()
                .addFilter("UrlRewriteFilter", new UrlRewriteFilter());
        registration.addMappingForUrlPatterns(null, true, "/*");
        registration.setInitParameter("confPath", "urlrewrite.xml");
    }
    
  2. urlrewrite.xml配置文件添加到src/main/resources,添加重写规则

    <urlrewrite>
        <rule>
            <from>^/(?!(api|static/|manifest\.json|assets-manifest\.json|favicon\.ico)).*$</from>
            <to type="forward">/index.html</to>
        </rule>
    </urlrewrite>
    

    上述规则规定,如果请求路径与上述正则表达式匹配,则将请求转发给index.html文件。我以前测试的是create-react-app,其中输出是匹配器中列出的一些文件。这些文件不应该转发。

    正则表达式使用负前瞻,所以它就像一个否定。可能看起来我说如果路径匹配那些文件,那么前进,但实际上是相反的。如果您没有使用create-react-app,那么您的正则表达式将会有所不同。重点是否定你不想转发的文件。

  3. 我整理了一个工作演示。查看GitHub repo