안녕하세요.
이번 시간에는 스프링에서 에러 페이지를 설정하는 방법에 대해서 알아보겠습니다.
Http 404 에러나 500에러가 발생했을때 에러 페이지 처리를 하지 않으면 브라우져에 서버의 사양이나 500에러의 경우 소스레벨 정보가 노출되기 때문에 보안상 문제가 될수도 있습니다.
그래서 적당하게 에러페이지를 만들어서 에러발생시 그 페이지를 리턴하는게 현명한 방법이라고 할 수 있습니다^^
먼저 web.xml에 아래와 같이 코딩합니다.
<error-page>
<error-code>400</error-code>
<location>/common/error400/</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/common/error403/</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/common/error404/</location>
</error-page>
<error-page>
<error-code>405</error-code>
<location>/common/error405/</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/common/error500/</location>
</error-page>
<error-page>
<error-code>503</error-code>
<location>/common/error503/</location>
</error-page>
컨트롤러단에는 아래와 같이 코딩합니다.
@RequestMapping(value="/common/error{error_code}/")
public ModelAndView error(HttpServletRequest request, @PathVariable String error_code) {
ModelAndView mv = new ModelAndView("/common/error");
String msg = (String) request.getAttribute("javax.servlet.error.message");
Map<string, object=""> map = new HashMap<string, object="">();
map.put("STATUS_CODE", request.getAttribute("javax.servlet.error.status_code"));
map.put("REQUEST_URI", request.getAttribute("javax.servlet.error.request_uri"));
map.put("EXCEPTION_TYPE", request.getAttribute("javax.servlet.error.exception_type"));
map.put("EXCEPTION", request.getAttribute("javax.servlet.error.exception"));
map.put("SERVLET_NAME", request.getAttribute("javax.servlet.error.servlet_name"));
try {
int status_code = Integer.parseInt(error_code);
switch (status_code) {
case 400: msg = "잘못된 요청입니다."; break;
case 403: msg = "접근이 금지되었습니다."; break;
case 404: msg = "페이지를 찾을 수 없습니다."; break;
case 405: msg = "요청된 메소드가 허용되지 않습니다."; break;
case 500: msg = "서버에 오류가 발생하였습니다."; break;
case 503: msg = "서비스를 사용할 수 없습니다."; break;
default: msg = "알 수 없는 오류가 발생하였습니다."; break;
}
} catch(Exception e) {
msg = "기타 오류가 발생하였습니다.";
} finally {
map.put("MESSAGE", msg);
}
//logging
if(map.isEmpty() == false ) {
Iterator<entry<string,object>> iterator = map.entrySet().iterator();
Entry<string,object> entry = null;
while(iterator.hasNext()) {
entry = iterator.next();
log.info("key : "+entry.getKey()+", value : "+entry.getValue());
}
}
mv.addObject("error", map);
return mv;
}
위의 코드에서 중요한 부분이 @PathVariable입니다.
@RequestMapping 의 URL 에서의 ({})의 명시된 변수를 받아오는 역활을 합니다.
error.jsp는 아래와 같이 코딩합니다.
<div>
<div>
<div> <c:out value="${error.STATUS_CODE }"> </c:out></div>
<div class="details">
<h3>${error.MESSAGE }</h3>
</div>
요즘은 시간이 너무 빨리 가는듯하네요.
가족과 함께 편안하고 즐거운 시간 보내시길 바랍니다.
이번 시간에는 여기까지 알아보겠습니다.
로그인을 하지 않아도 공감버튼은 누를수 있어요^^;;
도움되셨다면 공감버튼 한번 눌러주세용^^
굿밤~~~~^^*
Spring security “Access is denied” 오류 (0) | 2019.09.11 |
---|---|
table td 값을 ajax를 통해서 spring controller로 전송하는 방법 (3) | 2019.05.12 |
List<Map<String, Object>> 를 List<ArrayList<Map<String, Object>>>로 변환하기 (0) | 2019.02.15 |
스프링 array parameter list map 처리. (0) | 2019.02.01 |
web.xml welcome file list (0) | 2019.01.11 |
댓글 영역