[Java] JFinal核心类之ActionHandler →→→→→进入此内容的聊天室

来自 , 2020-04-10, 写在 Java, 查看 100 次.
URL http://www.code666.cn/view/4da04049
  1. /**
  2.  * ActionHandler
  3.  */
  4. final class ActionHandler extends Handler {
  5.  
  6.   private final boolean devMode;
  7.   private final ActionMapping actionMapping;
  8.   private static final RenderFactory renderFactory = RenderFactory.me();
  9.   private static final Logger log = Logger.getLogger(ActionHandler.class);
  10.  
  11.   public ActionHandler(ActionMapping actionMapping, Constants constants) {
  12.     this.actionMapping = actionMapping;
  13.     this.devMode = constants.getDevMode();
  14.   }
  15.  
  16.   /**
  17.    * handle
  18.    * 1: Action action = actionMapping.getAction(target)
  19.    * 2: new ActionInvocation(...).invoke()
  20.    * 3: render(...)
  21.    */
  22.   public final void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
  23.     if (target.indexOf(".") != -1) {
  24.       return ;
  25.     }
  26.    
  27.     isHandled[0] = true;
  28.     String[] urlPara = {null};
  29.     Action action = actionMapping.getAction(target, urlPara);
  30.    
  31.     if (action == null) {
  32.       if (log.isWarnEnabled()) {
  33.         String qs = request.getQueryString();
  34.         log.warn("Action not found: " + (qs == null ? target : target + "?" + qs));
  35.       }
  36.       renderFactory.getError404Render().setContext(request, response).render();
  37.       return ;
  38.     }
  39.    
  40.     try {
  41.       Controller controller = action.getControllerClass().newInstance();
  42.       controller.init(request, response, urlPara[0]);
  43.      
  44.       if (devMode) {
  45.         boolean isMultipartRequest = ActionReporter.reportCommonRequest(controller, action);
  46.         new ActionInvocation(action, controller).invoke();
  47.         if (isMultipartRequest) ActionReporter.reportMultipartRequest(controller, action);
  48.       }
  49.       else {
  50.         new ActionInvocation(action, controller).invoke();
  51.       }
  52.      
  53.       Render render = controller.getRender();
  54.       if (render instanceof ActionRender) {
  55.         String actionUrl = ((ActionRender)render).getActionUrl();
  56.         if (target.equals(actionUrl))
  57.           throw new RuntimeException("The forward action url is the same as before.");
  58.         else
  59.           handle(actionUrl, request, response, isHandled);
  60.         return ;
  61.       }
  62.      
  63.       if (render == null)
  64.         render = renderFactory.getDefaultRender(action.getViewPath() + action.getMethodName());
  65.       render.setContext(request, response, action.getViewPath()).render();
  66.     }
  67.     catch (RenderException e) {
  68.       if (log.isErrorEnabled()) {
  69.         String qs = request.getQueryString();
  70.         log.error(qs == null ? target : target + "?" + qs, e);
  71.       }
  72.     }
  73.     catch (Error404Exception e) {
  74.       if (log.isWarnEnabled()) {
  75.         String qs = request.getQueryString();
  76.         log.warn("Resource not found: " + (qs == null ? target : target + "?" + qs));
  77.       }
  78.       e.getError404Render().setContext(request, response).render();
  79.     }
  80.     catch (Error500Exception e) {
  81.       if (log.isErrorEnabled()) {
  82.         String qs = request.getQueryString();
  83.         log.error(qs == null ? target : target + "?" + qs, e);
  84.       }
  85.       e.getError500Render().setContext(request, response).render();
  86.     }
  87.     catch (Exception e) {
  88.       if (log.isErrorEnabled()) {
  89.         String qs = request.getQueryString();
  90.         log.error(qs == null ? target : target + "?" + qs, e);
  91.       }
  92.       renderFactory.getError500Render().setContext(request, response).render();
  93.     }
  94.   }
  95. }//源代码片段来自云代码http://yuncode.net
  96.                        

回复 "JFinal核心类之ActionHandler"

这儿你可以回复上面这条便签

captcha