nature150
70
2018-10-12 09:59:10
13
122

스프링 controller redirect 질문이요


@RequestMapping(value = "/joinAccount.do", method = RequestMethod.POST)

public String joinAccount(Account aInfo, HttpServletRequest request, HttpServletResponse response) {

PrivateKey key = (PrivateKey) request.getSession().getAttribute("RSAprivateKey");

if (key != null) {

request.getSession().removeAttribute("RSAprivateKey");

}

try {

String id = rsautil.decryptRsa(key, aInfo.getId());

String s_passwd = rsautil.decryptRsa(key, aInfo.getS_passwd());

String nickname = rsautil.decryptRsa(key, aInfo.getNickname());

String name = rsautil.decryptRsa(key, aInfo.getName());

String phone1 = rsautil.decryptRsa(key, request.getParameter("phone1"));

String phone2 = rsautil.decryptRsa(key, request.getParameter("phone2"));

String phone3 = rsautil.decryptRsa(key, request.getParameter("phone3"));

String phone = String.format("%s-%s-%s", phone1, phone2, phone3);

aInfo.setId(id);

aInfo.setS_passwd(s_passwd);

aInfo.setNickname(nickname);

aInfo.setName(name);

aInfo.setPhone(phone);

// 비밀번호 sha256암호화

aInfo.convertPasswd(s_passwd);

int accnt_id = aService.joinMember(aInfo);

if (accnt_id > 0) {

aService.getAccntInfoByAccntId(aInfo);

}else {

// 회원가입 실패시

System.out.println("회원가입 실패");

return "account/joinFail";

}

} catch (Exception e) {

e.printStackTrace();

}

return "account/joinSuccess";

}


이렇게 회원가입을 진행한다면 성공시에 joinSucess.jsp페이지로 넘어가지만

url은 localhost/joinAccount.do 이렇게 지정되잖아요??

이때 새로고침을 하게되면 데이터가 두번 입력되는거잖아요?

이건 포워드 방식이라고 하더라구요.. 그래서 redirect 방식으로 변경해줘야 url이 바뀐다고 하던데

redirect 방식으로 joinSuccess 페이지를 불러오고 싶은데 어떻게 해야하나요??

joinSuccess.jsp는 views 폴더안에 account폴더안에 있습니다.

0
0
  • 답변 13

  • 랑월
    338
    2018-10-12 10:05:14

    return 문자열 앞에 redirect: 붙여주시면 됩니다.

    0
  • nature150
    70
    2018-10-12 10:26:02

    return "redirect:/account/joinSuccess";

    그래서 이렇게 바꿔줬는데요 가입은 성공했지만 url만 localhost/account/joinSuccess라고 바뀌고

    http 404 오류가 뜨더라구요

    joinSuccess.jsp를 못 불러오는 것 같은데가져오는것 같은데


    따로 jsp파일이나 다른 곳에 설정이 필요한건가요??



    0
  • 작별왕바이킹
    48
    2018-10-12 10:41:40

    context path도 붙여보세요...

    return "redirect:/??????/account/joinSuccess";

    0
  • nature150
    70
    2018-10-12 10:57:35

    return "redirect:/WEB-INF/views/account/joinSuccess"; 이렇게 적어봤는데도

    안되네요

    0
  • 작별왕바이킹
    48
    2018-10-12 11:03:42

    nature150 

    context root (path) 없이 root(/)로 사용하시나요? 


    0
  • nature150
    70
    2018-10-12 11:03:59

    현재 joinSuccess.jsp 파일의 위치가 WEB-INF/views/account/joinSuccess.jsp인데 안되네요


    컨트롤러에서

    @RequestMapping(value = "/joinSuccess", method = RequestMethod.GET)

    public String joinSuccess(HttpServletRequest request) {

    return "account/joinSuccess";

    }

    이렇게 메소드를 하나 더 만들었는데 이렇게 할경우 문제가 있나요?

    0
  • nature150
    70
    2018-10-12 11:05:26

    네 그냥 대문자 ROOT로 되어있어요

    0
  • 작별왕바이킹
    48
    2018-10-12 11:10:31

    매핑 메서드가 없었네요? 문제 될 거 없고 잘 만드셨어요. 

    서블릿이 .do로 되어 있으신거 같으니 value값 .do로 맞추시면 될 듯..

    @RequestMapping(value = "/joinSuccess.do", method = RequestMethod.GET)

    0
  • 랑월
    338
    2018-10-12 11:15:57 작성 2018-10-12 11:17:01 수정됨

    https://dololak.tistory.com/147

    redirect는 서버에서 바로 다른 페이지로 화면을 띄워주는게 아닙니다. 화면에 다른 경로로 다시 요청하라고 지시 하는거죠. url상에서 joinSuccess 페이지로 접근할 수 있는 경로를 redirect 시키셔야 합니다.

    0
  • nature150
    70
    2018-10-12 11:23:17

    그게 아니라.. 제가 질문했던것이

    맨 처음 올린 글보시면 joinSuccess.do라는 매핑 메서드로 회원가입을 진행하면

    성공시 joinSuccess.jsp로 넘어가는 것입니다.

    근데 문제는 이 방식으로 joinSuccess.jsp로 페이지를 이동하더했을 때 url은 localhost/joinSuccess.do로 되어있기 때문에 브라우저를 새로고침했을 때 메소드가 다시 실행되서 같은 데이터가 입력되는 문제가 생길 수 있잖아요?? 그래서 redirect로 joinSuccess.jsp로 넘겨준다면 redirect:/요청url에 적은 url로 바뀌잖아요??


    근데 뒤에 요청 url을 할 때 이를 위해서 value값이 joinSuccess인 매핑메서드를 다시 만들지 않고

    그냥 joinSuccess.do라는 매핑메서드에서 redirect방식으로 url도 바꾸면서 joinSuccess.jsp로 이동하는 방법을 물어본거에요..

    단순히 return:/account/joinSuccess로 넘기면 jsp페이지가 없다는 404오류가 뜨니깐요


    기존에 스프링 하는 것 처럼 return account/joinSuccess; 로 반환하면 jsp만 이동했을 뿐이지 url이 안바뀌니깐요ㅠㅠ

    0
  • nature150
    70
    2018-10-12 11:25:14

    량월

    아하 그럼 제가 해결한 방법대로 컨트롤러에서 joinSuccess로 넘어가는 매핑 메소드를 통해 경로를 만들어줘서 redirect 시키는게 맞는건가요??


    코드가 늘어나니까 이왕이면 하나의 매핑 메소드 내에서 처리할 수 있는 방법을 찾고 있어요

    0
  • 랑월
    338
    2018-10-12 11:29:35 작성 2018-10-12 11:30:08 수정됨

    예 매핑메소드 만드셔서 그 경로로 리다이렉트 시켜주시면 됩니다.

    근데 보통 회원가입하고 메인 화면으로 가지 않나요?

    0
  • nature150
    70
    2018-10-12 12:41:26

    그쵸 메인으로 가죠.. 메소드 만들어보고 있는 중이라 

    회원가입 성공하면 성공페이지 실패하면 실패페이지 뜨게하려고 했어요

    아직 해당 http 상태코드 에러가 떴을때 에러페이지 보여주는 것을 따로 구현안해서..

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.