250x250
Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

개린이 개발노트

국비지원 JAVA(자바) 프로그래밍 (데이터베이스 커넥션 풀, VO,DTO) 본문

국비지원(국비교육) 웹 개발자 과정

국비지원 JAVA(자바) 프로그래밍 (데이터베이스 커넥션 풀, VO,DTO)

개린이9999 2023. 2. 3. 16:20
728x90

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

-> 

여러가지 과부화를 방지하기 위해 사용 

미리 커넥션들을 연결(할당)해두고 사용자가 요청을 하면

이미 연결해놓은 커넥션을 제공해서 데이터베이스에 접속해서 쓸수있게끔 함 

 

커넥션 풀은 server.xml에서 사용 

새로만든 프로젝트를 그냥 실행시켜주고 server.xml 제일 마지막 줄을 수정 

단일태그로 되어있는 것을

				<Context docBase="0130" path="/0130" reloadable="true"
					source="org.eclipse.jst.jee.server:0130">
			   
			   </Context>

위의 방식으로 수정 

 

밑의 사이트로 들어감 

 

https://tomcat.apache.org/tomcat-9.0-doc/jndi-datasource-examples-howto.html#Oracle_8i,_9i_&_10g

 

Apache Tomcat 9 (9.0.71) - JNDI Datasource How-To

JNDI Datasource configuration is covered extensively in the JNDI-Resources-HOWTO. However, feedback from tomcat-user has shown that specifics for individual configurations can be rather tricky. Here then are some example configurations that have been poste

tomcat.apache.org

코드 복사 후

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

1521:xe -> 버전 , username과 password 맞게 수정. 

 

jsp 파일 만든 후  만든 jsp에 아래코드 복사

<%@page import="javax.naming.InitialContext"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@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>

	<%
		Context initContext = new InitialContext();
		Context envContext = (Context) initContext.lookup("java:/comp/env");
		DataSource ds = (DataSource) envContext.lookup("jdbc/myoracle");
		Connection conn = ds.getConnection();
		
		out.print("DB연결성공");
	%>

</body>
</html>


 


회원관리 시스템 만들기

 

자바빈 역할을 해주는 클래스를 만듦 VO ( value object), DTO(data transfer object)  

VO=일시적으로 값만 보관하는 역할 (회원정보 저장)->실제데이터베이스에 접근은 못함

-> 데이터 보관(전달)하는 객체

 

DAO (data access object) -> DB접근을 위한 객체

 

만들기전 node.js 구버전 설치  현재 자바와 맞추기 위해

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

 

Index of /download/release/v13.14.0/

 

nodejs.org

지금의 코드에서 MemberVO의 목적은  DB에서 조회한 값들을 저장하는 용도


MemverVo

package com.study.vo;

public class MemverVO {
	
	private String name;
	private String id;
	private String pw;
	private String email;
	private String phone;
	private int admin;
	
	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;
	}
	
	

}

memberDao

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.MemverVO;

//싱글톤
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 MemverVO getMember(String id) {
		MemverVO 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); // sql문을 가지고 있음, 아직 실행x
			pstmt.setString(1, id); // 바인딩시키면서 sql문 완성
			rs = pstmt.executeQuery(); // sql문 실행이 돼서 리턴된 것이 rs에 보관
		
		if(rs.next()) {
			vo = new MemverVO();
			
			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;
			
			}	
	  public int confirmID(String id) {
		  int result = -1; // 중복검사 결과 저장
		  
		  Connection conn = null;
		  PreparedStatement pstmt = null;
		  ResultSet rs = null;
		  
		  String sql = "select userid from member where userid=?";
		 
		  try {
				conn = getConnection();
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, id);
				rs = pstmt.executeQuery();
			
			if(rs.next()) {
					result = 1; // 중복된 아이디가 있음
				} 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;
		}
	  }

login.jsp

<%@ 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>
	<h1>로그인</h1>
	
	<form action="login.do" method="post" name="frm">
		아이디:<input type ="text" name="id"> <br>
		비밀번호:<input type ="password" name="pw"> <br>
		<input type="submit" value ="로그인" onclick="return loginChech()">
		<input type="button" value="회원가입" onclick="location.href='join.do'">
	</form>
	<h3 style="color:red">${msg}</h3>
 
	<script src="script/member.js"></script>
</body>
</html>

member.js(자바스크립트)

function loginCheck() {
	if(document.frm.id.value.length==0) {
		alert("아이디를 입력하세요");
		frm.id.focus();
	
		return false;
	}
	if(document.frm.pw.value=="") {
		alert("비밀번호를 입력하세요");
		frm.pw.focus();
		
		return false;
	}
		return true;
}

function idCheck() {
	
	if(document.frm.id.value.length==0) {
		alert("아이디를 입력하세요");
		frm.id.focus();
	
		return;
	}
	let url = "idCheck.do?id="+document.frm.id.value;
	window.open(url);
}


 function idOk() {
	self.close();
 }

index.jsp

<%@ 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>
	<h1>첫 페이지</h1>
	<a href="login.do">로그인페이지로 이동</a>
</body>
</html>

JoinServlet

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;


@WebServlet("/join.do")
public class JoinServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    public JoinServlet() {
        super();
    }

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

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

join.jsp

<%@ 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>
	<h1>회원가입</h1>
	
	<form method="post" action="join.do" name="frm">
		이름: <input type="text" name="name"><br>
		아이디: <input type="text" name="id"> 
		<input type = "button" value="중복확인" onclick="idCheck()"><br>
		비밀번호: <input type="password" name="pw"><br>
		비밀번호 확인: <input type="password" name="pw_check"><br>
		이메일: <input type="text" name="email"> <br>
		전화번호: <input type="text" name="phone"> <br>
		회원등급: <input type="radio" name="admin" value="0">일반회원
		 <input type="radio" name="admin" value="1">관리자 <br>
		 <input type="submit" value="회원가입" onclick="">
	</form>

	<script src="script/member.js"></script>
</body>
</html>

idcheck.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>중복확인 페이지</h1>
	<c:if test="${result == 1 }">
		${id}는 사용중인 아이디입니다.
	</c:if>	
	<c:if test="${result == -1 }">
		${id}는 사용가능한 아이디입니다.
		<input type="button" value="사용" onclick="idOk()">
	</c:if>	
	
	<script scr="script/member.js"></script>
</body>
</html>

idcheck.jsp

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 com.study.dao.MemberDAO;


@WebServlet("/idCheck.do")
public class idCheckServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
  
    public idCheckServlet() {
        super();
    }

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		String id = request.getParameter("id");
		
		MemberDAO dao = MemberDAO.getInstance();
		
		int result = dao.confirmID(id);
		
		request.setAttribute("id", id);
		request.setAttribute("result", result);
		
		RequestDispatcher dispatcher = request.getRequestDispatcher("member/idcheck.jsp");
		dispatcher.forward(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
728x90