JFinal学习--04Handler

JFinal中,所有请求统一通过JFinalFilter这个过滤器处理,当然我们也可以写自己的过滤器,但是必须放在 JFinalFilter之前,否则,有可能不会执行。这是因为,在JFinalFilter中,会判断 Handler是否执行完,执行完的话,会直接跳出过滤器,而不执行之后的过滤器。代码如下:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse)res;
        request.setCharacterEncoding(encoding);

        String target = request.getRequestURI();
        if (contextPathLength != 0)
            target = target.substring(contextPathLength);

        boolean[] isHandled = {false};
        try {
            handler.handle(target, request, response, isHandled);
        }
        catch (Exception e) {
            if (log.isErrorEnabled()) {
                String qs = request.getQueryString();
                log.error(qs == null ? target : target + "?" + qs, e);
            }
        }

        if (isHandled[0] == false)
            chain.doFilter(request, response);
    }

其实JFinal中没有必要定义过滤器,可以使用JFinal中的Handler。

JFinal中的Handler使用了责任链模式,一个handler持有下一个handler,形成一个链条,链条的最后一个则是ActionHandler,用来处理 AOP、Action方法执行以及页面生成。

Handler 是一个抽象类,它包含一个属性 next(持有的下一个Handler),以及一个抽象方法handle, 我们自定义Handler可以通过实现这个方法,来做一些个性化处理,比如访问权限。

在过滤器中,我们可以通过
next.handle(target, request, response, isHandled);
来实现类似过滤器中
chain.doFilter(request, response);
的效果。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值