본문 바로가기
개발 공부 Today I Learned

[국비 26일차 TIL] JSP 프로젝트 생성, 데이터베이스 연결

by 개발자신입 2023. 12. 27.
반응형

JSP

JavaServer Pages의 약자를 뜻하며, HTML 코드에 JAVA 코드를 사용하여 동적 웹페이지(Dynamic Web Page)를 생성하는 웹 어플리케이션 도구(라이브러리)이다.

 

JSP가 실행되면 자바 "Servlet"으로 변환이 되며, 웹 어플리케이션 서버에서 동작되게 되며, 생성된 데이터들을 웹페이지와 클라이언트를 통해 응답을 한다.


JSP 프로젝트 생성

index 만들기

<%@page import="com.coffee.db.EmployeesDTO"%>
<%@page import="java.util.List"%>
<%@page import="com.coffee.db.EmployeesDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>12월 27일</title>
</head>
<body>
	<h1>Departments</h1>
	
<%
// 여기는 자바 영역입니다.
EmployeesDAO dao = new EmployeesDAO(); // 객체 생성
List<EmployeesDTO> list = dao.selectDeptpartments(); // 실행
%>


<!-- html 영역 -->

	<table border="1">
		<tr>
			<td>dept_no</td>
			<td>dept_name</td>
		</tr>
		<% for(int i = 0; i < list.size(); i++ ) { %>
		<tr>
			<td><%=list.get(i).getDept_no() %></td>
			<td><%=list.get(i).getDept_name() %></td>
		</tr>
		<% } %>
	</table>
	<a href="./employees.jsp">직원 목록 보기</a>
</body>
</html>

 

employees 만들기

<%@page import="com.coffee.db.EmployeesDTO"%>
<%@page import="java.util.List"%>
<%@page import="com.coffee.db.EmployeesDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>직원 목록</title>
</head>
<body>
	<H1>직원 목록</H1>
	<!--  1. import DAO -->
	<% 
	EmployeesDAO dao = new EmployeesDAO();
	List<EmployeesDTO> list = dao.selectEmployees();
	%>
	
	<!-- 2. 값 받기 -->
	
	<!-- 3. 값 출력 -->
	<table border = "1">
		<tr>
			<td>emp_no</td>
			<td>first_name</td>
			<td>last_name</td>
			<td>birth_date</td>
			<td>gender</td>
			<td>hire_date</td>
		</tr>

		<%
		for(int i = 0; i < list.size(); i++) {
		%>	
			
		<tr>
			<td><%=list.get(i).getEmp_no() %></td>
			<td><%=list.get(i).getFirst_name() %></td>
			<td><%=list.get(i).getLast_name() %></td>
			<td><%=list.get(i).getBirth_date() %></td>
			<td><%=list.get(i).getGender() %></td>
			<td><%=list.get(i).getHire_date() %></td>
		</tr>
		
		<%
		} 
		%>
			
		
	</table>
</body>
</html>

 

main 만들기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%> <!-- jsp 형태 -->
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	</head>
	
	<body>
		<h1>h1 입니다.</h1>
		<h2>h2 입니다.</h2>
		<h3>h3 입니다.</h3>
		
		<태그 속성='값'> 화면에 보여줄 글자</태그>
		
		<a href="./index.jsp">인덱스로 고~</a>
		<p> p 태그는 단락 태그입니다.</p>
		<div> div 태그는 영역 태그입니다.</div>
		<br> br은 줄 바꿈입니다. <br>
		<img> img는 이미지입니다. <br>
		<hr> hr은 선을 그어줍니다. <br>
		<pre> pre 사이에서는 원하는 모양으로 출력      됩니    다.
		<b>글자를 굵게 만들어주는 b ~ </b>
		</pre>
		그럼 <strong> strong은? </strong> <br><br>

		글자를 기울이는 <i>i 아이 태그~</i><br><br>

		<del>취소선은 del을 사용하세요~ </del><br><br>

		<ins>밑줄도 가능! ins를 사용하세요.</ins><br><br>
		x<sup>2</sup> : 이건 x의 제곱 <br><br>
		h<sub>2</sub>0	: h20 표현<br><br>
		
	</body>
</html>

 


데이터베이스

DB 연결

 

package com.coffee.db;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

