velocity 템 플 릿 엔진 학습 (3) - 이상 처리

14046 단어 velocity
전번 을 누 르 고 계속 하 세 요. 앞 에 Spring MVC 의 이상 처리Spring MVC 의 ajax 이상 처리 라 고 쓴 적 이 있 습 니 다. 오늘 은 velocity 템 플 릿 엔진 으로 바 꾼 후에 이상 페이지 를 어떻게 처리 하 는 지 보 겠 습 니 다.
오류
1     <error-page>
2         <error-code>404</error-code>
3         <location>/nopage.do</location>
4     </error-page>
5 
6     <error-page>
7         <error-code>500</error-code>
8         <location>/error.do</location>
9     </error-page>

웹. xml 에 이 두 가 지 를 추가 합 니 다. location 노드 를 주의 하 십시오. 물리 적 파일 경로 로 지정 한 것 이 아니 라 Spring MVC 에서 Controller 의 구체 적 인 방법 으로 매 핑 된 URI 입 니 다.
1     @RequestMapping(value = "/nopage.do", method = RequestMethod.GET)
2     public String pageNotFound(Locale locale, Model model) throws Exception {
3         return "errors/404";
4     }
5 
6     @RequestMapping(value = "/error.do", method = RequestMethod.GET)
7     public String innerError(Locale locale, Model model) throws Exception {
8         return "errors/500";
9     }

위 는 Controller 의 처리 입 니 다.
 
2. 일반적인 이상 처리
Controller 의 처 리 는 여전히 이전 과 같 습 니 다. 관건 은 errors / error. vm 이 템 플 릿 파일 을 어떻게 쓰 느 냐 입 니 다.
 1 <!doctype html>
 2 <html>
 3 <head>
 4     #parse("comm/header.vm")
 5     #set($ex=$request.getAttribute("ex"))
 6     <title>ERROR</title>
 7 </head>
 8 <body style="margin:20px">
 9 <H2>
10       :$ex.class.simpleName
11 </H2>
12 <hr/>
13 <P>
14     <strong></strong>$ex.message
15 </P>
16 
17 <P>
18     <strong></strong>
19 </P>
20     <pre>
21 #foreach($stack in $ex.getStackTrace())
22     $stack.toString()
23 #end
24     </pre>
25 </body>
26 </html>

주의: 5, 10, 21 - 23 이 몇 줄
 
3. ajax 이상 처리
BaseController 에서 json 문자열 을 직접 되 돌려 주 려 면 다음 코드 를 참고 하 십시오.
 1    @ExceptionHandler
 2     public String exp(HttpServletRequest request, HttpServletResponse response, Exception ex) throws Exception {
 3         String resultViewName = "errors/error";
 4 
 5         //     
 6         logger.error(ex.getMessage(), ex);
 7 
 8         //             
 9         if (ex instanceof BusinessException) {
10             resultViewName = "errors/biz-error";
11         } else {
12             //     
13             //ex = new Exception("    ,     !");
14         }
15 
16         String xRequestedWith = request.getHeader("X-Requested-With");
17         if (!StringUtils.isEmpty(xRequestedWith)) {
18             // ajax  
19             ResponseUtil.OutputJson(response, "{\"error\":\"" + ex.getClass().getSimpleName() + "\",\"detail\":\"" + ex.getMessage() + "\"}");
20         }
21         request.setAttribute("ex", ex);
22         return resultViewName;
23     }

관건 은 두 가지 가 있 습 니 다. 방법 서명 에 Http ServletResponse response 를 추가 한 다음 19 줄 에서 JSon 문자열 을 직접 출력 합 니 다. 그 중에서 Response Util 류 를 사 용 했 습 니 다. 이 유형의 주요 코드 는 다음 과 같 습 니 다.
 1     public static void OutputContent(HttpServletResponse response,
 2             String contentType, String content) throws IOException {
 3         response.setContentType(contentType + ";charset=utf-8");
 4         response.setCharacterEncoding("UTF-8");
 5         PrintWriter out = response.getWriter();
 6         out.println(content);
 7         out.flush();
 8         out.close();
 9     }
10 
11     public static void OutputJson(HttpServletResponse response, String content)
12             throws IOException {
13         OutputContent(response, "application/json", content);
14     }

좋은 웹페이지 즐겨찾기