DATABASE

데이터 베이스 커넥션 풀(DBCP)

강준석 2023. 2. 7. 17:22
728x90

server에 수정

<Context docBase="0127" path="/0127" reloadable="true"
					source="org.eclipse.jst.jee.server:0127" />
				<Context docBase="0130" path="/0130" reloadable="true"
					source="org.eclipse.jst.jee.server:0130">
				<Resource name="jdbc/myoracle" auth="Container"
		            type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
		            url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
		            username="study" password="1234" maxTotal="20" maxIdle="10"
		            maxWaitMillis="-1"/>
				</Context>>

test.jsp

 

<body>

<%
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
//etc.

out.print("db연결성공");

%>

</body>

회원관리 시스템

 

자바빈, vo(value object), DTO(data transfer object)

:데이터 보관(전달)을 하는 객체

 

DAO(data access object)

: DB접근을 위한 객체

 

package com.study.DAO;

//싱글톤
public class MemberDAO {
	
	//싱글톤은 생성자가 private
	//그래야 다른 class나 등등에서 객체생성을 못함
	private MemberDAO() {
		
	}
	//객체생성 private 다른 곳에서 수정을 못하게 방지
	//static : 정적 객체로 생성(메모리에 공유가 됨)
	private static MemberDAO instance = new MemberDAO();
	
	//생성한 객체를 호출(리턴)하는 메서드
	//수정은 못하나 get은 가능 (읽기 전용)
	public static MemberDAO getInstance() {
		return instance;
	}
	
}

 

싱글톤 객체 리턴하기 불러오기

MemberDAO dao = MemberDAO.getInstance();

 

 

MemberVO.jsp

package com.study.vo;

public class MemberVO {
	
	private String name;
	private String id;
	private String pw;
	private String email;
	private String phone;
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public int getAdmin() {
		return admin;
	}
	public void setAdmin(int admin) {
		this.admin = admin;
	}
	private int admin;
}

 

MemberDAO.jsp

package com.study.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import com.study.vo.MemberVO;

//싱글톤
public class MemberDAO {

	// 싱글톤은 생성자가 private
	// 그래야 다른 class나 등등에서 객체생성을 못함
	private MemberDAO() {

	}

	// 객체생성 private 다른 곳에서 수정을 못하게 방지
	// static : 정적 객체로 생성(메모리에 공유가 됨)
	private static MemberDAO instance = new MemberDAO();

	// 생성한 객체를 호출(리턴)하는 메서드
	// 수정은 못하나 get은 가능 (읽기 전용)
	public static MemberDAO getInstance() {
		return instance;
	}

	// 커넥션 풀 get하는 메서드
	public Connection getConnection() throws Exception {

		Context initContext = new InitialContext();
		Context envContext = (Context) initContext.lookup("java:/comp/env");
		DataSource ds = (DataSource) envContext.lookup("jdbc/myoracle");
		Connection conn = ds.getConnection();

		return conn;
	}

	// 아이디 비번 체크하는 메서드
	public int userCheck(String id, String pw) {

		int result = -1; // 결과 저장 변수

		String sql = "select pw from member where userid=?";

		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;

		try {
			conn = getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();

			if (rs.next()) {
				if (rs.getString("pw") != null && rs.getString("pw").equals(pw)) {
					result = 1; // 아이디 비번 모두 일치함
				} else {
					result = 0; // 아이디는 일치, 비번은 일치하지않음
				}
			} else {
				result = -1; // 입력한 아이디가 없음

			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (conn != null)
					conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return result;
	}

	// 로그인 성공한 사람의 정보를 뺴오는 검색문
	public MemberVO getMember(String id) {
		MemberVO vo = null;
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		String sql = "select * from member where userid=?";
		
		try {
			conn = getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();

			if (rs.next()) {
				vo = new MemberVO();
				
				vo.setName(rs.getString("name"));
				vo.setId(rs.getString("userid"));
				vo.setPw(rs.getString("pw"));
				vo.setEmail(rs.getString("email"));
				vo.setPhone(rs.getString("phone"));
				vo.setAdmin(rs.getInt("admin"));
			}
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (conn != null)
					conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return vo;
	}
}

 

연결확인하기

 

<%@page import="com.study.DAO.MemberDAO"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.naming.Context"%>

<%@ 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>

<%
	MemberDAO dao = MemberDAO.getInstance();
	Connection conn = dao.getConnection();

	out.print("db연결성공");

%>

</body>
</html>

 

login,jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>

<body>
	<h1>로그인</h1>
	
	<form method="post" action="login.do" name="frm">
		아이디 : <input type="text" name="id"> <br>
		비밀번호 : <input type="password" name="pw"> <br>
		<input type="submit" value="로그인" onclick="return loginCheck()">
		<input type="submit" value="회원가입">
	</form>
	
	<script src="../script/member.js"></script>

</body>

 

로그인화면

 

 

member.js


//아이디 유효성 검사
function loginCheck(){
	if(document.frm.id.value.length == 0){
		alert("아이디를 입력하세요.");
		frm.id.focus();
		
		return false; //submit을 막기
	}
//비밀번호 유효성 검사
	if(document.frm.pw.value == ""){
		alert("비밀번호를 입력하세요.");
		frm.id.focus();
		
		return false; //submit을 막기
	}
	
	 	return true; //submit 작동
}

아이디,비밀번호를 안적고 로그인버튼을 누르면 alet창이 뜨고 로그인 막기

 

node 다운

 

https://nodejs.org/download/release/v13.14.0/

 

Index of /download/release/v13.14.0/

 

nodejs.org

밑에서 5번째꺼 다운

 

 

LoginServlet.java

 

package com.study.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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 com.study.DAO.MemberDAO;
import com.study.vo.MemberVO;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

  
    public LoginServlet() {
        // TODO Auto-generated constructor stub
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher dispatcher = request.getRequestDispatcher("member/login.jsp");
		dispatcher.forward(request,response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String url = "member/login.jsp";	//로그인 실패시 이동할 페이지
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		
		MemberDAO dao = MemberDAO.getInstance();
		
		//여기는 dao에서 로그인 인증처리하는 메서드를 호출
		//1 : 로그인 성공  0 : 비번 틀림  -1 : 아이디 틀림
		int result = dao.userCheck(id, pw);
		
		if(result == 1) {
			// 로그인 성공 세션에 회원정보 등록
			MemberVO vo = dao.getMember(id);
			
			HttpSession session = request.getSession();
			
			session.setAttribute("loginUser", vo);
			
			url = "main.jsp"; //로그인 성공시 이동할 페이지
			
		}else if(result == 0){
			// 비번틀렸음 이라는 메세지
			request.setAttribute("msg", "비밀번호가 틀렸습니다.");
		}else {
			// 아이디가 틀렸음 이라는 메세지
			request.setAttribute("msg", "아이디가 틀렸습니다.");
		}
		
		RequestDispatcher dispatcher = request.getRequestDispatcher(url);
		dispatcher.forward(request, response);
	}

}

 

main.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<h1>회원페이지</h1>
	<h3>${loginUser.name}(${loginUser.id})님 환영합니다.</h3>

</body>
</html>
728x90