// 접속 정보만 가지고 있는 클래스

public class DBConnection {
	public Connection getConnection() { // getConnection을 실행하면 Connection이 나옴
		Connection con = null;
		
		// 싱글턴 패턴화
		
		try {
			Class.forName("org.mariadb.jdbc.Driver");
			String url = "jdbc:mariadb://------";
			String user = "------";
			String pw = "-----";
			con = DriverManager.getConnection(url, user, pw);
			
		} catch (ClassNotFoundException e) {
			System.out.println("클래스가 없습니다.");
		} catch (SQLException e) {
			System.out.println("접속 정보를 확인하세요.");
		}
		
		
		return con;
	}
}

 

DTO (데이터 전송 객체)

// 데이터 전송 객체 (Data Transfer Object)
package com.coffee.db;



public class EmployeesDTO {		// private로 잠궈야함 (필수)
	
	// 값을 담을 변수
	private String dept_no, dept_name;	// 다른 class에서 수정 불가 -> getter setter로 접근해야 함.
	private int emp_no;
	private String birth_date, first_name, last_name, hire_date;
	private char gender;
	
	// getter setter 메소드
	public String getDept_no() {
		return dept_no;
	}

	public void setDept_no(String dept_no) {
		this.dept_no = dept_no;
	}

	public String getDept_name() {
		return dept_name;
	}

	public void setDept_name(String dept_name) {
		this.dept_name = dept_name;
	}

	public int getEmp_no() {
		return emp_no;
	}

	public void setEmp_no(int emp_no) {
		this.emp_no = emp_no;
	}

	public String getBirth_date() {
		return birth_date;
	}

	public void setBirth_date(String birth_date) {
		this.birth_date = birth_date;
	}

	public String getFirst_name() {
		return first_name;
	}

	public void setFirst_name(String first_name) {
		this.first_name = first_name;
	}

	public String getLast_name() {
		return last_name;
	}

	public void setLast_name(String last_name) {
		this.last_name = last_name;
	}

	public String getHire_date() {
		return hire_date;
	}

	public void setHire_date(String hire_date) {
		this.hire_date = hire_date;
	}

	public void setGender(char c) {
		// TODO Auto-generated method stub
		
	}

	public char getGender() {
		return gender;
	}

//	public void setGender(String string) {
//		this.gender = string;
//	}
	
}

 

 

DAO (데이터 접속 객체)

 

package com.coffee.db;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

// 데이터베이스 접속 객체 (Data Access Object)

public class EmployeesDAO {
	DBConnection dbConn = new DBConnection(); // 객체 생성, 
	
	public List<EmployeesDTO> selectEmployees() {
		List<EmployeesDTO> result = null;
		
		// 접속 정보
		Connection con = dbConn.getConnection();
		
		// 객체, sql
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM employees LIMIT 0, 10"; 
		
		// 로직
		try {
			pstmt = con.prepareStatement(sql);
			rs = pstmt.executeQuery(); 		// select문은 이 메소드로 실행함
			
			result = new ArrayList<EmployeesDTO>();
			while (rs.next()) {
				EmployeesDTO dto = new EmployeesDTO();
				dto.setEmp_no(rs.getInt(1));
				dto.setBirth_date(rs.getString(2));
				dto.setFirst_name(rs.getString(3));
				dto.setLast_name(rs.getString(4));
				dto.setGender(rs.getString(5).charAt(0));
				dto.setHire_date(rs.getString(6));
				
				result.add(dto);
			} 
					
		} catch (SQLException e) {
			
		} finally {
			try {
				rs.close();
				pstmt.close();
				con.close();
			} catch (SQLException e) {

			}
		}
			return result;
	}
	
