프로그래밍 28

[Spring] 예외처리(Exception Handling) 정리

@ExceptionHandler와 @ControllerAdvice 예외처리를 위한 메서드를 작성하고 @ExceptionHandler를 붙인다. 전역 예외 처리 클래스를 작성할 때는 @ControllerAdvice를 붙인다. (패키지 지정 가능) -> 모든 컨트롤러에서 예외처리 적용 클래스 내에서 예외처리 @Controller public class ExceptionController { @ExceptionHandler(Exception.class) public String cather(Exception e) { return "error"; } @ExceptionHandler(NullPointerException.class) public String cather2(Exception e) { return "..

[Spring] 쿠키(Cookie)와 세션(Session)에 대해 알아보자

HTTP 프로토콜의 특징 HTTP의 특성을 알아보고 쿠키와 세션이 필요한 이유에 대해 알아보자 1. 무상태 프로토콜(Stateless) 통신이 끝나면 상태를 유지하지 않는 특징 클라이언트의 요청과 그에 따른 서버의 응답이 끝나면 통신이 끝나며 해당 상태 정보는 유지되지 않는다. 2. 비 연결성(Connectionless) 클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어 버리는 특징 비 연결성을 가지는 HTTP에서는 실제로 요청을 주고 받을 때만 연결을 유지하고 응답을 주고나면 TCP/IP 연결을 끊는다. 이를 통해 최소한의 자원으로 서버 유지를 가능하게 한다. 쿠키와 세션은 위의 두 가지 특징을 해결하기 위해 사용한다. 쿠키(Cookie)란? 클라이언트를 식별할 때 사용. 클라이언트(브라우저) ..

[Spring] Redirect와 Forward에 대해 알아보자

JSP에서 Redirect와 Forard 처리 과정 Redirect - 위와 같이 Redirect는 요청이 2번이며, 각 요청은 서로 다른 객체(request)이다. - 첫 번째 요청을 GET으로 하던 POST로 하던 Redirect로 인해서 두 번째 요청을 보낼 때는 자동으로 GET으로 요청을 보낸다. 예시 1. 클라이언트가 /doc으로 요청을 보낸다. ( 1번째 요청: 수동 ) 2. 서버에서 응답 헤더를 통해 300번(Redirect)대의 상태코드와 메시지를 응답한다. (300번대는 Body정보가 없다.) 3. 클라이언트는 응답메시지를 보고 자동으로 다른 URL (/doc_new) 로 재요청을 한다. ( 2번째 요청: 자동 GET으로 ) 4. 서버는 요청에 대한 응답메시지를 클라이언트에 보낸다. 실생..

[Spring] @GetMapping과 @PostMapping

@GetMapping과 @PostMapping Spring 4.3 이후에 추가된 Get/Post 요청 전용 매핑 어노테이션으로 기존 @RequestMapping 대신 @GetMapping과 @PostMapping을 사용할 수 있다. @Controller public class RegisterController { //@RequestMapping(value="/register/add", method=RequestMethod.GET) @GetMapping("/register/add") public String registerForm() { return "registerForm"; } //@RequestMapping(value="/register/add", method=RequestMethod.POST) @P..

[Spring] @ModelAttribute와 WebDataBinder

@ModelAttribute 적용 대상을 Model의 속성으로 자동 추가해주는 어노테이션 (Model에 자동 저장) 반환 타입 또는 컨트롤러 메서드의 매개변수에 적용 가능하다. 예제 1 - 매개변수 기존에는 브라우저의 요청 값을 매개변수로 받아서 Model 객체를 통해서 매개변수를 저장했었다. @RequestMapping("/testMVC") public String main(User user, Model model) { // 매개변수로 받은 user 객체를 Model에 저장 model.addAttribute("user", user); // 작업 결과를 보여줄 뷰의 이름을 반환 return "userInfo"; } Model에 저장하고자 하는 매개변수 앞에 @ModelAttribute를 붙이면 model..

[Spring] @RequestParam에 대해 알아보자

@RequestParam 요청의 파라미터를 연결할 매개변수에 붙이는 어노테이션 예제 1 @RequestMapping("/requestParam") //public String main(@RequestParam(name = "year", required = false) String year) { public String main(String year) { // 위와 동일 System.out.println("년도 : " + year); return "yoil"; } 속성 name : 쿼리스트링 이름 required : 필수여부 (false면 필수 x) http://localhost/requestParam --> year = null http://localhost/requestParam?year --> yea..

[Spring] Servlet/JSP Filter에 대해 알아보자

Servlet Filter Client에서 Server로 요청이 들어오기 전에 서블릿을 거쳐서 먼저 필터링 하는 것을 서블릿 필터라고 한다. 서블릿마다 공통된 로직을 처리하기위해서 Filter를 사용한다. 공통적인 기능들을 서블릿이 호출되기 전에 수행(전처리)되게 하고 싶거나 서블릿이 호출 되고 난 뒤에 수행(후처리) 하고 싶으면 공통적인 기능들을 서블릿 필터로 구현하면 된다. Filter Chain 필터가 한개 이상 있을 때를 Filter Chain이라고 한다. Filter1의 전처리 -> Filter2의 전처리 -> Filter3의 전처리 -> 서블릿 호출 -> Filter3의 후처리 -> Filter2의 후처리 -> Filter1의 후처리 순으로 처리된다. 어떻게 쓰이나? 예제 - 수행시간 측정 /..

[Spring] Servlet/JSP URL패턴과 DispatcherServlet

URL 패턴 @WebServlet으로 서블릿을 URL에 매핑할 때 사용한다. Spring에서도 동일한 URL 패턴을 사용한다. 종류 URL pattern 매칭 URL 1. exact(정확한) mapping /login/hello.do http://localhost/login/hello.do 2. path(경로) mapping /login/* http://localhost/login/ http://localhost/login/hello http://localhost/login/hello.do http://localhost/login/test/ 3. extension(확장자) mapping *.do http://localhost/hi.do http://localhost/login/hello.do 4. def..

[Spring] Servlet/JSP Scope에 대해 알아보자

HTTP 프로토콜의 특징 상태 정보를 저장하지 않는다. (stateless) Scope의 필요성 상태 정보를 저정하기 위한 저장소를 범위에 따라서 나눠놓은 것이 scope이다. Scope의 종류 웹 애플리케이션에는 4개의 저장소가 존재한다. HttpServletRequest를 통해 받은 변수 혹은 지역 변수를 유효 범위 내에서 사용하기 위해서는 Scope를 알아야 한다. 저장소는 Map형태 (key, value)로 되어있으며 이 곳에 data를 저장해서 사용하면 된다. pageContext 접근 범위 : 하나의 요청 받은 페이지 (다른 페이지에서는 접근 불가) 지역변수를 저장한다. - 기본객체도 포함(response, request 등) 접근가능하다는 것은 읽기과 쓰기가 가능하다는 것 forward가 ..

[Spring] Servlet에 대해 간단히 알아보자

Spring Framework는 Servlet이 발전된 형태이기 때문에 Servlet과 닮은 부분이 많다. 또한 브라우저에서 요청을 받을 때도 Servlet인 DispatcherServlet을 사용하기 때문에 간단하게 알아보고자 한다. Servlet과 Controller 비교 - TestServlet 작성 (Servlet) @WebServlet("/testServlet") public class TestServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { String name = r..