class WebContext {

    /**
     * Blade instance, when the project is initialized when it will permanently reside in memory
     */
    private static Blade blade;

    /**
     * ContextPath, default is "/"
     */
    private static String contextPath;

    /**
     * Http Request instance of current thread context
     */
    private Request request;

    /**
     * Http Response instance of current thread context
     */
    private Response response;

    private Route route;

    private ChannelHandlerContext channelHandlerContext;

    public WebContext(Request request, Response response,
                      ChannelHandlerContext channelHandlerContext) {

        this.request = request;
        this.response = response;
        this.channelHandlerContext = channelHandlerContext;
    }

    public Request getRequest() {
        return request;
    }

    public Response getResponse() {
        return response;
    }

    public Environment environment() {
        return blade.environment();
    }

    /**
     * Get application environment information.
     *
     * @param key environment key
     * @return environment optional value
     */
    public Optional<String> getEnv(String key) {
        return blade().getEnv(key);
    }

    /**
     * Get application environment information.
     *
     * @param key          environment key
     * @param defaultValue default value, if value is null
     * @return environment optional value
     */
    public String getEnv(String key, String defaultValue) {
        return blade().getEnv(key, defaultValue);
    }

    public ChannelHandlerContext getChannelHandlerContext() {
        return channelHandlerContext;
    }

    public ChannelHandlerContext getHandlerContext() {
        return channelHandlerContext;
    }

    public Route getRoute() {
        return route;
    }

    public void setRoute(Route route) {
        this.route = route;
    }

    /**
     * Initializes the project when it starts
     *
     * @param blade       Blade instance
     * @param contextPath context path
     */
    public static void init(Blade blade, String contextPath) {
        WebContext.blade = blade;
        WebContext.contextPath = contextPath;
    }

    /**
     * Get current thread context WebContext instance
     *
     * @return WebContext instance
     */
    public static WebContext get() {
        return WEB_CONTEXT_THREAD_LOCAL.get();
    }

    /**
     * Get current thread context Request instance
     *
     * @return Request instance
     */
    public static Request request() {
        var webContext = get();
        return null != webContext ? webContext.request : null;
    }

    /**
     * Get current thread context Response instance
     *
     * @return Response instance
     */
    public static Response response() {<FILL_FUNCTION_BODY>}

    public static WebContext create(Request request, Response response, ChannelHandlerContext ctx) {
        WebContext webContext = new WebContext();
        webContext.request = request;
        webContext.response = response;
        webContext.channelHandlerContext = ctx;
        WEB_CONTEXT_THREAD_LOCAL.set(webContext);
        return webContext;
    }

    public static void set(WebContext webContext) {
        WEB_CONTEXT_THREAD_LOCAL.set(webContext);
    }

    public static void remove() {
        WEB_CONTEXT_THREAD_LOCAL.remove();
    }

    /**
     * Get blade instance
     *
     * @return return Blade
     */
    public static Blade blade() {
        return blade;
    }

    /**
     * Get context path
     *
     * @return return context path string, e.g: /
     */
    public static String contextPath() {
        return contextPath;
    }

    public static void clean() {
        WEB_CONTEXT_THREAD_LOCAL.remove();
        blade = null;
    }

}

        var webContext = get();
        return null != webContext ? webContext.response : null;
    
<no_super_class>