[Spring boot] ajax 로그인 & 로그아웃 & 수정 & 삭제

728x90

인텔리제이 -> springmybatismini  프로젝트

 

 

AJAX로 개인 정보 삭제시키기

  • 기본적으로 Ajax 사용에서 datatype을 json으로 받아 올 때는 controller에서 @RestController 어노테이션 선언을 하고 사용해야 한다. 
  • controller에서 restcontroller선언하기 싫다면, 선언해야하는 메소드에 @responsebody 어노테이션 설정을 한다.

#1 컨트롤러

	@GetMapping("/member/deleteme")
	@ResponseBody
	public void deleteme(@RequestParam String num, HttpSession httpSession) {
    
    	String path = httpSession.getServletContext().getRealPath("/membersave");
		String photo = memberService.getDataByNum(num).getPhoto();
		File file = new File(path+"\\"+photo);
		file.delete();
        
		memberService.deleteMember(num);
		httpSession.invalidate(); //세션의 모든 데이터 제거.


	}
  • invalidate(); -> attribute 설정 된 세션의 모든 데이터 제거 하는 것
  • photo 변수에 num값에 따른 dto들의 값을 받아오는 것 + 그 중에서도 getPhoto()를 통해 photo 값을 가져온다.

 

Ajax 사용해서 삭제시키기 로직
    $("#btndelete").click(function(){
        var num = $(this).attr("num");
        //alert(num);

        var ans = confirm("정말 탈퇴하시겠습니까?")
        if(ans) {
            $.ajax({
                type:"get",
                dataType: "html",
                url:"deleteme",
                data:{"num":num},
                success:function() {
                    alert("정상적으로 삭제되었습니다");
                    location.reload();
                }

            })
        }
    })
  • 삭제 버튼에 ❗  num=${dto.num}  ❗으로 해서 num 값을 부여해주고, 스크립트에서 attr() 함수를 통해서 num값을 직접적으로 불러온다.
  • 그리고 기본 Ajax 처리를 해주면, 삭제가 된다.

 

AJAX를 사용한, 모달창 로그인 로직 
	@Autowired
	MemberService memberService;
	@GetMapping("/member/ajaxlogin")
	public Map<String,String> loginprocess(@RequestParam String id, @RequestParam String pass, HttpSession httpSession) {
		Map<String,String> map = new HashMap<>();

		int result = memberService.loginPassCheck(id,pass);

		if(result==1) {
			httpSession.setMaxInactiveInterval(60*60*8);
			httpSession.setAttribute("loginok","yes");
			httpSession.setAttribute("myid",id);
			MemberDto mdto = memberService.getDataById(id);
			httpSession.setAttribute("loginphoto",mdto.getPhoto()); //세션에 사진 저장하기
			httpSession.setAttribute("loginname",mdto.getName()); //세션에 사진 저장하기
		}

		map.put("result",result==1?"success":"fail");

		return map;
	}
  • Map<>으로 return 타입을 받는 이유는, 이 메소드를 사용하면 파라미터 타입에서 받아온 변수들을
    • map에 담아서 반환시키기 위함이다. Map을 사용하지않아도 상관은 없다. 
  • 그리고 result라는 변수를 만들어서, loginpassCheck 메소드를 사용해서 값을 저장한다.
  • 그리고 조건문으로 result==1 이면은 loginpassCheck 로직에 의해서 id랑 비밀번호 값이 DB에서 일치하면은 true값인 1을 return 한다
    • result==1 이므로 아래 httpsession 객체를 사용해, setattribute로 세션에 저장한다\
  • 그리고 그 값을 map에 "result"로 담고 return을 한다
    • 이 로직을 사용하면은 모달창에서 id,pass 입력시 DB에 있는 id,pass일치 시 로그인을 한다.

 

