docs: public final void doWork(final HttpServletRequest pReq,
      final HttpServletResponse pResp) throws ServletException, IOException {
      pReq.setCharacterEncoding("UTF-8");
      pResp.setCharacterEncoding("UTF-8");
      try {
        HashMap<String, Object> reqVars = new HashMap<String, Object>();
        HttpRequestData requestData = new HttpRequestData(pReq, pResp);
        requestData.setAttribute("reqVars", reqVars);
        IHandlerRequest hndlI18nRequest = (IHandlerRequest) this
          .factoryAppBeans.lazyGet("hndlI18nRequest");
        hndlI18nRequest.handle(reqVars, requestData);
        String nmRnd = pReq.getParameter("nmRnd");
        if (this.defaultJsp != null && "index".equals(this.defaultJsp)) {
          //TODO extract into handler
          if (pReq.getParameter("logoff") != null) {
            pReq.getSession().invalidate();
          }
          @SuppressWarnings("rawtypes")
          SrvAddTheFirstUser srvAddFiU = (SrvAddTheFirstUser) getServletContext()
            .getAttribute("srvAddTheFirstUser");
          if (srvAddFiU != null && !srvAddFiU.checkIsThereAnyUser()) {
            nmRnd = "addFirstUser";
          }
        }
        if (nmRnd == null) {
          nmRnd = this.defaultJsp;
        }
        if (this.handlerName != null) {
          IHandlerRequest handleRequest = (IHandlerRequest) this
            .factoryAppBeans.lazyGet(this.handlerName);
          handleRequest.handle(reqVars, requestData);
        }
        ISrvI18n srvI18n = (ISrvI18n) this.factoryAppBeans.lazyGet("ISrvI18n");
        UtlJsp utlJsp = (UtlJsp) this.factoryAppBeans.lazyGet("UtlJsp");
        pReq.setAttribute("srvI18n", srvI18n);
        pReq.setAttribute("utlJsp", utlJsp);
        //renderer maybe overridden:
        String nmRnRd = (String) pReq.getAttribute("nmRnd");
        if (nmRnRd != null) {
          nmRnd = nmRnRd;
        }
        //processor can set redirect servlet, e.g. transactional to non-one:
        String srvlRd = (String) pReq.getAttribute("srvlRed");
        if (srvlRd != null) {
          RequestDispatcher rd = getServletContext().getRequestDispatcher(srvlRd);
          rd.forward(pReq, pResp);
        } else {
          String path = dirJsp + nmRnd + ".jsp";
          RequestDispatcher rd = getServletContext().getRequestDispatcher(path);
          rd.include(pReq, pResp);
        }
      } catch (Exception e) {
        if (this.factoryAppBeans != null) {
          ILog logger = null;
          try {
            logger = (ILog) this.factoryAppBeans.lazyGet("ILog");
            logger.error(null, getClass(), "WORK", e);
          } catch (Exception e1) {
            e1.printStackTrace();
            e.printStackTrace();
          }
        } else {
          e.printStackTrace();
        }
        if (e instanceof ExceptionWithCode) {
          pReq.setAttribute("error_code",
            ((ExceptionWithCode) e).getCode());
          pReq.setAttribute("short_message",
            ((ExceptionWithCode) e).getShortMessage());
        } else {
          pReq.setAttribute("error_code",
            HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
        pReq.setAttribute("javax.servlet.error.status_code",
          HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        pReq.setAttribute("javax.servlet.error.exception", e);
        pReq.setAttribute("javax.servlet.error.request_uri",
          pReq.getRequestURI());
        pReq.setAttribute("javax.servlet.error.servlet_name", this.getClass()
          .getCanonicalName());
        pResp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
      }
    }