package com.codingbox.web.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBconnection {
public static Connection getConnection() {
Connection conn = null;
try {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "jsp";
String password = "jsp";
Class.forName(driver);
conn = DriverManager.getConnection(url,user, password);
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("DB접속 오류 발생");
e.printStackTrace();
}catch (Exception e) {
System.out.println("알 수 없는 오류 발생");
e.printStackTrace();
}
return conn;
}
}
우선은 로그인을 하기 위해선 데이터베이스와의 연결이 필수적이다.
1.이름이 jsp이기에 String user를 jsp로 받아오고 비밀번호도 jsp로 설정해 주었다.
localhost가 1512이므로 맞춰주자.
2.ojdbc는 oracle에서 제공하는 오라클 DB를 관리할 수 있도록 도와주는 jdbc이다.
3.이제 JDBC 드라이버를 로드한다.
4.Java의 Class 클래스의 forName 메서드를 사용하여 수행된다. 연결이 성공하면 Connection 객체가 반환된다.
package com.codingbox.web.dto;
public class TblMemberDTO {
private String userid;
private String userpw;
private String username;
private String usergender;
private String userphone;
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;
}
public String getUsergender() {
return usergender;
}
public void setUsergender(String usergender) {
this.usergender = usergender;
}
public String getUserphone() {
return userphone;
}
public void setUserphone(String userphone) {
this.userphone = userphone;
}
}
먼저 DTO이다. 양쪽으로 전송되어 오고가는 데이터들을 담은 객체인데, 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체라고 생각하면 된다.
id,pw,name,gender,userphone으로 아이디, 비밀번호, 이름, 성별, 전화번호 객체를 만들어 주자.
public class TblMemberDAO {
Connection conn;
PreparedStatement pstm;
ResultSet rs;
public TblMemberDTO login(String userid, String userpw) {
TblMemberDTO member = null;
String sql = "SELECT * FROM TBL_MEMBER WHERE USEID = ? AND USERPW = ?";
try {
conn = DBconnection.getConnection();
pstm = conn.prepareStatement(sql);
pstm.setString(1, userid);
pstm.setString(2, userpw);
rs = pstm.executeQuery();
if(rs.next()) {
member = new TblMemberDTO();
member.setUserid(rs.getString(1));
member.setUserpw(rs.getString(2));
member.setUsername(rs.getString(3));
member.setUsergender(rs.getString(4));
member.setUserphone(rs.getString(5));
}
}catch (Exception e) {
e.printStackTrace();
}
return member;
}
1.아이디 입력을 위한 DAO이다. 데이터에 접근, 데이터를 관리하기 위한 객체 데이터들을 관리하고 데이터베이스 서버로부터 레코드를 select한다.
2.DTO객체로 변경해 가져온다. member객체를 만들어서 member를 선언하고 초기화한다. 초기화 값은 null로 설정
3. String sql = "SELECT * FROM TBL_MEMBER WHERE USEID = ? AND USERPW = ?"; 로그인을 확인하기 위기 위한 SQL쿼리 문을 가져왔다.
TBL_MEMBER에서 사용자 아이디와 비밀번호가 입력된 값과 일치하는 행을 검색. ?는 SQL 매개 변수를 나타내며, 나중에 실제 값을 바인딩할 것이다.
4.getconnection을 이용하여 DB연결을 가져온다.
5. if (rs.next()) { ... }: ResultSet에서 next() 메서드를 호출하여 다음 행으로 이동. 이건 해당 아이디와 비밀번호가 일치하는 회원 정보가 데이터베이스에 있는지 확인하는 과정.
6.일치하는 회원 정보가 있으면, 새로운 TblMemberDTO 객체를 생성하고 ResultSet에서 해당 열(칼럼)의 값을 가져와서 member 객체에 저장.
7. 마지막으로 성공하면 member객체 반환
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action = "login_db.jsp" method = "post" name = "frm">
<p>
<label> 아이디: <input type = "text" name = "userid"/>
</label>
</p>
<p>
<label>비밀번호:
<input type = "password" name = "userpw"/>
</label>
</p>
<input type = "button" value = "로그인" onclick = "logincheck()"/>
</form>
<script src = "user.js"></script>
</body>
</html>
user.js를 호출하여 logincheck를 불러온다. 둘은 별개의 것이 아니고 연결된 것.
그리고 login_db.jsp를
function logincheck(){
let frm =document.frm;
let userid = frm.userid;
let userpw = frm.userpw;
if( userid.value == "" ){
alert("아이디를 입력하세요!");
id.focus();
return false;
}
if( userpw.value == "" ){
alert("비밀번호를 입력하세요!");
pw.focus();
return false;
}
frm.submit();
}
user.js코드다. 마지막 submit이 logincheck를 호출하는 것
구현한 화면
<%@page import="com.codingbox.web.dto.TblMemberDTO"%>
<%@page import="com.codingbox.web.dao.TblMemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
TblMemberDAO mdao = new TblMemberDAO();
String userid = request.getParameter("userid");
String userpw = request.getParameter("userpw");
TblMemberDTO member =mdao.login(userid, userpw);
if( member != null){
session.setAttribute("session_id", member);
//db조회
%>
<script>
//alert("로그인 성공")
location.href = 'mainview.jsp'
</script>
<%} else { %>
<script>
alert("로그인 실패")
location.href = 'loginview.jsp'
</script>
<%} %>
</body>
</html>
1.TblMemberDAO 클래스의 인스턴스를 생성하고, 사용자가 입력한 userid와 userpw 값을 가져온다.
2. TblMemberDAO 클래스의 login 메서드를 호출하여 사용자의 로그인을 시도하고, 그 결과를 TblMemberDTO 객체인 member에 저장
3. session.setAttribute("session_id", member)을 사용하여 세션에 사용자 정보를 저장
4.javaScript를 사용하여 클라이언트를 다른 페이지인 'mainview.jsp'로 리다이렉트
5. 성공하면 로그인 성공, 실패하면 로그인 실패로 alert창 띄우기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- session에 있는 값을 비워
loginpage로 이동 -> loginview.jsp
-->
<%
//session.invalidate(); //세션에 있는 모든 값 삭제
session.removeAttribute("session_id");//session에 정의된 특정 값만 삭제
response.sendRedirect("loginview.jsp");
%>
</body>
</html>
세션에 저장된 값을 삭제함으로써 로그아웃해준다.