on
[Spring] 회원가입2
[Spring] 회원가입2
◇ (이어서 하는) 회원가입
regForm.jsp의 script에 fn_userReg()함수부터 구현해본다.
이 함수는 '회원가입' 버튼을 눌렀을 때 문제 없이 회원가입이 진행될 시(success: response.code == 0일때)에 실행되게 된다. 컨트롤러에서 부를 url은 "/user/regProc"로 했다. 필요한 데이터는 회원가입 창에서 유저가 입력했을 아이디, 비밀번호, 이름, 이메일 값을 전부 받아온다.
function fn_userReg() { $.ajax({ type: "POST", url: "/user/regProc", data:{ userId: $("#userId").val(), userPwd: $("#userPwd").val(), userName: $("#userName").val(), userEmail: $("#userEmail").val() }, datatype: "JSON", beforeSend: function(xhr){ xhr.setRequestHeader("AJAX", "true"); }, success: function(response){ if(response.code == 0) { alert("회원가입이 완료되었습니다."); location.href = "/board/list"; } else if(response.code == 100) { alert("중복된 아이디입니다."); $("#userId").focus(); } else if(response.code == 400) { alert("파라미터값이 잘못되었습니다."); $("#userId").focus(); } else if(response.code == 500) { alert("회원가입 중 오휴가 발생했습니다."); $("#userId").focus(); } else { alert("오류가 발생했습니다."); $("#userId").focus(); } }, complete: function(data) { icia.common.log(data); }, error: function(xhr, status, error) { icia.common.error(error); } }); }
중복아이디 체크 하고, 위 함수로 왔는데 ajax통신이라는 건 서버에 어떤 요청을 보내는 것이기 때문에 이제 /user/regProc 를 호출해야 한다. (원래대로라면 /user/regProc 서비스를 먼저 만들고 화면을 구현하는게 맞지만 처음 하는 우리는 그렇게 진행하면 이해가 너무 어렵기때문에 실제 회사에서 하는 방식과는 반대로 진행하고 있었다.)
이제 컨트롤러로 가서 서비스 메소드를 추가한다.
//회원가입 !!! @RequestMapping(value="/user/regProc", method=RequestMethod.POST) @ResponseBody //@ResponseBody 리턴타입이 객체를 넘길때 사용(비동기통신) , 리턴타입이 스트링이면 JSP페이지를 통해서 넘겨서 안씀(동기통신). public Response regProc(HttpServletRequest request, HttpServletResponse response) { Response ajaxResponse = new Response(); //regForm에 fn_userReg()함수의 ajax통신에서 던진 아이디,비번,이름,이메일 받아야함 String userId = HttpUtil.get(request, "userId"); String userPwd = HttpUtil.get(request, "userPwd"); String userName = HttpUtil.get(request, "userName"); String userEmail = HttpUtil.get(request, "userEmail"); //값이 다 잘 넘어왔는지 체크 if(!StringUtil.isEmpty(userId) && !StringUtil.isEmpty(userPwd) && !StringUtil.isEmpty(userName) && !StringUtil.isEmpty(userEmail)) { if(userService.userSelect(userId) == null) { //인서트할때 매개변수가 유저객체를 넘겨야 하니까 유저객체 셋팅! User user = new User(); user.setUserId(userId); user.setUserPwd(userPwd); user.setUserName(userName); user.setUserEmail(userEmail); user.setStatus("Y"); //인서트 : 되고 안되고는 카운트 갯수로 if(userService.userInsert(user) > 0) { //성공 ajaxResponse.setResponse(0, "Success"); } else { //인서트실패 ajaxResponse.setResponse(500, "Internal Server Error"); } } else { //중복 ajaxResponse.setResponse(100, "Duplicate ID"); } } else { //값이 뭔가 안넘어왔다 ajaxResponse.setResponse(400, "Bad Request"); } return ajaxResponse; }
그리고 userDao.xml에 쿼리 추가하기!
단, Dao.java의 메소드명과 쿼리Dao.xml의 id는 반드시 동일해야한다★
쿼리와 다오에 각각 아래 내용을 추가했다.
쿼리는 반드시! SQL Developer에서 돌려본 다음에 쓸 것! 이건 진짜 중요하다. 스스로가 아무리 날고 기고 잘해도 절대 믿지 말고 꼭 돌려볼것. 이건 교수님이 여러번 강조한 부분이다. 여기서 실수하면 진짜 큰일난다고 ,, 습관을 잘 들이자!
////userDao.xml INSERT INTO TBL_USER ( USER_ID, USER_PWD, USER_NAME, USER_EMAIL, STATUS, REG_DATE ) VALUES ( #{userId}, #{userPwd}, #{userName}, #{userEmail}, #{status}, SYSDATE ) ////userDao.java //사용자 등록 public int userInsert(User user);
컨트롤러에 메소드 추가했고, 쿼리 추가했고, 다오에 메소드도 추가했다. 그 다음으로 해야할 건 서비스! UserService.java로 가서 사용자등록 내용을 추가해준다.
//사용자등록 public int userInsert(User user) { int count = 0; try { //다오에 있는 서비스 불러주면 됨 count = userDao.userInsert(user); } catch(Exception e) { logger.error("[UserService] userInsert Exception", e); } return count; }
리턴타입도 동일하게 int, 메소드명도 동일하게 userInsert로 해준다. 매개변수는 User 객체를 받는다. 트라이캐치구문으로 묶어서 예외처리 해주고 count변수에 다오에 있는 메소드를 호출만 해주면 끝이 난다.
다 되었으면 SQL devloper에 등록되어있는 회원 테이블을 확인해서 회원가입이 잘 진행되는지 오류는 없는지, 우리가 작성한대로 중복은 잘 걸리는지 등을 체크하면 된다 ! 오류 체크하기 전 이클립스 콘솔창을 클리어 해서 어떤 오류가 나는지 잘 확인하는것도 매우 중요하다 ^^!
회원가입에서 등록(회원가입) 버튼을 눌렀을때, 우리 소스대로면 ajax통신을 두번 하게 된다. (아이디나 비밀번호 체크 버튼을 따로 두는 경우에는 당연히 이것과 또 다르게 된다!) 그래서 중복아이디를 체크하는 버튼을 따로 두고싶다면 중복 아이디에 관한 ajax통신 내용만 따서 가져갈 수 있다 ! 꿀팁 ~!
from http://bbizzang.tistory.com/26 by ccl(A) rewrite - 2021-12-18 16:02:00