레이블이 자바교육학원인 게시물을 표시합니다. 모든 게시물 표시
레이블이 자바교육학원인 게시물을 표시합니다. 모든 게시물 표시

2021년 11월 27일 토요일

스프링 예외처리,@ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리(자바교육학원/스프링교육학원/JAVA교육학원/Spring교육학원)

 스프링 예외처리,@ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리(자바교육학원/스프링교육학원/JAVA교육학원/Spring교육학원)


http://ojc.asia/bbs/board.php?bo_table=LecSpring&wr_id=887 


스프링 예외처리, @ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리

스프링 예외처리, @ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리컨트롤러 기반 예외처리컨트롤러 내부 메소드 위에 @ExceptionHandler를 사용하면 된다. 스프링은 컨트롤러 안에 @ExceptionHand

ojc.asia


https://www.youtube.com/watch?v=OXnif975EoQ&list=PLxU-iZCqT52B7oCYJltUT2-kBzckdr5vp&index=12&t=11s 


https://www.youtube.com/watch?v=YlXpUGYXrKQ&list=PLxU-iZCqT52B7oCYJltUT2-kBzckdr5vp&index=10 

 

  • 컨트롤러 기반 예외처리

컨트롤러 내부 메소드 위에 @ExceptionHandler를 사용하면 된다.  스프링은 컨트롤러 안에 @ExceptionHandler를 사용한 메소드가 존재하면 그 메소드가 컨트롤러 내부의 예외를 처리하도록 하며 @ExceptionHandler의 인자로 들어오는 예외가 발생하는 경우에 해당 메소드가 실행된다.



@Controller

public class EmpController {

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

public String getEmp(@PathVariable("empno") int empno, Model model) {

if(empno==null) throw new EmpNotFoundException(id);

else {    ...... }

}

@ExceptionHandler(EmpNotFoundException.class) //EmpNotFoundException에 대한 예외처리 메소드

public ModelAndView exHandler(HttpServletRequest request, Exception ex){

ModelAndView modelAndView = new ModelAndView();

modelAndView.addObject("exception", ex);

modelAndView.addObject("url", request.getRequestURL());

modelAndView.setViewName("error");

return modelAndView;

}

}



  • 글로벌 예외처리

@ExceptionHandler  : 스프링 @MVC에서 에러나 예외를 처리하기 위한 특별한 방법을 제공하는데  @ExceptionHandler 어노테이션을 이용하면 된다. 스프링 컨트롤러에서 정의한 메소드에서 기술한 예외가 발생되면 자동으로 받아낼 수 있다. 이를 이용하여 컨트롤러에서 발생하는 예외를 View단 JSP등으로 보내서 처리할 수 있다.

 

@ControllerAdvice : @ControllerAdvice는 스프링3.2 이상에서 사용가능하며  @Controller 나 스프링 4.0이상에서 지원하는 @RestController 에서 발생하는 예외 등을 catch하는 기능을 가지고 있다. 클래스 위에 @ControllerAdvice를 붙이고 어떤 예외를 잡아낼 것인지 내부 메소드를  선언하여 메소드 상단에 @ExceptionHandler(예외클래스명.class)를 기술한다. 스프링4.0이상에서는 특정한 컨트롤러만 지정해서 캐치할 수 있다.

 

STS에서

File >> New >> Spring Legacy Project

Project Name : springmvcexception

Spring MVC Project 선택

다음 화면의 top level package에서 a.b.springmvcexception 입력


[pom.xml]

Spring Framework 버전이 4.X 아래라면 수정하자.

<properties>

……

<org.springframework-version>4.2.4.RELEASE</org.springframework-version>

……

</properties>


[HomeController.java]

package a.b.springmvcexception;


import java.io.IOException;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;


@Controller

public class HomeController {

@RequestMapping(value = "/")

public String hello() throws IOException {

// 뷰이름 이름, hello.jsp 호출

return "home";

}


@RequestMapping(value = "/test")

public String test() throws IOException {

{

throw new IOException("occured IOException...");

}

}

}


[ExceptionControllerAdvice.java]


package a.b.springmvcexception;


import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.servlet.ModelAndView;


@ControllerAdvice

public class ExceptionControllerAdvice {


@ExceptionHandler(Exception.class)

public ModelAndView exception(Exception e) {

ModelAndView mav = new ModelAndView("exception");

mav.addObject("name", e.getClass().getSimpleName());

mav.addObject("message", e.getMessage());


return mav;

}

}


