@Override
 public void init(ServletConfig servletConfig) throws ServletException {
   // 初始化 Helper 类
   HelperLoader.init();
   // 获取 ServletContext 对象(用于注册Servlet)
   ServletContext servletContext = servletConfig.getServletContext();
   // 注册处理 JSP 的 Servlet
   ServletRegistration jspServlet = servletContext.getServletRegistration("jsp");
   jspServlet.addMapping(ConfigHelper.getAppJspPath() + "*");
   // 注册处理静态资源的默认 Servlet
   ServletRegistration defaultServlet = servletContext.getServletRegistration("default");
   defaultServlet.addMapping(ConfigHelper.getAppAssetPath() + "*");
 }
 @Override
 protected void service(HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException {
   //  获取请求方法与请求路径
   String requestMethod = req.getMethod().toLowerCase();
   String requestPath = req.getPathInfo();
   // 获取 Action 处理器
   Handler handler = ControllerHelper.getHandler(requestMethod, requestPath);
   if (handler != null) {
     // 获取 Controller 类及其 Bean 实例
     Class<?> controllerClass = handler.getControllerClass();
     Object controllerBean = BeanHelper.getBean(controllerClass);
     // 创建请求参数对象
     Map<String, Object> paramMap = new HashMap<String, Object>();
     Enumeration<String> paramNames = req.getParameterNames();
     while (paramNames.hasMoreElements()) {
       String paramName = paramNames.nextElement();
       String paramValue = req.getParameter(paramName);
       paramMap.put(paramName, paramValue);
     }
     String body = CodecUtil.decodeURL(StreamUtil.getString(req.getInputStream()));
     if (StringUtil.isNotEmpty(body)) {
       String[] params = StringUtil.splitString(body, "&");
       if (ArrayUtil.isNotEmpty(params)) {
         for (String param : params) {
           String[] array = StringUtil.splitString(param, "=");
           if (ArrayUtil.isNotEmpty(array) && array.length == 2) {
             String paramName = array[0];
             String paramValue = array[1];
             paramMap.put(paramName, paramValue);
           }
         }
       }
     }
     Param param = new Param(paramMap);
     // 调用 Action 方法
     Method actionMethod = handler.getActionMethod();
     Object result = ReflectionUtil.invokeMethod(controllerBean, actionMethod, param);
     // 处理 Action 方法返回值
     if (result instanceof View) {
       // 返回 JSP 页面
       View view = (View) result;
       String path = view.getPath();
       if (StringUtil.isNotEmpty(path)) {
         if (path.startsWith("/")) {
           resp.sendRedirect(req.getContextPath());
         } else {
           Map<String, Object> model = view.getModel();
           for (Map.Entry<String, Object> entry : model.entrySet()) {
             req.setAttribute(entry.getKey(), entry.getValue());
           }
           req.getRequestDispatcher(ConfigHelper.getAppJspPath() + path).forward(req, resp);
         }
       }
     } else if (result instanceof Data) {
       // 返回 Json 数据
       Data data = (Data) result;
       Object model = data.getModel();
       if (model != null) {
         resp.setContentType("application/json");
         resp.setCharacterEncoding("UTF-8");
         PrintWriter writer = resp.getWriter();
         String json = JsonUtil.toJson(model);
         writer.write(json);
         writer.flush();
         writer.close();
       }
     }
   }
 }