ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 0907. Model 데이터 전달자, Redirect
    카테고리 없음 2023. 9. 8. 17:39

    HomeController

     

    모델 객체는 자동으로 넘어간다.

     

    @ModelAttribute

     

    https://web-obj.tistory.com/485

     

    엘리먼트 내에서 속성의 qualified 이름들은 반드시 유일해야 합니다.

    안에 name 속성을 두번써서 발생하였다. 아래와 같이 써서 문제가 발생한 것인데, name="mberVO" 를 하나 삭제하니 오류가 나오지 않는다. 1 2 Colored by Color Scripter cs 아래와 같이 변경. 1 2 Colored by Color S

    web-obj.tistory.com

    @GetMapping("/ex04")
    	public String ex04(
    			Model model,
    			@ModelAttribute("sample")SampleDTO dto, 
    			@ModelAttribute("page") int page) {
    	log.info("dto: " + dto);
    	log.info("page: " + page);
    	
    	model.addAttribute("now", new Date());
    	
    	return "ex04";
    	}
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        SampleDTO: ${sample } <br>
        page: ${page } <br>
        now: ${now }
    </body>
    </html>


    ⭐RedirectAttributes

     

    redirect

     

     

    요청을 보냈을 때 "서버"가 다른 요청으로 다시 해달라고 다른 url을 주면

    브라우저가 다른 url로 다시 요청 => 서버가 최종 응답을 내보냄.

     

    예전엔 한국 도메인을 co.kr로 쓰다가 요즘엔 다 .com으로 사용. 아직까지 co.kr로 아는 사람이 많으니 자동으로 바꿔주도록 하는 것. 사용자 입장에서는 최종적으로 바뀐 것만 보이지 중간단계는 안 보인다.

    [적용예시]

    1. 옛날 url을 새로운 url로 운영할 때 페이지를 이동해 줌/ 응답코드:300 => 최종은 200번 응답 결과 url이 나옴

    *200:ok, 400:클라이언트 잘못, 500: 서버 잘못, 300:redirect 지시

    2. 개발자가 POST 처리 후

     

     

    1. 옛날 url을 새로운 url로 운영할 때 

     

    naver.co.kr 로 입력했는데
    자동으로 이렇게 나왔다.

    요청이 2번 되고 서버에 최종적으로 나온 형태인 것이다.

    앞에서 나온 request scope는 사라지고 두 번째 나온 request scope만 유지된다.


    ⭐2. 개발자가 POST 처리 후

     

    이 화면에서 새로고침하면 저렇게 뜨면서 같은 화면이 나온다.

    이 상태에서 또 새로고침하면 에러가 뜬다.

    같은 id가 중복되어서 들어가기 때문이다.

    이럴 때 필요한 게 redirect이다.

     

    		// "redirect:이동할 url"
    		return "redirect:/user/join_result";
    	}
    	
    	@GetMapping("/join_result")
    	public String joinResult() { 
    		return "user/join_result";
    		
    	}

    이젠 url이 바뀐다.

    위의 상태에서 새로고침하면

    양식 다시 제출할지 물어보지 않고 계속 유지되고 정보출력은 못 한다.

    새롭게 요청을 하니 request scope가 바뀌기 때문이다.

     

    ⭐그러므로 POST 처리에 성공했으면 반드시 redirect 해야한다.
    // "redirect:이동할 url"
    		return "redirect:/user/join_result";

    => insert, update, delete 하는 경우❗ 모두 필요

    redirect 안 하는 케이스는 그냥 get 요청처리라서 디폴트니 포워드로 처리한다. 


    만약 redirect를 쓰면서 정보도 출력하고 싶다면

    addFlashAttribute를 써서 넣어준다.

Designed by Tistory.