데이터베이스 설치 및 회원정보를 담을 수 있는 유저테이블을 구축하고 자바빈스로 유저클래스를 만들어주었다.

 

이제 실제로 로그인 기능을 구현해보려고 한다.

 

1. DAO 클래스를 만들어준다.

*DAO(Database Access Object)

jsp에서 회원 데이터베이스 테이블에 접근할 수 있도록 dao를 만들어주어야 한다.

데이터베이스접근객체의 약자이다.

실질적으로 데이터베이스에서 회원정보를 불러오거나

데이터베이스에 회원데이터베이스를 넣고자할 때에 넣을 때 사용한다.

 

2. java sql.connection 외부라이브러리를 추가 및 mysql 접속하도록 객체생성 한다.

 

사진

 

-Connection은 데이터베이스에 접근할 수 있는 객체를 의미한다.

-해킹기법으로부터 방어하기 위한 코드

-정보를 담을 수 있는 객체

 

3. conn 객체 안에 mysql 접속url, 아이디 비번 담기게 해주는 코드 작성을 한다.

4. 실제로 로그인을 시도하는 하나의 함수를 만든다.

 

-하나의 계정에 대한 로그인 함수를 만든다.

-유저아이디와 비밀번호를 처리할 수 있는 함수를 만든다.

-실제로 데이터베이스에 입력할 명령어를 sql 문장으로 만들어준다.

-try catch문장을 넣어서 예외처리를 할수 있도록 한다.

 예외가 발생한 경우 해당 예외를 return -2(데이터베이스 오류)로 출력할 수 있도록 한다.

 

사진

 

-sql 인젝션 해킹을 방어하기 위해 수단으로서 하나의 문장을 미리준비해서 ?를 넣음으로서

pstmt = conn.preparestatement에 정해진 sql을 문장을 데이터베이스에 삽입하는 형식으로 인스턴스를 가져온다.

pstmt.setstring(1, userID);

 

그 물음표에 해당하는 내용을 USERID를 물음표에 들어가게 한다.

매개변수로 들어오는 USERID를 물음표에 들어갈 수 있게 한다.

데이터베이스에 사용자 아이디를 입력받아서 실제 존재하는지 비밀번호는 무엇인지를 파악하고 가져온다.

 

rs.next(결과를 담는 객체)에 결과가 데이터베이스에 아이디가 없으면 -1

아이디가 있으면 로그인 성공의 return 값인 1에 해당하는 메세지 출력이 된다.

 

 

사진

 

5. loginAction.jsp 페이지를 만든다. (사용자 로그인 처리 페이지를 만든다.)

 

-<%@ page import="user.UserDAO" %>

(작성한UserDAO 클래스를 가져오기 위해서 작성)

 

-<%@ page import="java.io.PrintWriter" %>

(java io에잇는자바스크립트를작성하기위해서작성)

 

-<% request.setCharacterEncoding("UTF-8"); %>

(건너오는데이터를UTF-8로받게하기위해작성)

 

JavaBeans를 활용해서 한명의 회원 정보를 담는 유저라는 클래스를 JavaBeans로 사용한다.

 

<jsp:useBean id="user" class="user.User" scope="page"/>

-> 현재페이지내에서자바beans가사용되도록한다.

 

<jsp:setProperty name="user" property="userID" />

-> 한명의사용자의userID를로그인페이지에서받아서넘겨주는역할

 

<jsp:setProperty name="user" property="userPassword" />

-> 한명의사용자의비번을로그인페이지에서받아서넘겨주는역할

 

*공부를 하다 보니 객체와 인스턴스의 차이가 애매한 것 같아 찾아 보았다.

객체(Object) 및 인스턴스(Instance) 클래스의 타입으로 선언되었을 때 객체라고 부른다

그 객체가 메모리에 넘어가서(할당될때에) 사용될 때 인스턴스라고 부를 수 있다.

객체는 실제적인 실체, 인스턴스는 넘어가서 받아서 사용된다는 연결/관계에 초점을 맞춘다.

객체를 클래스의 인스턴스라고 불리기도 한다.

 

 

6. mysql에 접속하기 위한 드라이버를 프로젝트에 추가 해준다.

msql jdbc driver = mysqljsp를 연결할 수 있는 드라이버

 

 

사진1 다운로드

 

사진2(mysql 커넥터 압축풀기 및 복사하여 붙여넣기)

 

사진3 (mysql 드라이버 정상연결 과정)

 

7. 로그인 시도시 자꾸 -2 데이터베이스 에러가 난다.

아이디와 비번을 다시 맞추어서 작성했는데도 불구하고 데이터베이스에러가 보인다.

 

 

에러내용

Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '????α is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.

 

찾아보니 하기의 것으로 서버 타임존 과 관련된 dbURL을 해주어야 한다고 나옴

타임존이 별도로 지정 되어 있지 않아서 설정을 해주어야 한다고 함.

 

1) JDBC URL의 문자열에 서버타임존 정보를 추가한다.

->String dbURL = "jdbc:mysql://localhost:3306/JSP?serverTimezone=UTC";

나는 첫 번째 방법을 사용했다.

 

2) 서버에서 직접 기본설정을 하기 해준다.

 

[mysqld]

default-time-zone='+8:00'

 

수정내용

 

8.로그인 성공 그리고 각각의 상황에 맞는 메시지가 나온다.

 

사진

사진2

+ Recent posts