关于jfinal处理请求的流程问题? 400 报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

关于jfinal处理请求的流程问题? 400 报错

爱吃鱼的程序员 2020-05-30 16:56:40 25

关于jfinal处理请求的流程问题? 400 报错

@JFinal 你好,想跟你请教几个问题:

1,jfinal处理流程中是否在jfianlfilter.dofilter()中就把请求通过handler处理了 如下

boolean[] isHandled = {false};
		try {
			handler.handle(target, request, response, isHandled);
		}
2,如果是这样的话那FilterChain还有什么用途 
if (isHandled[0] == false)
			chain.doFilter(request, response);
3,请求执行完成之后为什么ApplicationFilterChain这个责任链还会继续 明明isHandled[0]已经是ture了通过调试发现chain.doFilter也没有执行 可程序还是往下走了
Java
分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-05-30 16:56:41

    1:JFinal 顶层是一个 Handler链条,是责任链模式的一个变种。Handler会拦截到所有请求,包括静态资源请求,如 xxx.cs、yyy.js 请求

    2:通过JFinalConfig.configHandler(Handlers me)的 me.add(new XxxHandler())可以配置自义Handler

    3:自定义Handler可以自行判断决定是否应该处理当前请求。此外Handler如果不去调用nextHandler.handle(...),则本次请求处理到此为止,不会向下传递。最后Handler中可以设置isHandle[0]的值,如果设置为true,则JFinalFilter中不会将此请求传递给下一个Filter(在web.xml中配置的Filter)

    4:Handler链条的末端是ActionHandler,这是专门处理action动态请求的地方,如果当前请求被认定为action动态请求,则isHandle[0]会被立即置为1,即JFinal接管所有action动态请求,JFinalFilter不必传递给下个Filter

    5:isHandle[0]这个值主要用来告诉JFinalFilter是否应该将请求传递给下一个Filter,也可以用于在各个Handler之间利用该信息,做些符合需求的处理,例如某两个Handler约定,前一个Handler如果置isHandle[0]为true了,则后一个Handler就不必处理该请求了

        建议自建一个Handler调试一下,试着改变 isHandle[0]的值,看程序执行流程

    ######谢谢解答...######

    引用来自“JFinal”的答案

    1:JFinal 顶层是一个 Handler链条,是责任链模式的一个变种。Handler会拦截到所有请求,包括静态资源请求,如 xxx.cs、yyy.js 请求

    2:通过JFinalConfig.configHandler(Handlers me)的 me.add(new XxxHandler())可以配置自义Handler

    3:自定义Handler可以自行判断决定是否应该处理当前请求。此外Handler如果不去调用nextHandler.handle(...),则本次请求处理到此为止,不会向下传递。最后Handler中可以设置isHandle[0]的值,如果设置为true,则JFinalFilter中不会将此请求传递给下一个Filter(在web.xml中配置的Filter)

    4:Handler链条的末端是ActionHandler,这是专门处理action动态请求的地方,如果当前请求被认定为action动态请求,则isHandle[0]会被立即置为1,即JFinal接管所有action动态请求,JFinalFilter不必传递给下个Filter

    5:isHandle[0]这个值主要用来告诉JFinalFilter是否应该将请求传递给下一个Filter,也可以用于在各个Handler之间利用该信息,做些符合需求的处理,例如某两个Handler约定,前一个Handler如果置isHandle[0]为true了,则后一个Handler就不必处理该请求了

        建议自建一个Handler调试一下,试着改变 isHandle[0]的值,看程序执行流程

    借宝地问下:如果用了Nginx 、Tengine等,.css .js .html等静态文件就不需要jfinal处理了。。jfinal里该怎么配置呢?
    ######完全不需要处理。用 nginx、Tengin接管了 .css .js .html 静态请求,那么jfinal根本接收不到此类请求,又何需处理呢?######

    通过配置 web.xml  , 容器将请求 全部转给 jfinal  ,jfinal顶层 直接 用 indexof(".")  ,判断链接里 有没有点 ,有点 就交给容器处理 。没有就继续向下执行 。虽说复杂了点 ,但是性能损失可以忽略不计 。

    前段nginx如果拦截 了 带点的 静态请求 ,nginx就直接读硬盘发文件了 。后端 经都不会经过。

    ######因为springmvc有类似的设置
    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources/ directory -->
        <mvc:resources mapping="/*.ico" location="/resources/" order="2"/>
        <mvc:resources mapping="/resources/**" location="/resources/" order="1"/>

    看来我想多了。。。
    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题