이미 회원가입 페이지를 만들어보았기 때문에 겹치는 부분이 있을 수 있다.
html를 통해 로그인 정보를 받아준다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
fieldset {
text-align: center;
display: inline;
}
</style>
</head>
<body>
<form action="login" method="post">
<fieldset>
<legend>로그인</legend>
<input type="text" name="id" placeholder="ID를 입력해주세요"><br>
<input type="password" name="pw" placeholder="PW를 입력해주세요"><br>
<input type="submit" value="로그인">
</fieldset>
</form>
</body>
</html>
DAO에 있는 메소드가 어떤 형태인지부터 확인한다.
package Model;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Connection;
public class DAO {
// 전역변수 선언
Connection conn = null;
PreparedStatement psmt = null;
int cnt = 0;
ResultSet rs = null;
// DB 연결 메소드
public void db_conn() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String db_url = "jdbc:oracle:thin:@localhost:1521:xe";
String db_id = "hr";
String db_pw = "hr";
// DB에 연결 -> 연결 성공하면 Connection 객체로 반환
conn = DriverManager.getConnection(db_url, db_id, db_pw);
if (conn != null) {
System.out.println("DB 연결 성공");
} else {
System.out.println("DB 연결 실패");
}
} catch (Exception e) {
e.printStackTrace();
}
}
// DB 연결 해제 메소드
public void db_close() {
try {
if (rs != null) rs.close();
if (psmt != null) psmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 로그인 메소드
public String login(String id, String pw) {
String nickname = null;
try {
db_conn();
// 입력한 id, pw member테이블에 있는지 확인
String sql = "select nickname from member10 where id=? and pw=?";
// sql문장 DB에 전달하면 psmt에 저장
psmt = conn.prepareStatement(sql);
// 바인드 변수에 값 채우기
psmt.setString(1, id);
psmt.setString(2, pw);
// sql문장 실행
// query -> 질의하다
// executeQuery : select문에서 사용, db에 값이 있는지 조회
// resultset : sql 실행 결과라고 생각하기
rs = psmt.executeQuery();
// next() : 다음 줄로 이동해서 값이 있는지 없는지 확인
// : 리턴값은 boolean
// : 다음줄에 값이 있으면 true 없으면 false
// : 값이 있는 경우에 if문 내의 코드를 실행한다
// -> nickname이라는 스트링값에 닉네임이 대입된다.
if (rs.next()) {
nickname = rs.getString("nickname");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
db_close();
}return nickname;
}
}
- login Servlet
package controller;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import Model.DAO;
@WebServlet("/login")
public class login_session extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Login Controller");
// POST 방식 인코딩
request.setCharacterEncoding("UTF-8");
// 입력받은 값 가져오기
String id = request.getParameter("id");
String pw = request.getParameter("pw");
System.out.println("id : "+id);
System.out.println("pw : "+pw);
String nickname = new DAO().login(id, pw);
if(nickname!=null){
System.out.println("로그인 성공");
// session 생성하여 nickname값 전송
HttpSession session = request.getSession();
session.setAttribute("name", nickname);
response.sendRedirect("./loginSuccess.jsp");
}else{
System.out.println("로그인 실패");
response.sendRedirect("./loginFail.jsp");
}
}
}
DAO의 login메소드를 실행했을 때 사용자가 입력한 정보가 DB에 존재했다면
login 메소드는 사용자의 nickname을 반환했을 것.
그렇기 때문에 nickname이 null 아니라면 로그인이 성공한 것이다.
session에 nickname을 저장해주도록 하자.
'웹 개발 언어 > JSP&Servlet' 카테고리의 다른 글
Cookie & Session 쿠키와 세션-2 (0) | 2022.04.22 |
---|---|
Cookie & Session 쿠키와 세션-1 (0) | 2022.04.21 |
MVC 패턴 Model2를 이용해서 회원가입 페이지 만들기 (0) | 2022.04.21 |
MVC 패턴 Model1을 통해 로그인 기능 만들어보자 (0) | 2022.04.18 |
MVC 패턴 Model1을 통해 회원가입 기능 만들어보자 (0) | 2022.04.18 |
댓글