** KH정보교육원에서 실제로 수강한 내용을 개인적으로 정리한 것입니다. **
서블릿을 사용하지 않고 데이터베이스와 jsp 파일만을 이용하여 만들어 보았다. 이 단계에서는 데이터베이스를 만들고 dao 와 vo 파일 그리고 view 파일을 만들어 화면을 구현하는 방법을 알아본다.
1-1. 제일 첫 번째 작업 : 데이터베이스 만들기
CREATE SEQUENCE MYSEQ;
CREATE TABLE MYBOARD(
MYNO NUMBER PRIMARY KEY,
MYNAME VARCHAR2(100) NOT NULL,
MYTITLE VARCHAR2(2000) NOT NULL,
MYCONTENT VARCHAR2(4000) NOT NULL,
MYDATE DATE NOT NULL
);
INSERT INTO MYBOARD VALUES (MYSEQ.NEXTVAL, '관리자', '게시판 테스트', '테스트 중입니다', SYSDATE);
1-2. 데이터의 값을 담기 위한 VO 파일 만들기
import java.util.Date;
public class MyBoard {
private int myno;
private String myname;
private String mytitle;
private String mycontent;
private Date mydate;
public MyBoard() {
}
// myupdate_res 에서 사용하기 위한 생성자
public MyBoard(int myno, String mytitle, String mycontent) {
super();
this.myno = myno;
this.mytitle = mytitle;
this.mycontent = mycontent;
}
// myinsert_res 에서 사용하기 위한 생성자
public MyBoard(String myname, String mytitle, String mycontent) {
this.myname = myname;
this.mytitle = mytitle;
this.mycontent = mycontent;
}
// select(전체)
public MyBoard(int myno, String myname, String mytitle, String mycontent, Date mydate) {
this.myno = myno;
this.myname = myname;
this.mytitle = mytitle;
this.mycontent = mycontent;
this.mydate = mydate;
}
public int getMyno() {
return myno;
}
public void setMyno(int myno) {
this.myno = myno;
}
public String getMyname() {
return myname;
}
public void setMyname(String myname) {
this.myname = myname;
}
public String getMytitle() {
return mytitle;
}
public void setMytitle(String mytitle) {
this.mytitle = mytitle;
}
public String getMycontent() {
return mycontent;
}
public void setMycontent(String mycontent) {
this.mycontent = mycontent;
}
public Date getMydate() {
return mydate;
}
public void setMydate(Date mydate) {
this.mydate = mydate;
}
}
1-3. 데이터에 접근하기 위한 DAO 파일 만들기
mport java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.vo.MyBoard;
public class MyBoardDao { // 데이터에 접근
Connection con = null;
// 객체가 생성될때 바로 DB와 연결
public MyBoardDao() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("01.Driver 연결");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("01.Driver 연결 실패");
}
}
// List<MyBoard> : 리턴 타입 즉, 이 구문에서는 list를 리턴
public List<MyBoard> selectAll() {
try {
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "KH", "KH");
System.out.println("2. 계정 연결");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("2. 계정 연결 실패");
}
Statement stmt = null;
ResultSet rs = null;
String sql = "SELECT * FROM MYBOARD";
List<MyBoard> res = new ArrayList<>();
try {
stmt = con.createStatement();
System.out.println("3. statement 생성 및 쿼리 준비 : " + sql);
// stmt.executeQuery(sql)을 통해 쿼리문을 실행해서 결과값을 rs에 담아주자
rs = stmt.executeQuery(sql);
System.out.println("4. query 실행 및 리턴");
while (rs.next()) {
// DB에서 긁어온 정보를 객체 생성과 동시에 MyBoard 클래스에 값을 넣어준다
MyBoard mb = new MyBoard(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4),
rs.getDate(5));
// 리스트객체에 넣어줌
res.add(mb);
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("3 또는 4 단계 실패");
} finally {
try {
rs.close();
stmt.close();
con.close();
System.out.println("5. db종료");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("5. db종료 실패");
}
}
return res;
}
public MyBoard selectOne(int myno) {
try {
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "KH", "KH");
System.out.println("2. 계정 연결");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("2. 계정 연결 실패");
}
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT * FROM MYBOARD WHERE MYNO=?";
MyBoard res = null;
try {
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, myno);
System.out.println("3. query 준비 : " + sql);
rs = pstmt.executeQuery();
System.out.println("4. query 실행 및 리턴");
while (rs.next()) {
res = new MyBoard();
res.setMyno(rs.getInt(1));
res.setMyname(rs.getString(2));
res.setMytitle(rs.getString(3));
res.setMycontent(rs.getString(4));
res.setMydate(rs.getDate(5));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rs.close();
pstmt.close();
con.close();
System.out.println("5. db종료");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("6. db 종료 실패");
}
}
return res;
}
public int insert(MyBoard vo) {
try {
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "KH", "KH");
System.out.println("2. 계정 연결");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("2. 계정 연결 실패");
}
PreparedStatement pstmt = null;
int res = 0;
String sql = "INSERT INTO MYBOARD VALUES (MYSEQ.NEXTVAL,?,?,?,SYSDATE)";
try {
pstmt = con.prepareStatement(sql);
pstmt.setString(1, vo.getMyname());
pstmt.setString(2, vo.getMytitle());
pstmt.setString(3, vo.getMycontent());
res = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return res;
}
public int update(MyBoard vo) {
try {
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "KH", "KH");
System.out.println("2. 계정 연결");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("2. 계정 연결 실패");
}
PreparedStatement pstmt = null;
int res = 0;
String sql = "UPDATE MYBOARD SET MYTITLE = ? , MYCONTENT = ? WHERE MYNO = ?";
try {
pstmt = con.prepareStatement(sql);
// 위의 물음표 채워주기
pstmt.setString(1, vo.getMytitle());
pstmt.setString(2, vo.getMycontent());
pstmt.setInt(3, vo.getMyno());
res = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return res;
}
public int delete(int myno) {
try {
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "KH", "KH");
System.out.println("2. 계정 연결");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("2. 계정 연결 실패");
}
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "DELETE FROM MYBOARD WHERE MYNO = ?";
int res = 0;
try {
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, myno);
res = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return res;
}
}
2. 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>
<jsp:forward page="mylist.jsp"></jsp:forward>
</body>
</html>
💡 <jsp:forward> : 이 액션 태그는 해당 페이지가 시작될 때 바로 다른 페이지로 넘어가도록 제어할 때 사용하는 태그이다.
3. mylist.jsp ( = 실행 시 메인페이지 )
해당 jsp 파일은 실제 게시판의 목록이 보이는 즉, view(컨트롤러)의 기능을 하는 파일이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.dao.MyBoardDao"%>
<%@ page import="com.vo.MyBoard"%>
<%@ page import="java.util.List"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<%
response.setContentType("text/html; charset=UTF-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>view(컨트롤러)역할을 하는 페이지 = 게시판 나오게 하는 페이지</title>
</head>
<body>
<%
MyBoardDao dao = new MyBoardDao();
List<MyBoard> list = dao.selectAll();
%>
<h1>List Page</h1>
<table border="1">
<col width="50px">
<col width="100px">
<col width="200px">
<col width="100px">
<tr>
<th>번호</th>
<th>이름</th>
<th>제목</th>
<th>날짜</th>
</tr>
<%
for (int i = 0; i < list.size(); i++) {
%>
<tr>
<td><%=list.get(i).getMyno()%></td>
<td><%=list.get(i).getMyname()%></td>
<td><a href="selectone.jsp?myno=<%=list.get(i).getMyno()%>"><%=list.get(i).getMytitle()%></a></td>
<td><%=list.get(i).getMydate()%></td>
</tr>
<%
}
%>
<tr>
<td colspan="4" align="right">
<button onclick="location.href='myinsert.jsp'">글쓰기</button>
</td>
</tr>
</table>
</body>
</html>
'JSP' 카테고리의 다른 글
[ KH 정보교육원 ] 자바 프레임워크 개발자 양성과정 - 서블릿(Servlet)이란? + web.xml 내 설정방법 (2) | 2019.12.01 |
---|---|
[ KH 정보교육원 ] 자바 프레임워크 개발자 양성과정 - 게시판 만들기(3) (0) | 2019.11.27 |
[ KH 정보교육원 ] 자바 프레임워크 개발자 양성과정 - 게시판 만들기(2) (0) | 2019.11.27 |