KDT/WEB

231215 WEB - JSP12(데이터베이스 연결, MVC)

001cloudid 2023. 12. 15. 17:42
728x90

데이터베이스 연결

<!-- 231214 + 231215 -->
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="com.mysql.cj.xdevapi.PreparableStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp4/list.jsp</title>
</head>
<body>
<h1>jsp4/list.jsp</h1>
<h1>회원 목록</h1>
<%
//로그인 표시 → 세션에서 "id"값을 가져와서 → String id 저장
String id = (String)session.getAttribute("id");

//로그인 표시값이 있으면 login.jsp이동, 있으면 로그인표시값이 "admin"이 아니면 main.jsp이동
if(id==null){
response.sendRedirect("02_login.jsp");
}else{
	if(!id.equals("admin")){
		response.sendRedirect("03_main.jsp");
	}
}

request.setCharacterEncoding("utf-8");

Class.forName("com.mysql.cj.jdbc.Driver");

String dbUrl ="jdbc:mysql://localhost:3306/jspdb?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPw = "1234";
Connection con = DriverManager.getConnection(dbUrl, dbUser, dbPw);

String sql = "select * from members";
PreparedStatement ps = con.prepareStatement(sql);

ResultSet rs = ps.executeQuery();
%>
<table border="1">
<tr><td>아이디</td><td>비밀번호</td><td>이름</td><td>가입날짜</td></tr>
<%
while(rs.next()){%>

<tr><td><%=rs.getString(1) %></td><td><%=rs.getString(2) %></td><td><%=rs.getString(3) %></td><td><%=rs.getTimestamp(4) %></td></tr>
<%

}

%>

</table>
</body>
</html>

 

<!-- 231212 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp4/main.jsp</title>
</head>
<body>
<h1>jsp4/main.jsp</h1>
<%
String id = (String)session.getAttribute("id");
if(id == null){
response.sendRedirect("02_login.jsp");
}
%>
<%=id %> 님 환영합니다.


<a href="04_logout.jsp">로그아웃</a><br>
<a href="05_info.jsp">회원 정보 조회</a><br>
<a href="06_update.jsp">회원 정보 수정</a><br>
<a href="07_delete.jsp">회원 정보 삭제</a><br>

<%
//로그인 한 사용자가 null이 아닌 경우
if(id!=null){


//로그인한 관리자가 "admin" → 일치하면 회원 목록이 보이게
if(id.equals("admin")){%>

<a href="08_list.jsp">회원 목록(관리자)</a><br>

<%}
}
%>
</body>
</html>

 

그림1. 회원 목록

 

8. MVC

<!-- 231215 -->
<%@page import="member.MemberDAO"%>
<%@page import="javax.websocket.SendResult"%>
<%@page import="java.sql.Timestamp"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="com.mysql.cj.xdevapi.PreparableStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>member/insertPro.jsp</title>
</head>
<body>
<h1>member/insertPro.jsp</h1>
<h1>회원가입완료</h1>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String name = request.getParameter("name");
//Timestamp 자바내장객체 : 자바에 날짜 시간 관련 정보를 저장하는 내장객체
//시스템 현 날짜 가져오기 → System.currentTimeMillis()
Timestamp date = new Timestamp(System.currentTimeMillis());


//여러 개의 데이터를 하나의 바구니(MemberDTO)에 담기
//패키지(폴더) member, 자바파일 MemberDTO 생성
//멤버 변수 setter getter 메서드 정의

//MemberDTO 객체 생성 → 기억장소 할당
//멤버변수에 request에 가져온 값을 set 메서드 호출해서 저장

// 패키지(폴더) member, 자바파일 MemberDAO 생성
// insertMember() 메소드 정의

//MemberDAO 객체생성 → 기억장소를 할당/부여
//import="member.MemberDAO" 위치에서 가져오기
MemberDAO memberDAO = new MemberDAO();
System.out.println("MeberDAO형의 주소 : " + memberDAO);


//insertMember() 메소드 호출
//memberDAO.멤버변수
//memberDAO.메소드();
memberDAO.insertMember(id,pw,name,date);




response.sendRedirect("02_login.jsp");
//login.jsp 이동

%>

</body>
</html>

 

//231215
package member;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Timestamp;

public class MemberDAO {

//멤버 변수
//생성자 → 생략하면 자바가 알아서 자동으로 기본 생성자 만듦
//멤버 함수(메소드)

//insertMember() 메소드 정의, 내가 만든 자료형
public void insertMember(String id, String pw, String name, Timestamp date) {
System.out.println("MemberDAO insertMember()");//이정표
System.out.println("전달받은 아이디 : " + id);
System.out.println("전달받은 비밀번호 : " + pw);
System.out.println("전달받은 이름 : " + name);
System.out.println("전달받은 시간 : " + date);

//예외 처리
// System.out.println("프로그램 시작");
// int a = 1;
// int b = 0;
// //수동으로 에러를 찾아서 에러가 나지 않도록 함
//// if(b==0) {
// System.out.println("계산할 수 없음(에러 발생)");
// }else {
// System.out.println(a/b);
// }
// try {
// //에러가 발생할 가능성이 높은 코드(명령)
// System.out.println(a/b);
// } catch (Exception e) {
// //에러가 나면 처리
// System.out.println("계산할 수 없음(에러 발생)");
// //에러메세지 출력
// e.printStackTrace();
// } finally {
// //예외 발생 상관없이 마무리 작업
// System.out.println("예외 발생 상관 없이 마무리 작업");
// }
// System.out.println("프로그램 종료");

try {
//1단계 Driver.class 파일 불러오기
Class.forName("com.mysql.cj.jdbc.Driver");

//2단계 불러온 파일을 이용해 DB연결
String dbUrl ="jdbc:mysql://localhost:3306/jspdb?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPw = "1234";
Connection con = DriverManager.getConnection(dbUrl, dbUser, dbPw);

//3단계 연결 정보를 이용해서 SQL 구문을 만들고 실행할 수 있는 객체 생성
String sql = "insert into members(id,pw,name,date) value(?,?,?,?)";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, pw);
pstmt.setString(3, name);
pstmt.setTimestamp(4, date);

//4단계 SQL구문 실행
pstmt.executeUpdate();

} catch (Exception e) {
e.printStackTrace();
} finally {
//마무리
}

}//insertMember()
}//class MemberDAO

 

//231215
package member;

import java.sql.Timestamp;

public class MemberDTO {
//멤버변수 → 변수를 아무나 접근 못하게 막아줌 → 데이터 은닉
//데이터 은닉과 캡슐화
private String id;
private String pw;
private String name;
private Timestamp date;


//데이터를 접근하기 위한 변수 setter,getter 메서드 → public 메서드
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 getName() {
	return name;
}
public void setName(String name) {
this.name = name;
}
public Timestamp getDate() {
return date;
}
public void setDate(Timestamp date) {
this.date = date;

}//MemberDTO

 

728x90