본문 바로가기
Spring/Spring 기초

web.xml를 통해서 HTTP오류처리(상태코드를 사용해서 처리)

by 미눅스[멘토] 2023. 8. 11.
728x90

톰켓으로 오류처리하는것

web.xml에 코드작성

	<!--상태 코드를 사용하여 오류 페이지 설정 시작
	web.xml : tomcat서버의 설정
			스프링 웹 프로젝트가 실행되면 가장 먼저 web.xml 파일을 읽어들이고
			위부터 아래로 읽어드리면서 태그를 해석함
	HTTP 오류코드
	400  : Bad Request. 문법 오류(잘못 입력한 url)
	404* : Not Found, 요청한 문서를 못찾음(url확인 및 캐시 삭제 필요)
	405  : Method not allowed. 메소드 허용 안됨 (메소드 매핑이 안 될때)
	415  : 서버 요청에 대한 승인 거부(contentType, Content Encoding 데이터 확인 필요)
	500* : 서버 내부 오류, (웹 서버가 요청사항을 수행할 수 없음, 개발자 오류)
	505  : Http Version Not Supported
	
	error-code : HTTP상태 코드
	location : 이동 대상 페이지 또는 URI
	-->
	<error-page>
		<error-code>400</error-code>
		<location>/error/error400</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/error/error404</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/error/error500</location>
	</error-page>
</web-app>

 

 

이건 전체 코드

<?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/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
id="WebApp_ID" version="3.1">
<!-- 
web.xml : tomcat서버의 설정
웹 프로젝트의 배포 설명자/배치 기술서(deployment description)이며, 웹 프로젝트가 배포되는 데 이용되는 XML 형식의
자바 웹 애플리케이션 환경 설정 부분을 담당함
스프링 웹 프로젝트가 실행되면 가장 먼저 web.xml 파일을 읽어들이고 위부터 차례대로 태그를 해석함

1) 네임 스페이스 : 코드에서 이름은 같지만 내용이 전혀 다른 요소와 충돌하지 않도록 요소들을 구별하는 데 사용함
2) 스키마 : 코드의 구조와 요소, 속성의 관계를 정의하여 다양한 자료형을 사용할 수 있도록 정의된 문서 구조, 즉 틀을 의미
 xsi:schemaLocation 속성은 참조하고자 하는 인스턴스 문서의 URI를 지정함
 	두 개의 속성 값은 공백으로 구분. 첫 번재는 사용할 네임 스페이스(보통 기본 네임 스페이스와 동일)이고,
 		두 번째는 참조할 스키마 파일 이름

 -->

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		
		<!-- 파일업로드 설정 시작 -->
		<multipart-config>
			<location>c:\\upload</location><!-- 어딘데? -->
			<max-file-size>20971520</max-file-size><!-- 최대가 얼만데? 20MB -->
			<max-request-size>41943040</max-request-size><!-- 한번에 최대가 얼만데? 40M -->
			<file-size-threshold>20971520</file-size-threshold><!-- 메모리 사용 크기 : 20MB -->
		</multipart-config>
		<!-- 파일업로드 설정 끝 -->
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<!-- 한글 처리.. request.setCharacterEncoding("UTF-8") 안해도 됨-->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<!-- 파일업로드 설정 시작.한글 처리 다음에 넣기! -->
	<filter>
		<display-name>springMultipartFilter</display-name>
		<filter-name>springMultipartFilter</filter-name>
		<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>springMultipartFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- 파일업로드 설정 끝 -->
	
	<!--상태 코드를 사용하여 오류 페이지 설정 시작
	web.xml : tomcat서버의 설정
			스프링 웹 프로젝트가 실행되면 가장 먼저 web.xml 파일을 읽어들이고
			위부터 아래로 읽어드리면서 태그를 해석함
	HTTP 오류코드
	400  : Bad Request. 문법 오류(잘못 입력한 url)
	404* : Not Found, 요청한 문서를 못찾음(url확인 및 캐시 삭제 필요)
	405  : Method not allowed. 메소드 허용 안됨 (메소드 매핑이 안 될때)
	415  : 서버 요청에 대한 승인 거부(contentType, Content Encoding 데이터 확인 필요)
	500* : 서버 내부 오류, (웹 서버가 요청사항을 수행할 수 없음, 개발자 오류)
	505  : Http Version Not Supported
	-->
	<error-page>
		<error-code>400</error-code>
		<location>/error/error400</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/error/error400</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/error/error400</location>
	</error-page>
</web-app>

 

 

 

Utill패키지 안에 ErrorController 클래스 생성

 

ErrorController클래스

에서 에러 처리할 url 메소드 작성

package kr.or.ddit.util;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class ErrorController {
	
	//요청URI : /error/error400
	@GetMapping("/error/error400")
	public String error400() {
		//forwarding
		return "error/error400";
	}
	//요청URI : /error/error404
	@GetMapping("/error/error404")
	public String error404() {
		//forwarding
		return "error/error404";
	}
	
	//요청URI : /error/error500
	@GetMapping("/error/error500")
	public String error500() {
		//forwarding
		return "error/error500";
	}
}

를 작성한다.

그리고 url 에 맞는 폴더 및 jsp생성해준다.

 

 

 

jsp에 오류를 처리할 코드를 작성한다.

 


error400.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<section class="content">
	<div class="error-page">
		<h2 class="headline text-warning">400</h2>
		<div class="error-content">
			<h3>
				<i class="fas fa-exclamation-triangle text-warning"></i> Oops! Bad
				Request.
			</h3>
			<p>
				We could not find the page you were looking for. Meanwhile, you may
				<a href="/">return to dashboard</a> or try using the search form.
			</p>
		</div>

	</div>

</section>

 

error500.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<section class="content">
	<div class="error-page">
		<h2 class="headline text-danger">500</h2>
		<div class="error-content">
			<h3>
				<i class="fas fa-exclamation-triangle text-danger"></i> Oops!
				Something went wrong.
			</h3>
			<p>
				We will work on fixing that right away. Meanwhile, you may <a
					href="/">return to dashboard</a> or try using the
				search form.
			</p>
		</div>
	</div>
</section>

 

그리고 서버 재가동 후 확인해보기

없는 url치묜!!! 끝!

 

결과 확인!

'Spring > Spring 기초' 카테고리의 다른 글

Spring 시큐리티 환경설정  (0) 2023.08.11
spring 어노테이션을 이용한 예외처리  (0) 2023.08.11
Spring 트랜젝션 제어 처리  (0) 2023.08.11
AOP log(횡단관심사)  (0) 2023.08.11
hibernate 라이브러리  (0) 2023.08.09