본문 바로가기
  • 마침표 보다 쉼표를 나타내자
국비교육 [完]/WebMarket

4. 데이터 베이스 로그인 기능 구현

by Y코더 2023. 3. 1.
728x90

이 화면에서 로그인 버튼이 작동하도록 만들어보자.

이 화면을 만들어 보자.

 

 

아차차... 로그인 기능 부터 간단히 구현 해보자

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="utils.CookieManager" %>
<%
   String loginId = CookieManager.readCookie(request, "loginId");
   //CookieManager.java에서 static으로 Cookie객체가 생성되기 때문에
   //import해온 IdSaveMain.jsp에서는 새로 객체를 생성할 필요가 없다.

   String cookieCheck = "";
   if(!loginId.equals("")){
      cookieCheck = "checked";
   }
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <h2>지금 당장 로그인!!</h2>
   <form action="./process/IdSaveProcess.jsp" method="post">
   	  <br/>
      회원님을 기억할까요?
   <input type="checkbox" name="save_check" value="Y" <%= cookieCheck %> />
      <br/>
      <br/>
      <input class="form-control form-control-lg" type="text" name="user_id" value="<%= loginId %>" placeholder="아이디를 입력해 주세요!!" aria-label=".form-control-lg example">
      <br/>
      <br/>
      <input class="form-control form-control-lg" type="text" name="user_pw" placeholder="비밀번호를 입력해 주세요!!" aria-label=".form-control-lg example">
      <br/>
      <br/>
       <button type="submit" class="btn btn-primary">로그인하기</button>
   </form>
</body>
</html>

 

여기에 입력된 값을 데이터 베이스에 넘기는 파일을 생성해보자

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="utils.CookieManager" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="utils.JSFunction" %>
<%@ page import="common.JDBConnect" %>
<%@ page import="java.sql.Statement" %>
<%@ page import="java.sql.ResultSet" %>

<%
	try{
		JDBConnect jdbc = new JDBConnect();
		String user_id = request.getParameter("user_id");
		
		String sql = "SELECT id, pass FROM member WHERE ID='" + user_id + "'";
		Statement stmt = jdbc.con.createStatement();
		
		ResultSet rs = stmt.executeQuery(sql);
		
		String id = null;
		String pw = null;
		
		if(rs.next()){
			id = rs.getString(1);
			pw = rs.getString(2);
		}
		
		String user_pw = request.getParameter("user_pw");
		String save_check = request.getParameter("save_check");
		
		if(id.equals(user_id) && pw.equals(user_pw)){
		  if(save_check != null && save_check.equals("Y")){
		     CookieManager.makeCookie(response, "loginId", user_id, 86400);
		  }else {
		     CookieManager.deleteCookie(response, "loginId");
		  }
		  JSFunction.alertLocation("로그인에 성공했습니다", "../Products.jsp", out);
		}else{
		  JSFunction.alertBack("로그인에 실패했습니다.", out);
		}
	}catch(Exception e){
		e.printStackTrace();
		response.sendRedirect("../LoginDisplay.jsp");
	}
%>

쿼리문으로 입력된 아이디로 패스워드를 찾고,

그것이 맞는지 비교해보는 식으로 코딩을 했다.

잘못된 입력처리는 예외처리로 하였는데

즉, 로그인 첫페이지를 리스폰 하는 형태로 제작 하였다.

 

 

 

로그인이 성공 했을때 알림이 뜨도록 유틸에 자바를 만들어보자.

package utils;

import javax.servlet.jsp.JspWriter;

public class JSFunction {
	
	public static void alertLocation(String msg, String url, JspWriter out) {
		try {
			String script = ""
					+ "<script>"
					+ "     alert('" + msg + "');"
					+ "		location.href='" + url + "';"
					+ "</script>";
			out.print(script);
		}
		catch (Exception e) {}
	}
	
