### 1、Context::forward

forward 是在服务端，把当前请求“路径”（比如：/）转换为一个“新路径”（比如：/index）（是当前服务端的路径），通过 `Solon.app().handler()` （不会再执行过滤器）再执行一次;

客户端对它的感觉是：

* 请求只发生一次
* 请求的地求没变化（例：请求的是 /）


内部实现代码：

```java
public void forward(String pathNew) {
    pathNew(pathNew); //新地址，必须是路由器内存在的

    Solon.app().handler().handle(this);
}
```

Solon 的 ContextPath 特性的，其内部就是基于 pathNew 这个特性实现的。forward 执行时，会重新经过 filter, routerInterceptor。也可以通过 filter 实现相同效果，例：

```java
import org.noear.solon.core.handle.Context;
import org.noear.solon.core.handle.Filter;
import org.noear.solon.core.handle.FilterChain;

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

### 2、Context::redirect

redirect 是服务端，输出头信息 Location=“新地址”（例如：/index）和 头信息 Status=302，通知客户端用“新地址”再发起一次请求

客户端对它的感觉是：

* 请求了两次 
* 请求的地求也变化了
* 可以跳转到其它域名的地址


内部实现代码：

```java
public void redirect(String url) {
    redirect(url, 302);
}

public void redirect(String url, int code) {
    headerSet("Location", url); //可以是相对地址，也可以是绝对地址；也可以是其它域的地址
    status(code);
}
```
