본문 바로가기

Spring/Model1 _2(MVC)

0902 JSP - 게시판 글 작성하기

728x90
반응형

 

데이터를 전송할 객체 만들기
BoardDTO.java

 

package com.itwillbs.board;

import java.sql.Date;

public class boardDTO {

	// DTO (Data Transfer Object) 데이터 DB 전송 객체 
	private int bno;					// 게시판 글번호 (PK)
	private String name;				// 글쓴이
	private String pass;				// 글 비밀번호
	private String subject;				// 글 제목
	private String content;				// 글 내용
	
	private int readcount;				// 조회수
	private int re_ref;					// 답글 - 글 그룹번호
	private int re_lev;					// 답글 - 글 들여쓰기
	private int re_seq;					// 답글 - 글 순서
	
	private Date date;					// 글 작성일
	private String ip;					// 글 작성자 ip 주소
	private String file;				// 첨부파일 
	
}

 

alt + shift + s + r 로 getter setter 만들어준다. 

 

 

alt + shift + s + s 로 generate to String 해줌 

=> 한번에 해당 객체의 정보를 출력해 준다. 

=> 한번에 BoardDTO 객체에 저장된 정보 확인용 

 

package com.itwillbs.board;

import java.sql.Date;

public class BoardDTO {

	// DTO (Data Transfer Object) 데이터 DB 전송 객체 
	private int bno;					// 게시판 글번호 (PK)
	private String name;	  			// 글쓴이
	
	@Override
	public String toString() {
		//한번에 해당 객체의 정보를 출력 
		return "boardDTO [bno=" + bno + ", name=" + name + ", pass=" + pass + ", subject=" + subject + ", content="
				+ content + ", readcount=" + readcount + ", re_ref=" + re_ref + ", re_lev=" + re_lev + ", re_seq="
				+ re_seq + ", date=" + date + ", ip=" + ip + ", file=" + file + "]";
	}
	