[ webapp/WEB-INF/views/home.jsp]


<html>

<head>

<title>Spring MVC Exception Handling</title>

</head>

<body>

<h1>Spring MVC Exception Handling</h1>

<a href="/springmvcexception/test">Click here to test Exception handling</a>

</body>

</html>


[ webapp/WEB-INF/views/exception.jsp]

<html>

<head>

<title>Spring MVC Exception example</title>

</head>

<body>

<h1>Error Handing Page</h1>

<b>${name}</b>:  ${message}

</body>

</html>


[실행]

프로젝트에서 우쪽 마우스 버튼 -> Run as -> Run On Server 클릭 후 STS에 기본적으로 내장되어 있는 Pivotal tc Server를 선택하고 Finish를  클릭하여 실행하자

http://localhost:8080/springmvcexception/



"Click here to test Exception handling "를 클릭하자

exception.jsp에서 예외를 받아서 출력한다.

 

  • Spring4 @RestController 컨트롤러 기반 예외처리

 

@RestController  @RequestMapping("/emp")

public class EmpController {

@ExceptionHandler(EmpNotFoundException.class)  //EmpNotFoundException 예외처리용

public ErrorDetail myError(HttpServletRequest request, Exception exception) {

ErrorDetail error = new ErrorDetail();

error.setStatus(HttpStatus.BAD_REQUEST.value());

error.setMessage(exception.getLocalizedMessage());

error.setUrl(request.getRequestURL().append("/emperror/").toString());

return error;

}

@RequestMapping("/get")

public Emp getEmp(@RequestParam(value="empno") String empno) {

if (empno == null) throw new EmpNotFoundException(empno);

......

return emp;        } }


public class EmpNotFoundException extends RuntimeException {

public EmpNotFoundException(String empno){

super(empno +" not found!");

}

}

http://localhost:8080/emp/get?empno=9999

존재하지 않는 사원이라면 오류는 JSON 형태로 리턴된다.

{"status":400,"message":"9999 not found!","url":"http://localhost:8080/emp/get/emperror/"}

 

  • Spring4 @RestController 글로벌 예외처리

 

@RestController

@RequestMapping("/emp")

class EmpApiController {

@RequestMapping(value = "{empno}", produces = "application/json")

@ResponseStatus(value = HttpStatus.OK)

Emp getEmp(@PathVariable Long empno) {

if (empno == null) throw new EmpNotFoundException(empno);    }

}

@ControllerAdvice(annotations = RestController.class)

class ExceptionHandlerAdvice {

@ExceptionHandler(value = EmpNotFoundException.class)

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)

@ResponseBody

public ErrorDetail myError(HttpServletRequest request, Exception exception) {

ErrorDetail error = new ErrorDetail();

error.setStatus(HttpStatus.BAD_REQUEST.value());

error.setMessage(exception.getLocalizedMessage());     error.setUrl(request.getRequestURL().append("/emperror/").toString());

return error;

}

}



스프링예외, 스프링교육, 스프링학원, 자바교육, 자바학원, ExceptionHandler,ControllerAdvice,자바교육학원,스프링교육학원,JAVA교육학원,Spring교육학원



#스프링예외, #스프링교육, #스프링학원, #자바교육, #자바학원, #ExceptionHandler,#ControllerAdvice,#자바교육학원,#스프링교육학원,#JAVA교육학원,#Spring교육학원
 

안녕하세요, 자바교육동영상 입니다.JAVA학원에서도 배우겠지만 혼자 천천히 따라해 보세요, JAVA동영상교육도 들으시면 좋습니다. 자바공부는 실습이 젤이죠^^ JAVA학원 안가셔도 되요,



안녕하세요, 자바교육동영상 입니다.JAVA학원에서도 배우겠지만 혼자 천천히 따라해 보세요, JAVA동영상교육도 들으시면 좋습니다. 자바공부는 실습이 젤이죠^^ JAVA학원 안가셔도 되요,

1. 자바 JVM 실행 데이터 영역(JVM Runtime Data Area), 메소드영역,힙(Heap),스택(Stack)

https://www.youtube.com/watch?v=MOWjp9UUL54&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=4

