회원가입 페이지 생성을 위해
지난번에 했던 회원가입 페이지 코드를 가져와 DB에 연결한다.
회원가입 페이지를 설정할 insert.html 코드
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
body { /* 컨트롤 + / - 자동주석, 태그선택! */
background: lightgray;
}
button {
background: white;
}
.t1 { /* .은 클래스 선택!, 여러개선택! */
background: lightyellow;
width: 150px;
text-align: center;
}
#b1 { /* #은 아이디 선택!, 특정한 것 한 개만 선택! */
color: red;
}
#b2{
color: blue;
}
</style>
</head>
<body>
<h3>회원가입 페이지</h3>
<hr>
<a href="member.html">
<button id="b1">첫페이지로</button>
</a>
<!--form의 action은 무조건 jsp파일이되어야만 함. -->
<form action="insert.jsp">
<table border="1">
<tr>
<td class="t1">아이디 :</td>
<td><input name="id"></td>
</tr>
<tr>
<td class="t1">비밀번호 :</td>
<td><input name="pw"></td>
</tr>
<tr>
<td class="t1">회원이름 :</td>
<td><input name="name"></td>
</tr>
<tr>
<td class="t1">회원전화 :</td>
<td><input name="tel"></td>
</tr>
<tr>
<td colspan="2" class="t1">
<button id="b2">회원가입 데이터 전송</button>
</td>
</tr>
</table>
</form>
<!-- http://localhost:8898/web00/insert.jsp?id=dddd&pw=ddd&name=ddd&tel=ddddd -->
</body>
</html>
DB와 연결을 위한 insert.jsp 파일 코드
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!--
--- 여기에서 해야하는 작업 순서
1. form 안에서 입력해서 서버로 전달할 값을 받아와서 ram(변수)에 저장
2. 받은 데이터를 가지고 sql문 만들어서 db 서버로 전송
3. 브라우저에게 결과가 어떻게 되었는 지 알려줘야 함(only html)
-->
<%
// 자바코드를 넣을 수 있음
// 필요한 코드블록만 넣을 수 있음
/* 지금 이걸 작성하는 <, % 이 기호 스크립트릿(scriptlet)
: 자바 코드를 일부만 작성하는 작은 프로그램 */
// 1. 값을 받아서 Ram의 변수에 집어넣는다.
// HttpServletRequest request = new HttpServletRequet();
// id = apple & pw = 1234 & name = apple & tel = 011
// Cmd + Option + 화살표 아래 = 한 줄 복사
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String name = request.getParameter("name");
String tel = request.getParameter("tel");
// 내장된 객체 : request, response, session, application, model
// db 연결해서 sql만든 후 전송
// 1. 드라이버 설정
Class.forName("com.mysql.cj.jdbc.Driver");
// out객체 : 내장된 객체, PrintWriter
out.print("1. 드라이버 설정 성공");
String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
String user = "root";
String password = "1234";
// 2. DB 연결 - url(ip + port + db명), id, pw
// jsp에서 import 단축키 : Cmd + Shift + M
Connection con = DriverManager.getConnection(url, user, password); //Connection
out.print("<br>2. DB 연결 성공");
// 3. sql문 생성
String sql = "insert into member values (?, ?, ?, ?)";
// 위의 String은 자바에서는 sql문으로 인식을 못함
// -> sql문에 해당하는 부품으로 만들어줘야 함
// PreparedStatement --- sql
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, id);
ps.setString(2, pw);
ps.setString(3, name);
ps.setString(4, tel);
out.print("<br>3. sql문 생성 성공");
// 4. sql문 전송
ps.executeUpdate();
out.print("<br>4. sql문 전송 성공<br>");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="lightgrey">
<br> 요청에 대한 응답이 들어가는 부분 <br>
<br> 서버로 전달된 id :
<%= id %>
<br> 서버로 전달된 pw :
<%= pw %>
<br> 서버로 전달된 name :
<%= name %>
<br> 서버로 전달된 tel :
<%= tel %>
<br>
</body>
</html>
브라우저와 DBeaver에서 출력 확인
다음으로 DAO와 VO(DTO) 파일을 만들어준다.
Java Resource → src에
com.multi.mvc006 이름의 패키지를 생성하고
그 안에 MemberDAO.java, Member.VO.java 두 파일을 생성해준다.
VO 파일에는 getters&setters를 이용해
아래와 같이 작성해준다.
package com.multi.mvc006;
public class MemberVO_DTO {
// 가방 역할 -> 데이터 저장 목적 -> RAM에 공간을 만들어줘야 함
private String id;
private String pw;
private String name;
private String tel;
// 가방에 데이터를 넣었다 뺐다 하는 역할이므로 get, set
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 String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return "MemberVO_DTO [id=" + id + ", pw=" + pw + ", name=" + name + ", tel=" + tel + "]";
}
}
DAO에는 앞서 나온 insert.jsp에서 복사해와서
Java 파일에 맞게 수정해줬다.
package com.multi.mvc006;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class MemberDAO {
// 멤버 변수, 멤버 메서드로 DAO 만들어주면 됨
// DML(CRUD)
// public void add(int x, int y)
public void create(MemberVO_DTO bag) {
//db 연결해서 sql만든 후 전송
// 1. 드라이버 설정
Class.forName("com.mysql.cj.jdbc.Driver");
// out객체 : 내장된 객체, PrintWriter
System.out.println("1. 드라이버 설정 성공");
String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
String user = "root";
String password = "1234";
// 2. DB 연결 - url(ip + port + db명), id, pw
// java에서 한번에 import 단축키 : Cmd + Shift + O
Connection con = DriverManager.getConnection(url, user, password); //Connection
System.out.println("<br>2. DB 연결 성공");
// 3. sql문 생성
String sql = "insert into member values (?, ?, ?, ?)";
// 위의 String은 자바에서는 sql문으로 인식을 못함
// -> sql문에 해당하는 부품으로 만들어줘야 함
// PreparedStatement --- sql
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, bag.getId());
ps.setString(2, bag.getPw());
ps.setString(3, bag.getName());
ps.setString(4, bag.getTel());
System.out.println("<br>3. sql문 생성 성공");
// 4. sql문 전송
ps.executeUpdate();
System.out.println("<br>4. sql문 전송 성공<br>");
ps.close();
con.close();
}
@Override
public String toString() {
return "MemberDAO [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
+ "]";
}
// row 1개 검색
public void one() {
}
// rows 여러개 검색
public void list() {
}
//
public void update() {
}
public void delete() {
}
}
근데 한번에 오류가 쫙 떴다.
Exception(예외 처리)
오류가 날 경우 페이지 자체가 날라가는 것이 아닌
오류난 부분만 오류가 뜨도록 하는 것이 exception인데,
반드시 exception 처리를 해줘야하는 세 가지 경우가 있다.
1. 외부자원(cpu) 연결 - 멀티스레드 핸들링하는 경우
2. 외부파일에서 읽고 쓰기하는 경우 → FileWriter, FileReader
3. 네트워크 연결 → 크롤링, DB 연결, TCP 연결
지금 에러가 나는 건 DB연결에서 오류가 난 것이다.
이에 따라 exception 처리를 해준다.
Exception 처리 방법
1. throws, throw
2. try-catch
여기서는 두 번째 방법으로 해결을 한다.
아래 사진과 같은 범위로 드래그를 해서 우클릭
surround with → Trycatch Block
하면 하단에 Try/catch 구문이 생기며 모든 오류가 해결된다.
여기까지 한 후 서버를 실행시켜본다.
DB까지 데이터가 들어온 것을 확인할 수 있다.
현재 여기까지 진행한 것이다.
insert.jsp에서 37라인에 오류가 났는데,
실행은 정상적으로 됐다.
dao.create(bag); 가 DAO 파일의 13라인
public void create(MemberVO_DTO bag) {
부분과 연결이 돼야하는데, 연결은 정상적으로 돼있다.
이건 단순히 Eclipse가 인식을 못해서 그런거라
양쪽 다 저장해주고 Project → Clean 해주면 오류가 사라진다.
방금 한 내용을 그대로 게시판을 만드는 실습이다.
- insert2.html
- insert2.jsp
- BbsDAO, BbsVO
파일로 게시판 글쓰기 기능을 완성하시오.
insert2.html 코드
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
//alert('게시판글쓰기 페이지입니다. 반갑습니다.!')
</script>
<style type="text/css">
body { /* 컨트롤 + / - 자동주석, 태그선택! */
background: #DEFBFF;
}
button {
background: white;
}
.t1 { /* .은 클래스 선택!, 여러개선택! */
background: #FFE2E8;
width: 150px;
text-align: center;
}
#b1 { /* #은 아이디 선택!, 특정한 것 한 개만 선택! */
color: red;
}
#b2{
color: blue;
}
</style>
</head>
<body>
<!-- no, title, content, writer 게시판글쓰기 -->
<h3>게시판 글쓰기 페이지</h3>
<hr>
<a href="bbs.html">
<button id="b1">첫페이지로</button>
</a>
<form action="insert2.jsp">
<table border="1">
<tr>
<td class="t1">No :</td>
<td><input name="no"></td>
</tr>
<tr>
<td class="t1">제목 :</td>
<td><input name="title"></td>
</tr>
<tr>
<td class="t1">내용 :</td>
<td><input name="content"></td>
</tr>
<tr>
<td class="t1">작성자 :</td>
<td><input name="writer"></td>
</tr>
<tr>
<td colspan="2" class="t1">
<button id="b2">게시판 글쓰기 데이터 전송</button>
</td>
</tr>
</table>
</form>
</body>
</html>
insert2.jsp 코드
<%@page import="com.multi.mvc006.BbsDAO"%>
<%@page import="com.multi.mvc006.BbsVO"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- BbsVO bag = new BbsVO(); -->
<jsp:useBean id = "bag" class = "com.multi.mvc006.BbsVO"></jsp:useBean>
<!-- reqiuest.getParameter("no"); bag.setId(no); -->
<jsp:setProperty property = "*" name = "bag"/>
<%
/* String title = request.getParameter("title");
String contet = request.getParameter("content");
String writer = request.getParameter("writer");
// 1. 가방을 만들어서 (객체(부품) 생성)
BbsVO_DTO bag = new BbsVO_DTO();
// 벽돌틀 별돌1 = new 벽돌틀();
// 2. 받은 데이터를 가방에 넣고
bag.setTitle(title);
bag.setContent(content);
bag.setWriter(writer); */
// 3. DAO를 생성해
// 클릭하고 Cmd + Shift + M
BbsDAO dao = new BbsDAO();
// 4. Create해달라고 요청과 함께 가방 전달
// cal.add(100, 200);
dao.create(bag);
%>
BbsVO.java 코드
package com.multi.mvc006;
public class BbsVO {
// 가방 역할 -> 데이터 저장 목적 -> RAM에 공간을 만들어줘야 함
private String no;
private String title;
private String content;
private String writer;
// 가방에 데이터를 넣었다 뺐다 하는 역할이므로 get, set
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
@Override
public String toString() {
return "BbsVO [no=" + no + ", title=" + title + ", content=" + content + ", writer=" + writer + "]";
}
}
BbsDAO.java 코드
package com.multi.mvc006;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class BbsDAO {
// 멤버 변수, 멤버 메서드로 DAO 만들어주면 됨
// DML(CRUD)
// public void add(int x, int y)
public void create(BbsVO bag) {
try {
//db 연결해서 sql만든 후 전송
// 1. 드라이버 설정
Class.forName("com.mysql.cj.jdbc.Driver");
// out객체 : 내장된 객체, PrintWriter
System.out.println("1. 드라이버 설정 성공");
String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
String user = "root";
String password = "1234";
// 2. DB 연결 - url(ip + port + db명), id, pw
// java에서 한번에 import 단축키 : Cmd + Shift + O
Connection con = DriverManager.getConnection(url, user, password); //Connection
System.out.println("<br>2. DB 연결 성공");
// 3. sql문 생성
String sql = "insert into bbs values (?, ?, ?, ?)";
// 위의 String은 자바에서는 sql문으로 인식을 못함
// -> sql문에 해당하는 부품으로 만들어줘야 함
// PreparedStatement --- sql
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, bag.getNo());
ps.setString(2, bag.getTitle());
ps.setString(3, bag.getContent());
ps.setString(4, bag.getWriter());
System.out.println("<br>3. sql문 생성 성공");
// 4. sql문 전송
ps.executeUpdate();
System.out.println("<br>4. sql문 전송 성공<br>");
ps.close();
con.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public String toString() {
return "MemberDAO [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
+ "]";
}
// row 1개 검색
public void one() {
}
// rows 여러개 검색
public void list() {
}
//
public void update() {
}
public void delete() {
}
}
출력 결과
같은 실습, Delete, One도 실행
delete.html 코드
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
body { /* 컨트롤 + / - 자동주석, 태그선택! */
background: #DEFBFF;
}
button {
background: #FFE2E8;
}
.t1 { /* .은 클래스 선택!, 여러개선택! */
background: lightyellow;
width: 150px;
text-align: center;
}
</style>
</head>
<body>
<form action="delete.jsp" method="get">
<!-- http://localhost:8898/web00/delete2.jsp?no=100 -->
<!-- http의 header(요청주소+Get방식으로 넘어가는 데이터) -->
<table border="1">
<tr>
<td class="t1">탈퇴할 아이디 :</td>
<td><input name="id"></td>
</tr>
<tr>
<td colspan="2" class="t1">
<button id="b2">탈퇴할 id 데이터 전송</button>
</td>
</tr>
</table>
</form>
</body>
</html>
delete.jsp 코드
<%@page import="com.multi.mvc006.MemberDAO"%>
<%@page import="com.multi.mvc006.MemberVO"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id = "bag" class = "com.multi.mvc006.MemberVO"></jsp:useBean>
<jsp:setProperty property = "id" name = "bag"/>
<%
MemberDAO dao = new MemberDAO();
int result = dao.delete(bag);
if(result == 1) {
out.print("<h3>회원탈퇴 성공</h3>");
} else {
out.print("<h3>회원탈퇴 실패</he>");
}
%>
BbsDAO.java 코드
package com.multi.mvc006;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class BbsDAO {
// 멤버 변수, 멤버 메서드로 DAO 만들어주면 됨
// DML(CRUD)
// public void add(int x, int y)
public void create(BbsVO bag) {
try {
//db 연결해서 sql만든 후 전송
// 1. 드라이버 설정
Class.forName("com.mysql.cj.jdbc.Driver");
// out객체 : 내장된 객체, PrintWriter
System.out.println("1. 드라이버 설정 성공");
String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
String user = "root";
String password = "1234";
// 2. DB 연결 - url(ip + port + db명), id, pw
// java에서 한번에 import 단축키 : Cmd + Shift + O
Connection con = DriverManager.getConnection(url, user, password); //Connection
System.out.println("<br>2. DB 연결 성공");
// 3. sql문 생성
String sql = "insert into bbs values (?, ?, ?, ?)";
// 위의 String은 자바에서는 sql문으로 인식을 못함
// -> sql문에 해당하는 부품으로 만들어줘야 함
// PreparedStatement --- sql
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, bag.getNo());
ps.setString(2, bag.getTitle());
ps.setString(3, bag.getContent());
ps.setString(4, bag.getWriter());
System.out.println("<br>3. sql문 생성 성공");
// 4. sql문 전송
ps.executeUpdate();
System.out.println("<br>4. sql문 전송 성공<br>");
ps.close();
con.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public String toString() {
return "MemberDAO [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
+ "]";
}
// row 1개 검색
public void one() {
}
// rows 여러개 검색
public void list() {
}
//
public void update() {
}
public void delete() {
}
}
BbsVO.java 코드
package com.multi.mvc006;
public class BbsVO {
// 가방 역할 -> 데이터 저장 목적 -> RAM에 공간을 만들어줘야 함
private String no;
private String title;
private String content;
private String writer;
// 가방에 데이터를 넣었다 뺐다 하는 역할이므로 get, set
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
@Override
public String toString() {
return "BbsVO [no=" + no + ", title=" + title + ", content=" + content + ", writer=" + writer + "]";
}
}
출력 결과
다음으로 One에 대한 코드다.
one.html 코드
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
body { /* 컨트롤 + / - 자동주석, 태그선택! */
background: #DEFBFF;
}
button {
background: #BDFFC5;
}
.t1 { /* .은 클래스 선택!, 여러개선택! */
background: lightyellow;
width: 150px;
text-align: center;
}
</style>
</head>
<body>
<h3>개인정보 검색(상세) 페이지</h3>
<hr>
<a href="bbs.html">
<button id="b1">첫페이지로</button>
</a>
<hr>
<!--a태그는 무조건 get방식 요청 -->
<a href="http://localhost:8898/web00/one.jsp?id=apple2">
<button style="background: pink">apple2</button>
</a>
<a href="http://localhost:8898/web00/one.jsp?id=apple3">
<button style="background: pink">apple3</button>
</a>
<a href="http://localhost:8898/web00/one.jsp?id=spring">
<button style="background: pink">spring</button>
</a>
<hr>
<form action="one.jsp" method="get">
<table border="1">
<tr>
<td class="t1">검색할 아이디 :</td>
<td><input name="id"></td>
</tr>
<tr>
<td colspan="2" class="t1">
<button id="b2">검색할 id 데이터 전송</button>
</td>
</tr>
</table>
</form>
</body>
</html>
one.jsp 코드
<%@page import="com.multi.mvc006.MemberDAO"%>
<%@page import="com.multi.mvc006.MemberVO"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="bag" class="com.multi.mvc006.MemberVO"></jsp:useBean>
<jsp:setProperty property="id" name="bag" />
<%
MemberDAO dao = new MemberDAO();
MemberVO bag2 = dao.one(bag); // bag
%>
검색한 id는 <%= bag2.getId() %> <br>
검색한 pw는 <%= bag2.getPw() %> <br>
검색한 name은 <%= bag2.getName() %> <br>
검색한 tel은 <%= bag2.getTel() %> <br>
MemberDAO.java
package com.multi.mvc006;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MemberDAO {
// 멤버 변수, 멤버 메서드로 DAO 만들어주면 됨
// DML(CRUD)
// public void add(int x, int y)
public void create(MemberVO bag) {
try {
//db 연결해서 sql만든 후 전송
// 1. 드라이버 설정
Class.forName("com.mysql.cj.jdbc.Driver");
// out객체 : 내장된 객체, PrintWriter
System.out.println("1. 드라이버 설정 성공");
String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
String user = "root";
String password = "1234";
// 2. DB 연결 - url(ip + port + db명), id, pw
// java에서 한번에 import 단축키 : Cmd + Shift + O
Connection con = DriverManager.getConnection(url, user, password); //Connection
System.out.println("<br>2. DB 연결 성공");
// 3. sql문 생성
String sql = "insert into member values (?, ?, ?, ?)";
// 위의 String은 자바에서는 sql문으로 인식을 못함
// -> sql문에 해당하는 부품으로 만들어줘야 함
// PreparedStatement --- sql
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, bag.getId());
ps.setString(2, bag.getPw());
ps.setString(3, bag.getName());
ps.setString(4, bag.getTel());
System.out.println("<br>3. sql문 생성 성공");
// 4. sql문 전송
ps.executeUpdate();
System.out.println("<br>4. sql문 전송 성공<br>");
ps.close();
con.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// row 1개 검색
public MemberVO one(MemberVO bag) {
ResultSet table = null;
MemberVO bag2 = null;
try {
//db 연결해서 sql만든 후 전송
// 1. 드라이버 설정
Class.forName("com.mysql.cj.jdbc.Driver");
// out객체 : 내장된 객체, PrintWriter
System.out.println("1. 드라이버 설정 성공");
String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
String user = "root";
String password = "1234";
// 2. DB 연결 - url(ip + port + db명), id, pw
// java에서 한번에 import 단축키 : Cmd + Shift + O
Connection con = DriverManager.getConnection(url, user, password); //Connection
System.out.println("<br>2. DB 연결 성공");
// 3. sql문 생성
String sql = "select * from member where id = ?";
// 위의 String은 자바에서는 sql문으로 인식을 못함
// -> sql문에 해당하는 부품으로 만들어줘야 함
// PreparedStatement --- sql
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, bag.getId());
System.out.println("<br>3. sql문 생성 성공");
// 4. sql문 전송
table = ps.executeQuery(); // 1, 0
System.out.println("<br>4. sql문 전송 성공<br>");
// 테이블에서 꺼내서 가방을 만들어 넣는다
if(table.next()) {
bag2 = new MemberVO();
bag2.setId(table.getString("id"));
bag2.setPw(table.getString("pw"));
bag2.setName(table.getString("name"));
bag2.setTel(table.getString("tel"));
}
ps.close();
con.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bag2;
}
// rows 여러개 검색
public void list() {
}
//
public void update() {
}
public int delete(MemberVO bag) {
int result = 0;
try {
//db 연결해서 sql만든 후 전송
// 1. 드라이버 설정
Class.forName("com.mysql.cj.jdbc.Driver");
// out객체 : 내장된 객체, PrintWriter
System.out.println("1. 드라이버 설정 성공");
String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
String user = "root";
String password = "1234";
// 2. DB 연결 - url(ip + port + db명), id, pw
// java에서 한번에 import 단축키 : Cmd + Shift + O
Connection con = DriverManager.getConnection(url, user, password); //Connection
System.out.println("<br>2. DB 연결 성공");
// 3. sql문 생성
String sql = "delete from member where id = ?";
// 위의 String은 자바에서는 sql문으로 인식을 못함
// -> sql문에 해당하는 부품으로 만들어줘야 함
// PreparedStatement --- sql
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, bag.getId());
System.out.println("<br>3. sql문 생성 성공");
// 4. sql문 전송
result = ps.executeUpdate(); // 1, 0
System.out.println("<br>4. sql문 전송 성공<br>");
ps.close();
con.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
One 출력 결과
car.html 코드
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
body {
background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.4)),url("img/ferrari_image.jpg");
background-size: cover;
background-position: center center;
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.form {
background-color: rgba(255, 255, 255, 0.7);
padding: 20px;
border-radius: 10px;
text-align: center;
}
.form input[type="text"] {
width: 100%;
padding: 10px;
margin-bottom: 10px;
border: 1px solid rgba(0, 0, 0, 0.2); /* 변경: 검정색 옅은 테두리 추가 */
border-radius: 5px;
box-sizing: border-box;
}
.form button[type="submit"] {
background-color: #BFFFFB;
color: #000;
border: none;
border-radius: 5px;
padding: 10px 20px;
font-weight: bold;
cursor: pointer;
}
</style>
</head>
<body>
<div class="container">
<div class="form">
<h2>차량 정보 입력</h2>
<form action = "car.jsp" method = "get">
<input type="text" placeholder="VIN (Vehicle Identification Number)" required name = "vin">
<input type="text" placeholder="Model" required name = "model">
<input type="text" placeholder="Brand" required name = "brand">
<input type="text" placeholder="Year" required name = "year">
<button type="submit">제출</button>
</form>
</div>
</div>
</body>
</html>
car.jsp 코드
<%@page import="com.multi.mvc006.CarDAO"%>
<%@page import="com.multi.mvc006.CarVO"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String vin = request.getParameter("vin");
String model = request.getParameter("model");
String brand = request.getParameter("brand");
String year = request.getParameter("year");
// 1. 가방 생성
CarVO bag = new CarVO();
// 2. 받은 데이터 가방에 넣기
bag.setVin(vin);
bag.setModel(model);
bag.setBrand(brand);
bag.setYear(year);
// 3. DAO 생성
CarDAO dao = new CarDAO();
// 4. Create 해달라고 요청과 함께 가방 전달
dao.create(bag);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor = "lightgray">
<br> 요청에 대한 응답이 들어가는 부분 <br>
<br> 서버로 전달된 VIN :
<%= vin %>
<br> 서버로 전달된 Model :
<%= model %>
<br> 서버로 전달된 Brand :
<%= brand %>
<br> 서버로 전달된 Year :
<%= year %>
<br>
</body>
</html>
CarCO.java 코드
package com.multi.mvc006;
public class CarVO {
private String vin;
private String model;
private String brand;
private String year;
public String getVin() {
return vin;
}
public void setVin(String vin) {
this.vin = vin;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
@Override
public String toString() {
return "CarVO [vin=" + vin + ", model=" + model + ", brand=" + brand + ", year=" + year + "]";
}
}
CarDAO.java 코드
package com.multi.mvc006;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.tomcat.dbcp.dbcp2.PoolablePreparedStatement;
public class CarDAO {
public void create(CarVO bag) {
try {
// 1. 드라이버 설정
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("1. 드라이버 설정 성공");
String url = "jdbc:mysql://localhost:3306/shop?serverTimezone=UTC";
String user = "root";
String password = "1234";
// 2. DB연결 - url(ip + port + db명), id, pw
Connection con = DriverManager.getConnection(url, user, password); // Connection
System.out.println("2. db연결 성공");
// 3. sql문 생성
String sql = "insert into car values (?, ?, ?, ?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, bag.getVin());
ps.setString(2, bag.getModel());
ps.setString(3, bag.getBrand());
ps.setString(4, bag.getYear());
System.out.println("<br>3. SQL문 생성 성공");
// 4. sql문 전송
ps.executeUpdate();
System.out.println("<br>4. SQL문 전송 성공<br>");
ps.close();
con.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
이렇게 화면을 분할해서 순차적으로 하면
더 효율적이라고 한다.
출력 결과
취향 가득 담은 이번 실습 끝
꺅🤩
'Back > Spring' 카테고리의 다른 글
Day42_Spring 정리 (0) | 2023.06.30 |
---|---|
Day41_[Mac OS]Spring/STS 설치 및 세팅 (0) | 2023.06.30 |
Day31_AJAX로 JSON 파일을 받아서 출력 후 DB에 저장 (0) | 2023.06.20 |
Day24_CRUD jsp 완성 과제 (1) | 2023.06.15 |
Day20_#9 IntelliJ 스프링부트 롬복과 리팩터링 (0) | 2023.06.08 |