모달창을 활용하여 Ajax 로그인 & 로그아웃 로직
<로그인>  
$(function(){
      $("#btnloginok").click(function (){

        var id = $("#loginid").val();
        var pass= $("#loginpass").val();

        //alert(id +
        var root = '${root}';

        $.ajax({
          type:"get",
          url :"/member/ajaxlogin",
          dataType:"json",
          data:{"id":id, "pass":pass},
          success:function(res) {
            if(res.result=='fail') {
              alert("아이디나 비밀번호가 틀립니다. ")
            } else {
              location.reload();
            }
          }
        })

      })
  })
  • 버튼 클릭(id=btnloginok) 클릭시 이벤트 발생
  • var id = $("#loginid").val(); -> id에 value 값을 가져온다.
  • 그리고 Ajax 처리를 해준다. 
    • ajax에서 url은 중간경로를 처리해주어야한다 -> controller 매핑 경로랑 같게 해야한다.
    • dataType을 json으로 처리할 때는 컨트롤러에 @responsebody , @RestController를 설정해줘야한다.\

 

	@GetMapping("/member/ajaxlogout")
	public void logout(HttpSession httpSession) {
		httpSession.invalidate();
	}
<로그아웃>
 $("#btnlogout").click(function(){
      $.ajax({
        type:"get",
        url:"/member/ajaxlogout",
        dataType: "html",
        success:function (){
          location.reload();
        }
      })
    })
  })

 

  • invalidate() 메소드를 통해서 모든 세션 제거를 해준다.
  • 스크립트에서 url은 mapping 주소와 같게하고 위와 같이 Ajax처리를 해줍니다

 

Ajax를 사용한 Update

1) mapper 수정

  <update id="updateMember" parameterType="memberDto">
            update bootmember set name=#{name},hp=#{hp},addr=#{addr},email=#{email} where num=#{num}
 </update>

2) controller 

	@PostMapping("/member/update")
	@ResponseBody
	public MemberDto update(@ModelAttribute MemberDto dto) {

		memberService.updateMember(dto); //memberservice는 메소드 생성해둔 클래스의 객체

		return dto;
	}

3) jsp 에서 script주기

    $("#btnupdate").click(function() {
        var num = $(this).attr("num");
        var name = $(".modName").text();
        var hp = $(".modhp").text();
        var addr = $(".modAddr").text();
        var email = $(".modEmail").text();

        $(".modName").html("<input type='text' class='modName2' value='"+name+"'>");
        $(".modhp").html("<input type='text' class='modHp2' value='"+hp+"'>");
        $(".modAddr").html("<input type='text' class='modAddr2' value='"+addr+"'>");
        $(".modEmail").html("<input type='text' class='modEmail2' value='"+email+"'>");
        $(".buttonMod").html("<button type='submit' class='btn btn-info buttonMod2' num='"+num+"'>수정</button>");
    });

    $(document).on('click', '.buttonMod2', function() {
        var num = $(this).attr("num");
        var name = $(".modName2").val();
        var hp = $(".modHp2").val();
        var addr = $(".modAddr2").val();
        var email = $(".modEmail2").val();
        //alert(num);

        $.ajax({
            type: "post",
            dataType: "json",
            url: "update",
            data: {"num":num,"name": name, "hp": hp, "addr": addr, "email": email},
            success: function(response) {
                alert("수정되었습니다.");
                location.reload();
            },
            error: function(error) {
                alert("수정에 실패했습니다.");
            }
        });
    });
  • id값이 btnupdatefmf 클릭하면 함수가 발생한다
  • 위 jsp에서 <input type> 에 class이름을 지정해주고, 그 값을 불러옵니다. 
    • ex) var name = $(".modName).text();
  • 변수를 설정해주고, btnupdate를 클릭하면 이벤트가 발생하게 한다.
    • ex) $(".modName").html("<input type='text' class='modName2' value='"+name+"'>");
    • ❗ 마지막 버튼에 클래스 이름을 다시 주어야하고, num값을 넘기기 위해서 num 값 설정을 꼭 해야한다
  • 다음 이벤트로 두번째 수정으로 바뀐 버튼을 클릭하면 이벤트가 발생하게 한다.
    • 그리고 다시 위 수정 된 input type들의 클래스이름을 통해 text 값을 가져온다
    • ex)  var name = $(".modName2").val();
  • 그리고 마지막으로 ajax를 실행시킨다
    • ajax에서 data를 보낼 때는 위 설정해둔 num ~ email 까지 다 data에 담아서 보내 줘야한다.
728x90