问题:"/" 没有自动转到 "/index.html" ?
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");
}
}