	public List<EmployeesDTO> selectDeptpartments(){  // selectDeptpartments 구동시키면 List<EmployeesDTO> 리스트가 나옴
		List<EmployeesDTO> result = null;
		
		// 데이터베이스 접속 정보
		Connection conn = dbConn.getConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		// sql
		String sql = "SELECT * FROM departments";
		
		try {
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
			// 데이터 만드는 작업
			
//			while(rs.next()) {   // rs 값이 없을 때까지 while 돌아감
//			String dept_no = rs.getString(1); // DB에서는 1부터 시작! 순서대로하려면 숫자 입력
//			String dept_name = rs.getString(2);
//			System.out.println(dept_no + " : " + dept_name);
//		}
			
			result = new ArrayList<EmployeesDTO>();
					
			while(rs.next()) {
				EmployeesDTO dto = new EmployeesDTO();	// 한 줄 추출(튜플) 반복
				dto.setDept_no(rs.getString(1));
				dto.setDept_name(rs.getString(2));
				result.add(dto); // dto를 한 줄 씩 '객체'로 저장 후 while
			}
		} catch (SQLException e) {
		
		} finally {
			try {
				rs.close();
				pstmt.close();
				conn.close();
			} catch (SQLException e) {

			}
		}
		
		return result;
	}
}

 


JSP 프로젝트 생성

 

index 페이지 만들기

 

<%@page import="com.coffee.db.EmployeesDTO"%>
<%@page import="java.util.List"%>
<%@page import="com.coffee.db.EmployeesDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>12월 27일</title>
</head>
<body>
	<h1>Departments</h1>
	
<%
// 여기는 자바 영역입니다.
EmployeesDAO dao = new EmployeesDAO(); // 객체 생성
List<EmployeesDTO> list = dao.selectDeptpartments(); // 실행
%>


<!-- html 영역 -->

	<table border="1">
		<tr>
			<td>dept_no</td>
			<td>dept_name</td>
		</tr>
		<% for(int i = 0; i < list.size(); i++ ) { %>
		<tr>
			<td><%=list.get(i).getDept_no() %></td>
			<td><%=list.get(i).getDept_name() %></td>
		</tr>
		<% } %>
	</table>
	<a href="./employees.jsp">직원 목록 보기</a>
</body>
</html>

 

 

employees 페이지 만들기

 

<%@page import="com.coffee.db.EmployeesDTO"%>
<%@page import="java.util.List"%>
<%@page import="com.coffee.db.EmployeesDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>직원 목록</title>
</head>
<body>
	<H1>직원 목록</H1>
	<!--  1. import DAO -->
	<% 
	EmployeesDAO dao = new EmployeesDAO();
	List<EmployeesDTO> list = dao.selectEmployees();
	%>
	
	<!-- 2. 값 받기 -->
	
	<!-- 3. 값 출력 -->
	<table border = "1">
		<tr>
			<td>emp_no</td>
			<td>first_name</td>
			<td>last_name</td>
			<td>birth_date</td>
			<td>gender</td>
			<td>hire_date</td>
		</tr>

		<%
		for(int i = 0; i < list.size(); i++) {
		%>	
			
		<tr>
			<td><%=list.get(i).getEmp_no() %></td>
			<td><%=list.get(i).getFirst_name() %></td>
			<td><%=list.get(i).getLast_name() %></td>
			<td><%=list.get(i).getBirth_date() %></td>
			<td><%=list.get(i).getGender() %></td>
			<td><%=list.get(i).getHire_date() %></td>
		</tr>
		
		<%
		} 
		%>
			
		
	</table>
</body>
</html>

 

 

main 페이지 만들기

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%> <!-- jsp 형태 -->
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	</head>
	
	<body>
		<h1>h1 입니다.</h1>
		<h2>h2 입니다.</h2>
		<h3>h3 입니다.</h3>
		
		<태그 속성='값'> 화면에 보여줄 글자</태그>
		
		<a href="./index.jsp">인덱스로 고~</a>
		<p> p 태그는 단락 태그입니다.</p>
		<div> div 태그는 영역 태그입니다.</div>
		<br> br은 줄 바꿈입니다. <br>
		<img> img는 이미지입니다. <br>
		<hr> hr은 선을 그어줍니다. <br>
		<pre> pre 사이에서는 원하는 모양으로 출력      됩니    다.
		<b>글자를 굵게 만들어주는 b ~ </b>
		</pre>
		그럼 <strong> strong은? </strong> <br><br>

		글자를 기울이는 <i>i 아이 태그~</i><br><br>

		<del>취소선은 del을 사용하세요~ </del><br><br>

		<ins>밑줄도 가능! ins를 사용하세요.</ins><br><br>
		x<sup>2</sup> : 이건 x의 제곱 <br><br>
		h<sub>2</sub>0	: h20 표현<br><br>
		
	</body>
</html>
반응형

댓글