게시판 기능 구현
1.insert(작성) 2.select(조회) 3.update(수정) 4.delete(삭제)
(이 네가지 기능을 CRUD 라고 함. 이 기본적인 기능을 제공하는 게시판을 만들고자 한다. )
게시판 페이지 구성
list.jsp 게시판리스트 article.jsp 각각의 게시물 하나를 보여주는 페이지 update.jsp 게시물 수정 created.jsp 게시물 작성 Style sheet 따로 만들어서 적용할 것 (이 파일안에 각각의 jsp파일에 적용되는 css를 생성), JavaScript 별도 파일로 적용하였다 |
CSS에서의 스타일을 적용할때 생성한 이름 : ‘.’ 과 ‘#’ 의 차이점
# 세부개념 . 큰개념 태그에서 설정한 id나 class 속성에 따라 스타일을 지정한다. id 에 줄 경우 아래처럼 #을 맨 앞에 붙여 사용하며, 원칙적으로 하나의 객체에만 적용한다 #아이디{ 속성1:속성값; 속성2:속성값; } class에 줄 경우 아래처럼 .을 맨 앞에 붙여 사용하며, 여러 객체에 적용한다. .클래스명{ 속성1:속성값; 속성2:속성값; } |
게시판 만들기
1. DB에 테이블생성
2. DTO 생성 (dto의 변수명 = 웹페이지에서의 변수명 = db에서의 컬럼명 일치하면 액션태그로 데이터입력시 잘 진행됨!)
3. DAO 생성
4. JSP페이지 생성
1. 게시판 테이블 만들기(BOARD TABLE)
게시판 리스트의 하나의 행을 어떻게 구성할 것인지 모델을 만들어 테이블을 생성한다.
[게시번호 /제목/ 작성자/ 작성일/ 조회수]
CREATE TABLE BOARD
(NUM NUMBER(9) PRIMARY KEY,
NAME VARCHAR2(20) NOT NULL,
PWD VARCHAR2(10) NOT NULL,
EMAIL VARCHAR2(50),
SUBJECT VARCHAR2(50) NOT NULL,
CONTENT VARCHAR2(4000) NOT NULL ,
IPADDR VARCHAR2(20),
HITCOUNT NUMBER(9)
CREATED DATE);
2. DTO CLASS 생성(BoardDTO)
package com.board; public class BoardDTO {
private int num; //게시글 고유번호 private String name; //작성자 private String pwd; //비밀번호 private String email; //이메일 private String subject; //제목 private String content; //내용 private String ipAddr; //IP주소 private String created; //작성일 private int hitCount; //조회수
GETTER, SETTER 작성 } |
2. DAO CLASS 생성(BoardDAO)
public class BoardDAO {
//의존성주입 private Connection conn; public BoardDAO(Connection conn){ this.conn = conn; }
//num의 max값 구하기 public int getMaxNum(){
int maxNum = 0; PreparedStatement pstmt =null; ResultSet rs = null; String sql;
try {
sql = "select nvl(max(num),0) from board " ; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); if(rs.next()){ maxNum = rs.getInt(1); } rs.close(); pstmt.close();
} catch (Exception e) { System.out.println(e.toString()); } return maxNum; }
//게시판 입력 public int insertData(BoardDTO dto){
int result =0; PreparedStatement pstmt = null; String sql; try { sql = "insert into board (num,name,pwd,email,subject,content,ipaddr,hitCount,created) "; sql += "values (?,?,?,?,?,?,?,0,sysdate) "; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, dto.getNum()); pstmt.setString(2, dto.getName()); pstmt.setString(3, dto.getPwd()); pstmt.setString(4, dto.getEmail()); pstmt.setString(5, dto.getSubject()); pstmt.setString(6, dto.getContent()); pstmt.setString(7, dto.getIpAddr());
result = pstmt.executeUpdate(); pstmt.close();
} catch (Exception e) { System.out.println(e.toString()); } return result; }
//전체데이터 출력(페이지마다 개수 제한) public List<BoardDTO> getLists(int start, int end, String searchKey, String searchValue){ //rownum을 매개변수로 할당해서 해당범위만 리스트로 출력
List<BoardDTO> lists = new ArrayList<BoardDTO>(); PreparedStatement pstmt = null; ResultSet rs = null; String sql; try { searchValue = "%" + searchValue + "%";
sql = "select * from ( "; sql += "select rownum rnum, data.* from ( "; sql += "select num,name,subject,hitCount, "; sql += "to_char(created,'YYYY-MM-DD') created "; sql += "from board where " +searchKey+ " like ? "; sql += "order by num desc) data) "; sql += "where rnum >= ? and rnum <=? ";
pstmt = conn.prepareStatement(sql); pstmt.setString(1, searchValue); pstmt.setInt(2, start); pstmt.setInt(3, end); rs = pstmt.executeQuery();
while(rs.next()){
BoardDTO dto = new BoardDTO(); dto.setNum(rs.getInt("num")); dto.setName(rs.getString("name")); dto.setSubject(rs.getString("subject")); dto.setHitCount(rs.getInt("hitCount")); dto.setCreated(rs.getString("created"));
lists.add(dto); } rs.close(); pstmt.close();
} catch (Exception e) { System.out.println(e.toString()); } return lists; }
//전체데이터의 갯수 카운팅 public int getDataCount(String searchKey, String searchValue){
int totalDataCount = 0; PreparedStatement pstmt =null; ResultSet rs = null; String sql;
try {
//검색어 포함하는 내용을 다출력하게 하기 위해 %붙임 searchValue = "%" + searchValue + "%"; sql = "select nvl(count(*),0) from board "; sql += "where " + searchKey + " like ? "; //searchKey는 셋중에하나 작성자,제목,내용 pstmt= conn.prepareStatement(sql); pstmt.setString(1, searchValue);
rs = pstmt.executeQuery(); if(rs.next()) totalDataCount = rs.getInt(1);
rs.close(); pstmt.close();
} catch (Exception e) { System.out.println(e.toString()); } return totalDataCount; }
//num으로 조회한 데이터 public BoardDTO getReadData(int num){ BoardDTO dto = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql;
try {
sql = "select num, name, pwd, email, subject, content, ipAddr, hitCount, created "; sql += "from board where num = ?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); rs = pstmt.executeQuery();
if(rs.next()){
dto = new BoardDTO(); dto.setNum(rs.getInt("num")); dto.setName(rs.getString("name")); dto.setPwd(rs.getString("pwd")); dto.setEmail(rs.getString("email")); dto.setSubject(rs.getString("subject")); dto.setContent(rs.getString("content")); dto.setIpAddr(rs.getString("ipAddr")); dto.setHitCount(rs.getInt("hitCount")); dto.setCreated(rs.getString("created")); } rs.close(); pstmt.close();
} catch (Exception e) { System.out.println(e.toString()); } return dto; }
//조회수 증가 public int updateHitCount(int num){
int result = 0; PreparedStatement pstmt = null; String sql;
try { sql = "update board set hitCount=hitCount+1 "; sql += "where num=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); result = pstmt.executeUpdate(); pstmt.close();
} catch (Exception e) { System.out.println(e.toString()); } return result; }
//게시판 수정 public int updateData(BoardDTO dto){
int result = 0; PreparedStatement pstmt = null; String sql;
try {
sql = "update board set name=?, pwd=?, email=?, subject=?,"; sql += "content=? where num=?";
pstmt = conn.prepareStatement(sql); pstmt.setString(1, dto.getName()); pstmt.setString(2, dto.getPwd()); pstmt.setString(3, dto.getEmail()); pstmt.setString(4, dto.getSubject()); pstmt.setString(5, dto.getContent()); pstmt.setInt(6, dto.getNum());
result = pstmt.executeUpdate();
pstmt.close();
} catch (Exception e) { System.out.println(e.toString()); } return result; }
//게시판 삭제 public int deleteData(int num){ int result = 0; PreparedStatement pstmt = null; String sql; try { sql= "delete board where num=? "; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); result = pstmt.executeUpdate(); pstmt.close();
} catch (Exception e) { System.out.println(e.toString()); } return result; } } |
'Dev > JSP & Servlet' 카테고리의 다른 글
Servlet - 서블릿 구조, EL, JSTL, DBCP (0) | 2019.02.25 |
---|---|
JSP 게시판(3) - JSP 페이지 (0) | 2019.02.25 |
JSP 게시판 (1) - 페이징, 리스트페이지 (0) | 2019.02.21 |
JSP - 성적처리 페이지 만들기 (0) | 2019.02.19 |
이클립스 플러그인 설치(퀀텀DB) (0) | 2019.02.19 |