docs: public void setHeader(String name, String s, boolean checkInclude) {
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
              logger.entering(CLASS_NAME,"setHeader", " name --> " + name + " value --> " + PasswordNullifier.nullifyParams(s) + " checkInclude --> " + checkInclude + " ["+this+"]");
          }
  
          // d151464 - check the include flag
          WebAppDispatcherContext dispatchContext = (WebAppDispatcherContext) getRequest().getWebAppDispatcherContext();
          if (checkInclude&&dispatchContext.isInclude() == true) {
              if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
                  logger.logp(Level.FINE, CLASS_NAME,"setHeader", nls.getString("Illegal.from.included.servlet", "Illegal from included servlet"), "setHeader name --> " + name + " value --> " + PasswordNullifier.nullifyParams(s) + " checkInclude --> " + checkInclude);  //311717
              }
          }
          else {
              // make sure we don't have a null name...
              if (name == null) {
                  if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
                      logger.exiting(CLASS_NAME,"setHeader","name is null");
                  }
                  return;
              }
  
              // d128646 - if we're not ignoring state errors and response is committed or closed, throw an exception
              if (!_ignoreStateErrors && isCommitted()) {
  
                  // log a warning (only the first time)...ignore headers set after response is committed
                  IServletWrapper wrapper = dispatchContext.getCurrentServletReference();
                  if (logWarningActionNow(wrapper)) {
                      Throwable t = new Throwable();
                      logAlreadyCommittedWarning(t, "setHeader");
                  }
                  
                  if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
                      logger.exiting(CLASS_NAME,"setHeader","Response already committed");
                  }
                  return;
              }
  
              if (s == null) {
                  removeHeader(name);
              }
              else {
                  if (name.equalsIgnoreCase(WebContainerConstants.HEADER_CONTENT_TYPE)) {
                      // need to specially handle the content-type header
                      String value = s.toLowerCase();
                      int index = value.indexOf("charset=");
                      if (index != -1) {
                          _encoding = s.substring(index + 8);
                          s = s.substring(0, index) + "charset=" + _encoding;
                      }
                      else {
                          if (dispatchContext.isAutoRequestEncoding()) {  //306998.15
                              // only set default charset if auto response encoding is true.
                              // otherwise cts test will fail.
                              if (s.endsWith(";")) {
                                  s = s + "charset=" + getCharacterEncoding();
                              }
                              else {
                                  s = s + ";charset=" + getCharacterEncoding();
                              }
                          }
                      }
                      _contentType = s;
                  }
  
                  _response.setHeader(name, s);
              }
          }
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINE)) {  //306998.15
              logger.exiting(CLASS_NAME,"setHeader", " name --> " + name + " value --> " + PasswordNullifier.nullifyParams(s));
          }
      }