code: protected NextJourney handleHtmlResponse(HtmlResponse response) {
          if (response.isForwardTo()) {
              gatherForwardRenderData(response); // not lazy to be in action transaction
          }
          if (response.isReturnAsEmptyBody()) {
              return createSelfContainedJourney(() -> { // to suppress render handling
                  readyHtmlResponseHandling(response);
              });
          } else {
              // lazy to write response after hookFinally()
              // for example, you can add headers in hookFinally() by action response
              // (and response handling should not be in transaction because of unexpected waiting)
              return createHtmlJourney(() -> {
                  readyHtmlResponseHandling(response);
                  if (response.isReturnAsEmptyBody()) {
                      return;
                  }
                  if (response.isReturnAsHtmlDirectly()) {
                      writeHtmlDirectly(response);
                      return;
                  }
                  if (response.isForwardTo()) {
                      setupPushedActionForm(response);
                      setupForwardRenderData();
                  }
                  if (response.isErrorsToSession()) {
                      saveErrorsToSession(response);
                  }
                  showHtmlTransition(response);
                  keepHtmlBodyForInOutLoggingIfNeeds(response);
              }, response);
          }
      }
docs: =============