Programming/Web

[Web] web.xml 에러페이지 처리

성일만 2015. 1. 9. 16:19

web.xml 에러페이지 처리



API형태로 JSON으로 응답코드, 데이터를 리턴시 에러코드에 대한 대응이 필요했다.

기본적으로 web.xml에 아래와 같이 설정을 하면 각 각의 에러코드 발생시 지정해 놓은 jsp로 가게 된다.

하지만 Object에 결과값을 담아 리턴해야하기 때문에 페이지가 아닌 Controller로 이동시켜줘야 한다.

<error-page>

<error-code>401</error-code>

<location>/resources/common/error/serverError.jsp</location>

</error-page>

<error-page>

<error-code>403</error-code>

<location>/resources/common/error/serverError.jsp</location>

</error-page>

<error-page>

<error-code>404</error-code>

<location>/resources/common/error/notFound.jsp</location>

</error-page>

<error-page>

<error-code>500</error-code>

<location>/resources/common/error/serverError.jsp</location>

</error-page>


RequestMapping을 통한 Controller로 이동시키기

REST API형태이기 때문에 url pattern이 '/*' 이다.

<error-page>

<error-code>400</error-code>

<location>/error/400</location>

</error-page>

<error-page>

<error-code>401</error-code>

<location>/error/401</location>

</error-page>

<error-page>

<error-code>403</error-code>

<location>/error/403</location>

</error-page>

<error-page>

<error-code>404</error-code>

<location>/error/404</location>

</error-page>

<error-page>

<error-code>405</error-code>

<location>/error/405</location>

</error-page>

<error-page>

<error-code>500</error-code>

<location>/error/500</location>

</error-page>


일반적인 웹의 경우 사용할 일은 거의 없겠지만

* url pattern이 '*.do' 일 경우 아래와 같은 형식으로 지정

<error-page>

<error-code>400</error-code>

<location>/400/error.do</location>

</error-page>



@Controller

@RequestMapping(value = "/error")

public class ErrorController {

private static final Logger logger = LoggerFactory.getLogger(ErrorController.class);

/**

* HTTP Error GET

* @param code

* @return

* @throws Exception

*/

@RequestMapping(value = "/{code}", method = RequestMethod.GET)

@ResponseBody

public ResultVO methodErrorGet(@PathVariable int code) throws Exception{

logger.debug("HTTP Response Error Code : {}", code);

ResultVO resultVO = new ResultVO();

HttpStatus httpStatus = HttpStatus.valueOf(code);

resultVO.setCode(httpStatus.value());

return resultVO;

}


/**

* HTTP Error POST

* @param code

* @return

* @throws Exception

*/

@RequestMapping(value = "/{code}", method = RequestMethod.POST)

@ResponseBody

public ResultVO methodErrorPost(@PathVariable int code) throws Exception{

logger.debug("HTTP Response Error Code : {}", code);

ResultVO resultVO = new ResultVO();

HttpStatus httpStatus = HttpStatus.valueOf(code);

resultVO.setCode(httpStatus.value());

return resultVO;

}

}


* url pattern이 '*.do'일 경우

@RequestMapping(value = "/{code}/error.do") 와 같은 형태로 받을 수 있다.


'Programming > Web' 카테고리의 다른 글

[Web] JSTL FUNCTION  (0) 2015.03.10
[Web] GET / POST 한글 처리  (0) 2015.01.26
[Web] requestPath  (0) 2014.12.08
[Web] URI, URL, URN 이란?  (0) 2014.09.18
[Web] Servlet/JSP Programming  (0) 2014.09.18