ABOUT ME

더 많은 경험으로 더 넓은 세상으로

Today
Yesterday
Total
  • Java Beans 활용하여 로그인 만들기(2)
    프로그래밍/JSP 2022. 11. 29. 22:48
    728x90

     

     

    지난 시간에 이어 이번 시간에는 DB와 연동하여 Java Beans 를 활용한 로그인 로직을 만들어 볼 것이다.

     

     

    먼저 로그인 로직에서 사용될 DTO, DAO 객체와 Dbconn.java 파일을 생성하여 작성한다.

     

     

    기존에는 DB와 커넥션을 맺기 위해서 JSP 파일 내 자바코드를 입력하여 커넥션을 맺었지만 지금은 따로 Dbconn 파일을 생성하여 코드의 중복을 줄이고 싱글톤 패턴을 사용하여 동시에 커넥션 맺는 것을 방지한다.

     

     

    Dbconn.java 

    package com.koreait.db;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    
    public class Dbconn {
    	public static Connection getConnection() {
    		Connection conn = null;
    		
    		try {
    			String url = "jdbc:mysql://localhost:3306/aiclass";
    			String uid = "root";
    			String upw = "1234";
    			Class.forName("com.mysql.cj.jdbc.Driver");
    			conn = DriverManager.getConnection(url, uid, upw);
    		}catch(Exception e) {
    			e.printStackTrace();
    		}
    		return conn;
    	}
    }

     

     

    MemberDTO.java

    package com.koreait.member;
    
    import java.util.Arrays;
    
    public class MemberDTO {
    	private int idx;
    	private String userid;
    	private String userpw;
    	private String username;
    
    	public int getIdx() {
    		return idx;
    	}
    
    	public void setIdx(int idx) {
    		this.idx = idx;
    	}
    
    	public String getUserid() {
    		return userid;
    	}
    
    	public void setUserid(String userid) {
    		this.userid = userid;
    	}
    
    	public String getUserpw() {
    		return userpw;
    	}
    
    	public void setUserpw(String userpw) {
    		this.userpw = userpw;
    	}
    
    	public String getUsername() {
    		return username;
    	}
    
    	public void setUsername(String username) {
    		this.username = username;
    	}
    
    }

     

     

    MemberDAO.java

    package com.koreait.member;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Scanner;
    import com.koreait.db.Dbconn;
    
    public class MemberDAO {
    
    	Connection conn = null;
    	PreparedStatement pstmt = null;
    	ResultSet rs;
    	String sql = "";
    
    	public MemberDTO login(MemberDTO member) throws SQLException {
    		try {
    			conn = Dbconn.getConnection();
    
    	sql = "select tb_idx, tb_name from tb_user where tb_userid=? and tb_userpw=?";
    			pstmt = conn.prepareStatement(sql);
    			pstmt.setString(1, member.getUserid());
    			pstmt.setString(2, member.getUserpw());
    			rs = pstmt.executeQuery();
    			if (rs.next()) {
    				member.setIdx(rs.getInt("tb_idx"));
    				member.setUsername(rs.getString("tb_name"));
    				return member;
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    
    }

     

    DAO는 직접적으로 쿼리를 통해 조회, 삽입, 갱신, 삭제 처리를 하고 결과를 DTO 객체에 저장할 수 있다.

     

     

     


     

     

    login.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%
    	String userid = null;
    	String name = null;
    	if(session.getAttribute("userid") != null){
    		userid = (String)session.getAttribute("userid");
     		name = (String)session.getAttribute("name");
    	}
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>로그인</title>
    </head>
    <body>
    	<h2>로그인</h2>
    <%
    	if(userid == null){
    %>
    	<form method="post" action="login_ok.jsp">
    		<p>아이디 : <input type="text" name="userid"></p>
    		<p>비밀번호 : <input type="password" name="userpw"></p>
    		<p><input type="submit" value="로그인"></p>
    		<p>회원이 아니신가요? <a href='./regist.jsp'>회원가입</a></p>
    	</form>
    <%
    	}else{
    %>
    	<h3><%=userid%>(<%=name%>)님 환영합니다.</h3>
    	<p>
    		<input type="button" value="커뮤니티" onclick="location.href='./board/list.jsp'">
    		<input type="button" value="정보수정" onclick="location.href='info.jsp'">
    		<input type="button" value="로그아웃" onclick="location.href='logout.jsp'">
    	</p>
    <%
    	}
    %>
    </body>
    </html>

     

     

     

     

    login_ok.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
        
    <jsp:useBean class="com.koreait.member.MemberDTO" id="member"/>
    <jsp:setProperty property="userid" name="member"/>
    <jsp:setProperty property="userpw" name="member"/>
    
    <jsp:useBean class="com.koreait.member.MemberDAO" id="memberDAO"/>
    <%
    	if((member = memberDAO.login(member)) != null){
    		session.setAttribute("userid", member.getUserid());
    		session.setAttribute("name", member.getUsername());
    		session.setAttribute("idx", member.getIdx());
    %>
    	<script>
    		alert('로그인되었습니다.');
    		location.href="login.jsp";
    	</script>
    <%
    	}else{ // 로그인 실패
    %>	
    	<script>
    		alert('아이디 또는 비밀번호를 확인하세요');
    		history.back();	
    	</script>
    <%
    	}
    %>	

    memberDAO 안에 login() 메소드를 호출하여 메소드 리턴값이 null일 경우 로그인이 실패, 리턴값이 null이 아닐 경우 MemberDTO에서 userid, username, idx를 받아 세션으로 생성한다.

     

     

     

     

     

    logout.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%
    	session.invalidate();
    %>
    <script>
    	alert('로그아웃 되었습니다');
    	location.href='login.jsp';
    </script>
    
    

     

     

     

     

     

    로그인 페이지

     

     

    로그인 성공 화면

     

     

    728x90

    '프로그래밍 > JSP' 카테고리의 다른 글

    댓글

Designed by Tistory.