국비지원 JAVA(자바) 프로그래밍 (데이터베이스 커넥션 풀, VO,DTO)
데이터베이스 커넥션 풀(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);
}
}