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

开发者社区> 问答> 正文

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

优选2 2020-06-09 10:58:46 114

关于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)
  • 优选2
    2020-06-09 10:59:03

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

    2:通过JFinalConfig.configHandler(Handlersme)的me.add(newXxxHandler())可以配置自义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(Handlersme)的me.add(newXxxHandler())可以配置自义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有类似的设置
    <!--HandlesHTTPGETrequestsfor/resources/**byefficientlyservingupstaticresourcesinthe${webappRoot}/resources/directory-->
       <mvc:resourcesmapping="/*.ico"location="/resources/"order="2"/>
       <mvc:resourcesmapping="/resources/**"location="/resources/"order="1"/>

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

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

推荐文章
相似问题
推荐课程