Search in sources :

Example 1 with View

use of org.axe.bean.mvc.View in project Axe by DongyuCai.

the class DispatcherServlet method service.

@Override
public void service(HttpServletRequest request, HttpServletResponse response) {
    String contentType = ContentType.APPLICATION_JSON.CONTENT_TYPE;
    String characterEncoding = CharacterEncoding.UTF_8.CHARACTER_ENCODING;
    List<Filter> doEndFilterList = null;
    try {
        //获取请求方法与请求路径
        String requestMethod = RequestUtil.getRequestMethod(request);
        String requestPath = RequestUtil.getRequestPath(request);
        if (requestPath != null && requestPath.equals("/favicon.ico")) {
            return;
        }
        //获取 Action 处理器
        Handler handler = ControllerHelper.getHandler(requestMethod, requestPath);
        if (handler != null) {
            //获取 Controller  类和 Bean 实例
            Class<?> controllerClass = handler.getControllerClass();
            Method actionMethod = handler.getActionMethod();
            Object controllerBean = BeanHelper.getBean(controllerClass);
            contentType = handler.getContentType();
            characterEncoding = handler.getCharacterEncoding();
            //##1.创建你请求参数对象
            Param param;
            if (FormRequestHelper.isMultipart(request)) {
                //如果是文件上传
                param = FormRequestHelper.createParam(request, requestPath, handler.getMappingPath());
            } else {
                //如果不是
                param = AjaxRequestHelper.createParam(request, requestPath, handler.getMappingPath());
            }
            //                List<Object> actionParamList = this.convertRequest2RequestParam(actionMethod, param, request, response);
            //                param.setActionParamList(actionParamList);
            //##2.先执行Filter链
            List<Filter> filterList = handler.getFilterList();
            boolean doFilterSuccess = true;
            if (CollectionUtil.isNotEmpty(filterList)) {
                for (Filter filter : filterList) {
                    //被执行的Filter,都添加到end任务里
                    if (doEndFilterList == null) {
                        doEndFilterList = new ArrayList<>();
                    }
                    doEndFilterList.add(filter);
                    doFilterSuccess = filter.doFilter(request, response, param, handler);
                    //执行失败则跳出,不再往下进行
                    if (!doFilterSuccess)
                        break;
                }
            }
            //##3.执行Interceptor 列表
            List<Interceptor> interceptorList = handler.getInterceptorList();
            boolean doInterceptorSuccess = true;
            if (CollectionUtil.isNotEmpty(interceptorList)) {
                for (Interceptor interceptor : interceptorList) {
                    doInterceptorSuccess = interceptor.doInterceptor(request, response, param, handler);
                    if (!doInterceptorSuccess)
                        break;
                }
            }
            //##4.执行action
            if (doFilterSuccess && doInterceptorSuccess) {
                //调用 Action方法
                List<Object> actionParamList = this.convertRequest2RequestParam(actionMethod, param, request, response);
                Object result = ReflectionUtil.invokeMethod(controllerBean, actionMethod, actionParamList.toArray());
                if (result != null) {
                    if (result instanceof View) {
                        handleViewResult((View) result, request, response);
                    } else if (result instanceof Data) {
                        handleDataResult((Data) result, response, handler);
                    } else {
                        Data data = new Data(result);
                        handleDataResult(data, response, handler);
                    }
                }
            }
        } else {
            //404
            throw new RestException(RestException.SC_NOT_FOUND, "404 Not Found");
        }
    } catch (RedirectorInterrupt e) {
        //被中断,跳转
        View view = new View(e.getPath());
        try {
            handleViewResult(view, request, response);
        } catch (Exception e1) {
            LOGGER.error("中断,跳转 error", e);
        }
    } catch (RestException e) {
        //需要返回前台信息的异常
        writeError(e.getStatus(), e.getMessage(), response, contentType, characterEncoding);
    } catch (Exception e) {
        LOGGER.error("server error", e);
        //500
        writeError(RestException.SC_INTERNAL_SERVER_ERROR, "500 server error", response, contentType, characterEncoding);
        try {
            //邮件通知
            MailHelper.errorMail(e);
        } catch (Exception e1) {
            LOGGER.error("mail error", e1);
        }
    } finally {
        //##5.执行Filter链各个节点的收尾工作
        if (CollectionUtil.isNotEmpty(doEndFilterList)) {
            for (Filter filter : doEndFilterList) {
                try {
                    filter.doEnd();
                } catch (Exception endEx) {
                    LOGGER.error("filter doEnd failed", endEx);
                }
            }
        }
    }
}
Also used : RestException(org.axe.exception.RestException) Handler(org.axe.bean.mvc.Handler) Data(org.axe.bean.mvc.Data) Method(java.lang.reflect.Method) View(org.axe.bean.mvc.View) ServletException(javax.servlet.ServletException) RestException(org.axe.exception.RestException) IOException(java.io.IOException) Filter(org.axe.interface_.mvc.Filter) RequestParam(org.axe.annotation.mvc.RequestParam) Param(org.axe.bean.mvc.Param) Interceptor(org.axe.interface_.mvc.Interceptor) RedirectorInterrupt(org.axe.exception.RedirectorInterrupt)

Example 2 with View

use of org.axe.bean.mvc.View in project Axe by DongyuCai.

the class TestController method forward.

@Request(value = "/forward", method = RequestMethod.GET)
public View forward() {
    //浏览器端跳转
    View v = new View("someOneElse");
    v.addModel("arg1", "val1");
    return v;
}
Also used : View(org.axe.bean.mvc.View) HttpServletRequest(javax.servlet.http.HttpServletRequest) Request(org.axe.annotation.mvc.Request)

Aggregations

View (org.axe.bean.mvc.View)2 IOException (java.io.IOException)1 Method (java.lang.reflect.Method)1 ServletException (javax.servlet.ServletException)1 HttpServletRequest (javax.servlet.http.HttpServletRequest)1 Request (org.axe.annotation.mvc.Request)1 RequestParam (org.axe.annotation.mvc.RequestParam)1 Data (org.axe.bean.mvc.Data)1 Handler (org.axe.bean.mvc.Handler)1 Param (org.axe.bean.mvc.Param)1 RedirectorInterrupt (org.axe.exception.RedirectorInterrupt)1 RestException (org.axe.exception.RestException)1 Filter (org.axe.interface_.mvc.Filter)1 Interceptor (org.axe.interface_.mvc.Interceptor)1