Solon v3.0.3

问题:"/" 没有自动转到 "/index.html" ?

</> markdown

Solon 暂时不支持这种自动跳转,主要是这种场景越来越少了,感觉不值得为它查询两次。

有跳转的,需要自己处理一下:

1、路径转发(浏览器地址不变)

public class DemoController{
    @Mapping("/")
    public void home(Context ctx) {
        //在服务端重新路由到 /index.html (浏览器发生1次请求,地址不会变)
        ctx.forward("/index.html");
    }
}    

或者使用过滤器(性能更好些):

public class DefaultFilter implements Filter {
    @Override
    public void doFilter(Context ctx, FilterChain chain) throws Throwable {
        if ("/".equals(ctx.pathNew())){
            ctx.pathNew("/index.html");
        }
        
        chain.doFilter(ctx);
    }
}

所有目录的 404 都转到 index.html

public class DefaultFilter implements Filter {
    @Override
    public void doFilter(Context ctx, FilterChain chain) throws Throwable {
        try {
            chain.doFilter(ctx);
        } catch (StatusException e) {
            //如果 404 且路径以 / 结束(说明是目录)
            if (e.getCode() == 404 && ctx.pathNew().endsWith("/")) {
                ctx.forward(ctx.path() + "index.html");
            } else {
                throw e;
            }
        }
    }
}

2、路径重定向(浏览器地址会变)

public class DemoController{
    @Mapping("/")
    public void home(Context ctx) {
        //通过302方式,通知客户端跳转到 /index.html (浏览器会发生2次请求,地址会变成/index.html)
        ctx.redirect("/index.html");
    }
}