main.jsp
32번째 줄
로그인
<li><h5>로그인</h5></li>
<form action="LoginService" method ="post">
<li><input type="text" name="email" placeholder="Email을 입력하세요"></li>
<li><input type="password" name="pw" placeholder="PW를 입력하세요"></li>
<li><input type="submit" value="LogIn" class="button fit"></li>
name="email"
name="pw"
값 넣어줌
controller 에다가 new 해서 LoginService 으로 서블릿 하나 만들어줌
로그인서비스에 왔다 알려줌 System.out.println("[JoinService]");
뭐해야되냐 ? 로그인서비스에서 --> 입력받은 패스워드 아이디 가져와야함 ---> 포스트 방식으로 보냈음
혹시 포스트 방식으로 보냈는데 한글 껴있으면 인코딩 해줘야함
--->request.setCharacterEncoding("UTF-8");
항상 어떤객체? 리퀘스트 객체에서 값 가져온다
String email =request.getParameter("email");
String pw =request.getParameter("pw");
데이터 값이 잘넘어왔는지 확인하기위해서 콘솔창에 출력
System.out.println("email : "+email);
System.out.println("pw : "+pw);
이제 뭐해야되? 데이터 받아왔어 로그인은 내가 받아온 이메일과 비번이 db에 있는지 비교확인해야함?
결국 데이터베이스 연결해야함 ---> MemberDAO
MemberDAO에서 로그인 메소드 만들꺼임
public void login(){
아직 어떤 형태인지 모르니깐 void
1.우선 try catch문 부터씀
try{
2. DB열어줘야함 ---> DBconn(); / DB연결 메소드 호출
3. SQL문작성 (입력받은 이메일과 패스워드로 뭘할것인가? 조건을 걸꺼임 이메일과 패스워드가 내가 입력한 값과 같은지 )
String sql = "select * from web_member where email=? and pw=?";
4. SQL문 전달(prepareStatement 사용하면 sql문 전달할 수 있음)
psmt = conn.prepareStatement(sql);
---> 전역변수로 위에 선언에 놨기때문에 PreparedStatement psmt = null; / psmt 사용가능
5. ? 에 값 채워줘야함
(dto는 데이터를 전달하는 객체/ 데이터를 저장하는 가방 ) ---->위에 public void login("MemberDTO dto") 입력해줘야함
psmt.setString(1, dto.getEmail()); dto에서 해당된값 꺼내옴
psmt.setString(2, dto.getPw());
6. 실행 (쿼리는 resultset로 반환)
rs = psmt.executeQuery();
---> 실행을하면 여기 형태는 어떤형태?? 테이블형태로 들어가있음 그 값에 하나하나 꺼내서 dto 값으로 받아올거다!
7. 조건을 걸거다 rs.next 해서 커서를 한칸내렸을때 해당하는 값이 있는지 없는지 확인?!
우리는 id(email)에 pk를 걸어놨기때문에 내가 지정한 값은 무조건 하나만 나옴 ---> 반복문 사용안하고 if 사용
7-1. rs.next() : 커스를 내렸을 때 값이 있는지 없는지 확인하는 메소드
있으면 true / 없으면 false
true일때, 즉 해당하는 값이 있을 때만 if문 실행
7-2. if(rs.next()){
해당하는 값이 있을때
String email=rs.getString(1);
String pw=rs.getString(2);
String tel=rs.getString(3);
String address=rs.getString(4);
} ----> 이 4가지 값을 반환해줘야한다 메소드이기 때문에
뭘로 묶냐
8.dto = new MemberDTO(email, pw, tel, address); ---> 아까 5번 보시면 위에서 MemberDTO 선언해줬기 때문에 MemberDTO dto 말고 dto만 적어줌
원래 있던 email pw말고 덮어쓰기 한다 / 내가 새로 받아옴 email, pw, tel , address
} catch (Exception e) {
e.printStackTrace();
} 9.finally{
DBclose(); / 문닫아줌
} 10. return dto; / 뭘 리턴해줄거냐??? dto ---> 이렇게 써줌 오류남 왜? void --->MemberDTO (dto의 데이터 타입이 멤버 dto기 때문에)
}
LoginService
로그인 메소드 만들었으면 사용해야함 ----> 메소드 호출 해줘야함
먼저 메소드 login메소드가 있는 MemberDAO 호출
System.out.println("pw : "+pw); 이어서 밑에다가
1. MemberDAO dao=new MemberDAO();
입력 받아온 email, pw를 dto로 만들어주기
3.MemberDTO dto = new MemberDTO(email, pw) --> 오류남!! 이렇게 만들려면 멤버 dto에서 생성자 만들어줘야함
왜냐하면 MemberDTO에 있는 생성자 email, pw, tel, address만 있기때문에 email,pw 두개만 있는 생성자를 만들어줘야함
실행 dao안에있는 login 메소드 실행 --> 매개변수로 dto 받는다고함
2.dao.login(dto) --> 이메일과 패스워드만 담음 dto 실행
---> 실행하면 결과값 어캐 뭘로 반환?? -->dto로 반환 (위의 10번의 dto 근데 위의 dto는 이메일,pw,tel,address받아드림 그래서 dto를 하나 더 만들어줌
4. info =email, pw, tel, address 4개를 받는 dto생성
MemberDTO info = dao.login(dto);
---> dao에서 로그인이라는 메소드를 실행하면 dto로 받아감(이메일, pw)
---> 실행되고 반환되면 MemberDTO로 받아감 근데 이 MemberDTO는 이메일, pw, tel, address받아감
'java 코딩' 카테고리의 다른 글
dowhile 홀수 짝수 판별 (0) | 2021.12.14 |
---|---|
switch문 사계절 입력 (0) | 2021.12.14 |
다중 if문 계절입력 (0) | 2021.12.02 |
java if 조건문 예제 (0) | 2021.11.22 |
삼항연산자 예제 (상자의 개수구하기) (0) | 2021.11.21 |