HTTP 응답 상태 코드별로 처리할 JSP 지정하기
HTTP 프로토콜은 클라이언트가 웹서버에게 요청할 때 보내는 Request 메시지와 웹서버가 결과를 처리하고 응답하는 Response 메시지가 쌍으로 동작합니다. 이때 HTTP 프로토콜에는 Response 메시지에 웹서버에 처리 결과에 따른 상태코드를 포함하도록 규정하고 있습니다.

  • 2xx 클라이언트의 요청을 정상 처리
  • 3xx 리다이렉트
  • 4xx 클라이언트측 요청 오류
  • 5xx 서버 내부 오류

JSP/Servlet 컨테이너도 웹어플리케이션 서버이므로 HTTP 규약을 준수하기 때문에 동작에 따른 코드를 응답하도록 되어 있는데, 예를 들어 클라이언트가 서버에 존재하지 않는 자원의 경로를 요청한 경우 404 File Not Found를 응답하도록 하고 있습니다. 다음은 톰캣을 기준으로 존재하지 않는 JSP 페이지를 요청한 경우 응답된 결과입니다.


그러나 위와 같이 톰캣의 기본 오류 페이지가 출력되면 볼품 없고 사용자로부터 웹 어플리케이션은 신뢰도를 잃게 되며, 심지어 어떤 서버 환경인지 직접적인 정보를 공개해서 보안상에도 좋지 못할 수 있습니다.


네이버의 경우에는 404 오류에 대해 다음과 같은 페이지를 보여주도록 되어 있습니다.





web.xml의 <error-page> 태그로 에러 페이지 지정하기
WEB-INF/web.xml에 <error-page> 태그를 이용하여 응답 코드에 따라 처리할 JSP 경로를 지정할 수 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
      id="WebApp_ID" version="3.1">
      
      <error-page>
            <error-code>404</error-code>
            <location>/notFound.jsp</location>
      </error-page>
 
</web-app>
cs

 

 



notFound.jsp 
<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>        
      
<!DOCTYPE html>
<html>
<head>
      <meta charset="UTF-8">
</head>
<body>
죄송합니다.
 
 
요청하신 페이지를 찾을 수 없습니다.
<% response.setStatus(200); %>
</body>
</html>
cs

 

 

notFound.jsp 의 경우 보통의 JSP 페이지와 똑같이 작성해주면 됩니다. 마지막에 response.setStatus(200) 를 통해 강제로 상태코드를 200으로 변경하였는데, 이는 Internet Explorer 에서 오류 상태코드를 응답했을때의 문제와 관련된 처리입니다. 정확한 이유는 다음의 글을 참고합니다.


응답 결과




여러 응답 코드 맵핑하기
만약 404 이외에도 각각의 응답코드에 대한 처리를 맵핑하는 경우 다음과 같이 여러개의 <error-page> 태그를 사용할 수 있습니다.
      <error-page>
            <error-code>404</error-code>
            <location>/notFound.jsp</location>
      </error-page>
      
      <error-page>
            <error-code>500</error-code>
            <location>/internalEx.jsp</location>                                            
      </error-page>
cs

 



참고글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!