220311 회원관리2_회원가입, ID 중복검사
*** 회원관리
* 기능 사용
- Connection Pool -> 커넥션 생성-서버 연결
- 액션태그 : <jsp: useBean> , <jsp: setProperty> -> 값 저장
- DTO, DAO 클래스 -> java resourse-src-member
- Session -> 로그인~로그아웃까지, 섹션값 공유되므로 페이지 옮겨다녀도 로그인 풀리지 않음
+) 서버가 사용중이라는 에러가 뜬다면
작업관리자-세부정보- javaw.exe를 작업끝내기 하고 다시 실행...
아니면 톰캣 커넥션을 껐다 켜등가.......
서버 계정 새로 연결하깅
Data Source Explorer - new- name: New Oracle(totoro) 계정 구분 위해 - 계정명/비번 바꿔주고 (save password 체크) - Test connection으로 연결 확인하고 석세스 -> finish ㄱ
DTO : 테이블 컬럼대로 변수 생성한 후 각 setter, getter 생성하기
DAO : 서버에 접근하는 메소드를 정의할 것
---- 위의 둘 DTO, DAO는 jsp파일에서 객체 불러올 때 반드시 import 해줄 것.
4. 회원 가입 : memberform.html --> member.jsp --> loginform.html
- member.jsp에서 값을 받을 때, 반드시 텍스트를 인코딩시켜야 함
- 여러 값을 가져올 때, 자바빈을 이용해 DTO에 중간저장 하면 편리하게 가져올 수 있음 (텍스트 값들)
<% request.setCharacterEncoding("utf-8"); %> <jsp:useBean id="member" class="member.MemberDTO" /> <jsp:setProperty name="member" property="*" /> |
- checkbox로 여러 값을 받는 경우, String[]형인 getParameterValues(String name)로 받아옴
받아온 값을 반복문을 이용해 하나의 문자열에 저장.
단, 필요 시 다시 나눠야 하니 구분자를 추가해 저장하고 String형으로 선언된 서버의 테이블로 전송할 것.
<% //checkbox 등으로 여러 값을 받는 경우 : String[]형에 저장 String[] hobby = request.getParameterValues("hobby"); //저장한 값들을 하나의 문자열로 결합할 것 (단, 필요 시 나눌 수 있도록 구분자를 사용) String h = ""; for (String h1 : hobby) { // 반복문이 돌아가는 동안 배열 hobby의 값을 h1에 넣음 h += h1 + "-"; //구분자를 추가해 배열의 값을 하나의 문자열로 저장 } member.setHobby(h); //하나의 문자열로 저장한 값을 DTO의 setter로 db서버에 저장할 것. %> |
5. ID 중복검사 : member.js -> idcheck.jsp || idcheck1.jsp
I. 팝업 창 띄워 결과 출력 -> 동기적 방식 : DAO에서 select문으로 검색 후 ResultSet rs.next()=true면 중복!
- member.js에서 유효성 검사 후, idcheck.jsp로 연결되는 팝업창을 띄움
$("#idcheck").click(function(){ if($("#id").val()==""){ alert("ID를 입력하세요."); $("#id").focus(); return false; }else{ // open("팝업창에 실행될 문서명","윈도우이름","옵션") var ref="idcheck.jsp?id="+$("#id").val(); window.open(ref,"mywin","width=250,height=150"); } }); |
- 입력받은 id 파라미터값을 가져와서 DAO의 MemberAuth(String id)의 매개변수로 보냄
<% String id=request.getParameter("id"); MemberDAO dao=MemberDAO.getInstance(); int result=dao.memberAuth(id); %> |
- 사용 불가능한 ID는 아래 '닫기' 버튼 생성
중복 ID입니다. <br><br><br> <input type=button id="close1" name="close1" value="닫기"> |
$(document).ready(function(){ $("#close1").click(function(){ opener.$("#id").val("").focus(); //opener: 이 창을 열게 한 -> 가입폼 window.close(); }); |
- 사용 가능한 ID일 경우 '사용' 버튼과 '다른 아이디 사용' 버튼을 생성
사용 가능한 ID입니다. <br><br><br> <input type=button id="close2" name="close2" value="사용하기"> <input type=button id="close1" name="close1" value="다른 아이디 사용"> |
$("#close2").click(function(){ //사용하기 -> 비밀번호로 포커스 넘김 opener.$("#passwd").focus(); window.close(); }); |
II.페이지 내에 결과 출력 -> 비동기적 방식 : ajax 사용해 idcheck1.jsp 파일에서 웹브라우저 출력값을 콜백함수의 매개변수로 받아 폼에 출력시키는 방식 이용
- member.js에서 유효성 검사 후 idcheck1.jsp로 data를 보내고, 결과값을 리턴받아 memberform.html에 만들어둔 "id" 위치에 출력되도록 함
$("#idcheck").click(function(){ if($("#id").val()==""){ alert("ID를 입력하세요."); $("#id").focus(); return false; }else{ var id=$("#id").val(); //사용자가 입력한 id $.ajax({ url: "idcheck1.jsp", type:"post", //get, post, put, delete data: {"id" : id}, //id="id"인 태그의 value를 json형태로 보냄 success: function(data){ //리턴받은 값은 콜백함수의 data로 들어감 if(data==1) { //1= true=중복, -1=false $("#myid").text("중복 ID입니다."); $("#id").val("").focus(); } else { $("#myid").text("사용 가능한 ID입니다."); $("#passwd").focus(); } } }); //ajax } });//click |
- 입력받은 id 값을 memberAuth(String id)의 매개변수로 보내고 결과 받은 것을 웹브라우저에 출력함
- success 시, 웹브라우저에 출력된 값이 콜백함수(function(data)) 로 리턴되어 memberform에 출력됨
<% String id=request.getParameter("id"); MemberDAO dao=MemberDAO.getInstance(); int result=dao.memberAuth(id); %> out.println(result); // success: function(data) <-출력된 result가 여기 data로 들어감 |