	public static void alertBack(String msg, JspWriter out) {
		try {
			String script = ""
					+ "<script>"
					+ "     alert('" + msg + "');"
					+ "		history.back();"
					+ "</script>";
			out.print(script);
		}
		catch (Exception e) {}
	}
}

 

 

로그인이 성공했을때 아이디를 쿠키에 저장하는 자바도 만들어보자.

package utils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookieManager {
	
	public static void makeCookie(HttpServletResponse response, String cName, String cValue, int cTime) {
		Cookie cookie = new Cookie(cName, cValue);
		cookie.setPath("/");
		cookie.setMaxAge(cTime);
		response.addCookie(cookie);
	}
	
	public static String readCookie(HttpServletRequest request, String cName) {
		String cookieValue = "";
		
		Cookie[] cookies = request.getCookies();
		if (cookies != null) {
			for (Cookie c : cookies) {
				String cookieName = c.getName();
				if (cookieName.equals(cName)) {
					cookieValue = c.getValue();
				}
			}
		}
		return cookieValue;
	}
	
	public static void deleteCookie(HttpServletResponse response, String cName) {
		makeCookie(response, cName, "", 0);
	}
}

 

이야... 정말 재미있다.

 

 

 

 

자자! 데이터 베이스를 연결해보자

 

웹에 라이브러리 폴더에 오라클 JDBC를 넣어 줘야한다.

경로는 

oraclexe 가 있는 곳을 찾고

app

oracle

product

11.2.0

server

jdbc

lib

이 순서대로 따라가면 ojdbc6.jar이 있을 것이다 추가해준다.

 

 

그리고 직적 연결을 하는 자바를 만들어보자

package common;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletContext;

public class JDBConnect {
	public Connection con;
	public Statement stmt;
	public PreparedStatement pstmt;
	public ResultSet rs;
	
	public JDBConnect() {
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String id = "musthave";
			String pwd = "1234";
			con = DriverManager.getConnection(url, id, pwd);
			System.out.println("DB 연결 성공(기본생성자)");
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public JDBConnect(String driver, String url, String id, String pwd) {
		try {
			Class.forName(driver);
			con = DriverManager.getConnection(url, id, pwd);
			System.out.println("DB 연결 성공");
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public JDBConnect(ServletContext application) {
		try {
			String driver = application.getInitParameter("OracleDriver");
			Class.forName(driver);
			String url = application.getInitParameter("OracleURL");
			String id = application.getInitParameter("OracleId");
			String pwd = application.getInitParameter("OraclePwd");
			con = DriverManager.getConnection(url, id, pwd);
			System.out.println("DB 연결 성공(인수생성자2 - 내장객체 application)");
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public void close() {
		try {
			if(rs != null) rs.close();
			if(stmt != null) stmt.close();
			if(pstmt != null) pstmt.close();
			if(con != null) con.close();
			System.out.println("JDBC 자원 해제");
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

 

오라클 드라이버를 불러와서 연결을 한다.

 

 

그리고 로그인이 잘되는지 확인한다.

 

이제 화면을 꾸며 보도록한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%@ include file="menu.jsp"%>
		<div class="text-center">
			<br/>
			<br/>
			<%@ include file="./process/IdSaveMain.jsp"%>
			<br/>
			<br/>
		</div>
		<hr>
	<%@ include file="./footer/footer.jsp"%>
</body>
</html>

별 것이 없다...

중간에다가 만든 아이디창을 심고

부트 스트랩으로 꾸며주는 것이다.

 

그리고 로그인에 성공한다면

전에 만들었던 Products.jsp 페이지로 이동하게 만들었다.

 

728x90

'국비교육 [完] > WebMarket' 카테고리의 다른 글

6. 세션으로 로그인  (0) 2023.03.09
5. 회원 가입  (0) 2023.03.02
3. 상품 목록 만들기  (0) 2023.03.01
2. 홈페이지 첫 화면을 만들어보자  (0) 2023.03.01
1. 웹마켓 프로젝트 생성  (0) 2023.03.01