开发者社区 问答 正文

在jfinal之前放置servlet会报java.lang.IllegalSta?报错

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

在jfinal之前放置servlet会报java.lang.IllegalStateException: Committed,页面显示正常,只是会报错,请问怎么解决呢

java.lang.IllegalStateException: Committed
at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1136)
at org.eclipse.jetty.server.Response.sendError(Response.java:314)
at org.eclipse.jetty.server.Response.sendError(Response.java:416)
at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:486)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1336)
at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:82)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:365)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:662)

展开
收起
爱吃鱼的程序员 2020-06-22 15:43:11 516 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

      使用Handler处理一下此请求,直接过滤掉,不走jfinal内部。可能的原因是servlet中关闭了HttpServletResponse获得的writer,而jfinal中又再次使用该writer如果想走jfinal中转下呢,主要处理路径<divclass="ref">

    引用来自“莫莫水心”的答案

    <divclass=ref_body>如果想走jfinal中转下呢,主要处理路径<aclass='referer'target='_blank'>@JFinal我现在不走servlet的请求也报错诶。。。过滤好像解决不了问题。。。<divclass="ref">

    引用来自“莫莫水心”的答案

    <divclass=ref_body><aclass='referer'target='_blank'>@JFinal我现在不走servlet的请求也报错诶。。。过滤好像解决不了问题。。。

    <atarget="_blank"rel="nofollow"><aclass='referer'target='_blank'>@JFinal 我把jfinal的JFinalFilter这个类的最后改掉就好了

    StringreqUrl=request.getRequestURI();
    intindex=reqUrl.indexOf("servlet");
      intindex2=reqUrl.indexOf("services");
      
    if(isHandled[0]==false&&(index!=-1||index2!=-1))
    chain.doFilter(request,response);
    凡是servlet的,这个chain继续,走jfinal的,chain就断掉,这样改会有别的问题么?

    <divclass="ref">

    引用来自“莫莫水心”的答案

    <divclass=ref_body>

    <atarget="_blank"rel="nofollow"><aclass='referer'target='_blank'>@JFinal 我把jfinal的JFinalFilter这个类的最后改掉就好了

    StringreqUrl=request.getRequestURI();
    intindex=reqUrl.indexOf("servlet");
      intindex2=reqUrl.indexOf("services");
      
    if(isHandled[0]==false&&(index!=-1||index2!=-1))
    chain.doFilter(request,response);
    凡是servlet的,这个chain继续,走jfinal的,chain就断掉,这样改会有别的问题么?

    @<atarget="_blank"rel="nofollow">pandyyan 处理过了,亲,现在不是那个层面的问题

    publicclassSkipHandlerUseServletextendsHandler{


    /**
    过滤掉servlet和webservice的请求
    /
    publicvoidhandle(Stringtarget,HttpServletRequestrequest,
    HttpServletResponseresponse,boolean[]isHandled){
      intindex=target.indexOf("servlet");
      intindex2=target.indexOf("services");
      if(index==-1&&index2==-1){
           nextHandler.handle(target,request,response,newboolean[]{true});
    }
    }


    }
    是集成axis时候的问题,servlet的不报这个错,走jfinal的都报这个错

    上边的还有外加jfinal源码中的JfinalFilter中

    StringreqestUrl=request.getRequestURI();
    intindex=reqestUrl.indexOf("servlet");
    intindex1=reqestUrl.indexOf("services");
    intindex2=reqestUrl.indexOf("druid");
    //还有通过css,和js等静态请求
    booleanisStaticResource=isStatic(target);
    if(isHandled[0]==false&&(index+index1+index2>-3)||isStaticResource)
    chain.doFilter(request,response);

    自定义个Handler是可以处理的,不需要该源码。。。。<aclass='referer'target='_blank'>@JFinal

    2020-06-22 15:43:29
    赞同 展开评论