자바 JVM Runtime Data Area는 JVM이 운영되면서 운영체제로 부터 부여 받은 메모리 영역 으로 아래와 같이 구분됩니다. 메소드 영역(Method Area) : 모든 쓰레드가 공유하는 영역이며 JVM이 시작될 때 생성된다. 클래스와 인터페이스의 메소드에 대한 바이트코드, 전역변수(클래스 변수), 런타임 상수 풀이 위치한다. 오라클의 Hot Spot VM에서는 Permanent Area, Permanent Generation(PermGen)이라고 부른다. 힙(heap) 영역 : 객체를 저장할 때 사용하는 메모리 영역이며 성능을 생각할 때 가장 많이 고려되는 부분이다. JVM 스택(JVM Stack) 때 마다 할당되는 스택 프레임(Stack Frame)이라는각 쓰레드 마다 하나씩 존재하고 메소드가 실행될 구조체를 저장한다. JVM은 오직 JVM 스택에 메소드에 대한 스택 프레임을 추가하고 제거하는 동작만 실행한다. 자바에서 예외 발생 시 printStackTrace() 등의 메서드로 보여주는 Stack Trace의 각 라인은 하나의 스택 프레임을 표현한다. 실행되는 메소드의 스택 프레임을 가지는데 각 스택 프레임에는 지역변수, 메소드의 인자, 메소드의 리턴값, 리턴 번지 등이 저장되고 스택 프레임은 메소드가 끝나면 사라진다. PC 레지스터(Program Counter Register) 쓰레드가 시작될 때 생성되며 쓰레드 마다 하나씩 존재하여 실행 할 JVM의 명령어의 주소를 가리킨다. 실행 상수 풀(Runtime Constant Pool) : 메소드 영역으로 부터 할당 받으며 클래스와 인터페이스의 상수, 메서드, 필드에 대한 모든 레퍼런스를 저장하는 영역이다. 자바 프로그램에서 어떤 메서드나 필드를 참조할 때 JVM은 런타임 상수 풀을 통해 해당 메서드나 필드의 실제 메모리상 주소를 찾아서 참조하게 된다. 네이티브 메소드 스택(Native Mathod Stack) : 자바이외의 언어로 작성된 네이티브 코드를 위한 스택, JNI(Java Native Interface)를 통해 호출하는 C/C++ 등의 코드를 수행하기 위한 스택이다. 메소드 내에서 객체 참조 형으로 선언된 변수인 경우 지역변수로서 스택에 위치하며 힙에 저장되어 있는 객체에 대한 참조 값을 가지게 된다. 객체 참조 형 변수의 값이 null 이라는 의미는 아무것도 참조하고 있지 않다는 의미이다. new 연산자는 힙(heap) 메모리에 객체를 만들고 그 객체의 참조값을 반환한다. 객체 참조 변수의 경우 대입, 메소드 호출시의 인자, 반환형 등으로 사용 될 때 참조 값만 전달 될 뿐, 객체 자체가 복제되어 전달되는 것은 아니다.

2. 자바(JAVA)변수 종류(인스컨스변수, 클래스변수), 자바학원가지말고 혼자해보세요~

https://www.youtube.com/watch?v=5CyNDCnruy4&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=5&t=3s

3. JAVA8 forEach문을 기존 개선된 for 문과 비교해 살펴보고 예제/예문을 통해 학습하는 자바교육영상

https://www.youtube.com/watch?v=7TZYJHHXifQ&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=6&t=1s

4. 자바에서 배열을 생성하고 다루는 방법에 대해 설명한 JAVA교육 영상입니다.

https://www.youtube.com/watch?v=tFq_JmgcL7U&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=7&t=4s

5. 자바의 클래스와 객체의 개념을 이해하시고 예문을 실습해 보세요~ 자바학원교육 안받으셔도 되요, 열공하세요~

https://www.youtube.com/watch?v=3pBujuGBX6g&list=PLxU-iZCqT52BVt5HycCd6CULukiARAl6S&index=8

위5개 자바동영상 천천히 살펴보세요~

자바학원 필요성도 있지만 코드를 이해하는데 어렵지 않으시면 JAVA학원 가지마시고 천천히 혼자 학습해보세요~

물론 자바학원 교육의 필요성도 있죠^^

감사합니다.

#자바교육, #자바동영상, #JAVA학원, #JAVA동영상, #자바공부, #JAVA공부, #JAVA동영상, #자바교육학원, #자바배열, #자바변수, #클래스변수, #자바forEach

자바교육, 자바동영상, JAVA학원, JAVA동영상, 자바공부, JAVA공부, JAVA동영상, 자바교육학원, 자바배열, 자바변수, 클래스변수, 자바forEach



(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...