	public int getBno() {
		return bno;
	}
	public void setBno(int bno) {
		this.bno = bno;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public int getReadcount() {
		return readcount;
	}
	public void setReadcount(int readcount) {
		this.readcount = readcount;
	}
	public int getRe_ref() {
		return re_ref;
	}
	public void setRe_ref(int re_ref) {
		this.re_ref = re_ref;
	}
	public int getRe_lev() {
		return re_lev;
	}
	public void setRe_lev(int re_lev) {
		this.re_lev = re_lev;
	}
	public int getRe_seq() {
		return re_seq;
	}
	public void setRe_seq(int re_seq) {
		this.re_seq = re_seq;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
	public String getFile() {
		return file;
	}
	public void setFile(String file) {
		this.file = file;
	}
	private String pass;				// 글 비밀번호
	private String subject;				// 글 제목
	private String content;				// 글 내용
	
	private int readcount;				// 조회수
	private int re_ref;					// 답글 - 글 그룹번호
	private int re_lev;					// 답글 - 글 들여쓰기
	private int re_seq;					// 답글 - 글 순서
	
	private Date date;					// 글 작성일
	private String ip;					// 글 작성자 ip 주소
	private String file;				// 첨부파일 
	
}

 

 


<writePro.jsp>

<body>
	<h1>writePro.jsp</h1>
	
	<%
	//한글처리
	request.setCharacterEncoding("UTF-8");
	//자바빈 객체 => BoardDTO(Data Transfer Object) (=BoardBean)
	
	//전달된 파라메터를 저장 (액션태그로 -> 자바빈 객체 필요!)

			%>
			<jsp:useBean id="dto" class="com.itwillbs.board.BoardDTO" />
			<jsp:setProperty property="*" name = "dto" />
			

</body>

 

dto 객체에 IP추가 추가 저장
dto.setIp(request.getRemoteAddr());

글쓰기 정보를 입력 받아 온 것. 

 

 


데이터(DB) 처리 객체  하나 생성
BoardDAOjava

 

package com.itwillbs.board;

public class BoardDAO {
	// DAO (Data Access Object) 
}
public class BoardDAO {
	// DAO (Data Access Object) : 데이터(DB) 처리 객체 
	
	//공통 변수 선언
	
	private Connection con = null;
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;
	private String sql = " ";
	
	//생성자
	public BoardDAO() {
		System.out.println("DAO : 생성자 호출(객체 생성)");
		System.out.println("DAO : DB연결에 대한 모든 처리 준비 완료");
	}
	//디비 연결 메서드 ()
	private Connection getConnection() throws Exception {
		final String DRIVER = "com.mysql.cj.jdbc.Driver";
		final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
		final String DBID = "root";
		final String DBPW = "1234";
				
		Class.forName(DRIVER);
		//2.디비 연결
		 con = DriverManager.getConnection(DBURL, DBID, DBPW);
		 System.out.println(" DAO : 디비 연결 성공");
		 System.out.println(" DAO : " + con);
		//연결정보를 위의 con에 저장하겠다 
		return con;
		
}
	// 글쓰기 메서드 - insertBoard()
	public void insertBoard() {
		System.out.println(" DAO : insertBoard() 호출");
	}
	// 글쓰기 메서드 - insertBoard()
	
	
	
} //class

 

 

 


Mysql 내장함수 max(bno)
(= 글 번호 계산 하는 것 => 번호 최대값 + 1)
use jspdb;
select max(bno) from itwill_board;

 

max(bno) 

https://gent.tistory.com/466

 

[Oracle] 오라클 INSERT 1씩 증가시키는 방법 (MAX+1, 시퀀스)

오라클에서는 칼럼의 값을 자동으로 증가시키는 기능이 없기 때문에 INSERT 작업 시 직접 일련번호를 매번 후 데이터를 입력해야 한다. 가장 많이 사용하는 방법은 일련번호 칼럼의 마지막 값을

gent.tistory.com


BoardDAO.java

package com.itwillbs.board;

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

public class BoardDAO {
	// DAO (Data Access Object) : 데이터(DB) 처리 객체 
	
	//공통 변수 선언
	
	private Connection con = null;
	private PreparedStatement pstmt = null;
	private ResultSet rs = null;
	private String sql = " ";
	
	//생성자
	public BoardDAO() {
		System.out.println("DAO : 생성자 호출(객체 생성)");
		System.out.println("DAO : DB연결에 대한 모든 처리 준비 완료");
	}
	//디비 연결 메서드 ()
	private Connection getConnection() throws Exception {
		final String DRIVER = "com.mysql.cj.jdbc.Driver";
		final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
		final String DBID = "root";
		final String DBPW = "1234";
				
		Class.forName(DRIVER);
		//2.디비 연결
		 con = DriverManager.getConnection(DBURL, DBID, DBPW);
		 System.out.println(" DAO : 디비 연결 성공");
		 System.out.println(" DAO : " + con);
		//연결정보를 위의 con에 저장하겠다 
		return con;
		
}
	// 글쓰기 메서드 - insertBoard() - try catch 
	public void insertBoard(BoardDTO dto) {
		System.out.println(" DAO : insertBoard() 호출");
		
		int bno = 0;    //글번호 저장 
		try {
		//1.2 디비 연결
		con = getConnection();
		//3. sql 작성(글번호 계산) & psmtm 객체 
		sql = "select max(bno) from itwill_board";
		pstmt = con.prepareStatement(sql);
		//4. sql 실행
		rs = pstmt.executeQuery();
		
		//5. 데이터 처리 (= 글 번호 계산 하는 것 => 번호 최대값 + 1)
		//* rs.next() - true/false 구분 
		// => 워크벤치에 실행 (select)
		//		결과 | > (삼각형 커서) : true (커서 이동 가능, sql, null 상관없음)
		//		결과 * , 커서 x : false (커서 이동이 불가능)
		
		
		if(rs.next()) {
//			bno = rs.getInt("max(bno)")+1; // 컬럼명 
			bno = rs.getInt(1)+1; //컬럼인덱스 
			// => rs.getInt() : 리턴데이터의 값이 sql-null 일 경우 0을 리턴
		}

		System.out.println("DAO : 글번호 = " + bno);
		
		//3.sql 작성 (insert) & pstmt 객체
		sql = "insert into itwill_board(bno,name,pass,subject,content,"
				+ "readcount,re_ref,re_lev,re_seq,date,ip,file) " //줄 바꿀 때 공백 하나 넣어라 
				+ "values(?,?,?,?,?,?,?,?,?,now(),?,?)";
		
		pstmt = con.prepareStatement(sql);
		
		//???
		pstmt.setInt(1, bno);
		pstmt.setString(2, dto.getName());
		pstmt.setString(3, dto.getPass());
		pstmt.setString(4, dto.getSubject());
		pstmt.setString(5, dto.getContent());
		pstmt.setInt(6, 0);   // 조회수 0 초기화 
		pstmt.setInt(7, bno); // ref 그룹번호 (bno 초기화)
		pstmt.setInt(8, 0); // lev 들여쓰기 (0 초기화)
		pstmt.setInt(9, 0); // seq 순서 (0 초기화) 
		
		pstmt.setString(10, dto.getIp());
		pstmt.setString(11, dto.getFile());
		
		//4.sql 실행 
		pstmt.executeUpdate();
		
		System.out.println("DAO : 게시판 글쓰기 완료 !");
		
	} catch (Exception e) {
		e.printStackTrace();
	}
	

	}
	//글쓰기 메서드 - insertBoard()
} //class

 

 

 

boardList 만들기 
<writePro.jsp>

 

저장된 글정보 (DTO)를 DB에 저장 
BoardDAO 객체 생성 

BoardDAO dao = new BoardDAO();



글쓰기 메서드 호출

dao.insertBoard(dto);

 

리스트 페이지 이동 

response.sendRedirect("boardList.jsp");

 

 

 

 

BoardDAO.java 에서 글정보 가져오는 객체 만들기
<BoardDAO.java>

 

글 정보 가져오기 - getBoardList()

public ArrayList getBoardList() {
		// 글정보를 모두 저장하는 배열 만들기 
		ArrayList boardList = new ArrayList();
		
		return boardList;
	}

 

 

글정보를 모두 저장하는 배열 만들기 

public ArrayList getBoardList() {
		System.out.println("DAO : getBoardList() 호출");
		// 글정보를 모두 저장하는 배열 만들기 
		ArrayList boardList = new ArrayList();
		
		// 1.2. 디비 연결 
		try {
			con = getConnection();
			// 3. sql 작성(select) & pstmt 객체
			sql = "select * from itwill_board";
			pstmt = con.prepareStatement(sql);
			
			// 4. sql 실행 
			rs = pstmt.executeQuery();
			
			// 5. 데이터 처리(DB->DTO에 저장->list에 전달 & 저장)
			while(rs.next()) {
				BoardDTO dto = new BoardDTO();
				dto.setBno(rs.getInt("bno"));
				dto.setContent(rs.getString("content"));
				dto.setDate(rs.getDate("date"));
				dto.setFile(rs.getString("file"));
				dto.setName(rs.getString("name"));
				dto.setPass(rs.getString("pass"));
				dto.setRe_lev(rs.getInt("re_lev"));
				dto.setRe_ref(rs.getInt("re_ref"));
				dto.setRe_seq(rs.getInt("re_seq"));
				dto.setReadcount(rs.getInt("readcount"));
				dto.setSubject(rs.getString("subject"));
				dto.setIp(rs.getString("ip"));

				
				// DTO -> List 
				boardList.add(dto);
				
			}//while
			System.out.println("DTO : 게시판 목록 저장 완료!");
			
		} catch (Exception e) {

			e.printStackTrace();
		}

		
		return boardList;
	}
	
	// 글 정보 가져오기 - getBoardList()
	
} //class

 

 

 

방금 만든 게시판 정보를 가져오는 메서드 
<boardList.jsp>
ArrayList boardList = dao.getBoardList();

 

게시판 정보 출력 
%>
	<h3><a href = "writeForm.jsp">글쓰기</a></h3>
	
	<table border ="1">
		<tr>
			<td>번호</td>
			<td>제목</td>
			<td>작성자</td>
			<td>조회수</td>
			<td>작성일</td>
			<td>ip</td>		
		</tr>
		<% for(int i = 0;i<boardList.size();i++){ 
				BoardDTO dto = (BoardDTO) boardList.get(i);
				%>
		<tr>
			<td><%=dto.getBno() %></td>
			<td><%=dto.getSubject() %></td>
			<td><%=dto.getName() %></td>
			<td><%=dto.getReadcount() %></td>
			<td><%=dto.getDate() %></td>
			<td><%=dto.getIp() %></td>		
		</tr>
		<% }%>
	</table>

글쓰기 누르면 이렇게 목록이 늘어남 

 

 

게시판 글쓰기
%>
	<h3><a href = "writeForm.jsp">글쓰기</a></h3>    
    %>

 

728x90
반응형