JSP

221206 Board 만들기

주영재 2022. 12. 6. 18:35

오라클 저장

 

text(자바파일 아님. text파일)

create table users(
    id varchar2(30) PRIMARY Key,
    pw varchar2(30) not null,
    name varchar2(30) not null,
    email varchar2(30) UNIQUE,
    gender char(1) check (gender in ('f', 'm'))
);

create table board(
    bno number(10) primary key,
    writer varchar2(30) not null,--user와 1대n관계인데 비식별이라 자동으로 foreing key
    title varchar2(50) not null,
    content varchar2(500),
    regdate date default sysdate,
    hit number(10) default 0
);

create SEQUENCE board_seq nocache;--설정안하면 자동으로 1부터 증가

 

기본 페이지 4개

board_write

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@include file="../include/header.jsp" %>

<div align="center" class="div_center">
	<h3>게시판 글 작성 페이지</h3>
	<hr>
	
	<form action="registForm.board" method="post">
		<table border="1" width="500">
			<tr>
				<td>작성자</td>
				<td>
					<input type="text" name="writer" size="10" required>
				</td>
			</tr>
			<tr>
				<td>글 제목</td>
				<td>
					<input type="text" name="title" required>
				</td>
			</tr>
			<tr>
				<td>글 내용</td>
				<td>
					<textarea rows="10" style="width: 95%;" name="content"></textarea>
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" value="작성 완료">
					&nbsp;&nbsp;
					<input type="button" value="목록" onclick="location.href='board_list.board'">         
				</td>
			</tr>
			
		</table>
	</form>
	
</div>

<%@include file="../include/footer.jsp" %>

write에서 button의 location.href를 통해 '목록'버튼을 누르면 list페이지로 이동가능

 

board_list(board의 메인)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    
<%@include file="../include/header.jsp" %>

	<div class="container">
		<h3>My Web게시판</h3>

		<table class="table table-bordered">
			<thead>
				<tr>
					<th>글 번호</th>
					<th>작성자</th>
					<th>제목</th>
					<th>날짜</th>
					<th>조회수</th>
				</tr>
			</thead>

			<tbody>
				<tr>
					<td></td>
					<td></td>
					<td></td>
					<td></td>
					<td></td>
				</tr>
			</tbody>
			
			<tbody>
				<tr>
					<td colspan="5" align="right">
						<form action="" class="form-inline" >
						  <div class="form-group">
						    <input type="text" name="search" placeholder="제목검색" class="form-control" >
						  	<input type="submit" value="검색" class="btn btn-default">
							<input type="button" value="글 작성" class="btn btn-default" onclick="location.href='board_write.board'">
						  </div>
						</form> 
					</td>
				</tr>
			</tbody>
		
		</table>
	</div>
	
<%@include file="../include/footer.jsp" %>

list에서 button의 location.href를 통해 '글 작성' 버튼을 누르면 write페이지로 이동 가능

 

board_content

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<%@include file="../include/header.jsp" %>

<div align="center" class="div_center">

	<h3>게시글 내용 보기</h3>
	<hr>
	<table border="1" width="500">
		<tr>
			<td width="20%">글번호</td>
			<td width="30%"></td>
			
			<td width="20%">조회수</td>
			<td width="30%"></td>
		</tr>
		<tr>
			<td>작성자</td>
			<td></td>
			
			<td>작성일</td>
			<td ></td>
		</tr>
		
		<tr>
			<td width="20%">글제목</td>
			<td colspan="3"></td>
		</tr>
		<tr>
			<td width="20%">글내용</td>
			<td colspan="3" height="120px"></td>
		</tr>
		
		<tr>
			<td colspan="4" align="center">
				<input type="button" value="목록">&nbsp;&nbsp;
				<input type="button" value="수정">&nbsp;&nbsp;
				<input type="button" value="삭제">&nbsp;&nbsp;
			</td>
		</tr>
	</table>
	
	
	

	

</div>

<%@include file="../include/footer.jsp" %>

 

 

board_modify

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@include file="../include/header.jsp" %>

<div align="center" class="div_center">
	<h3>게시판 글 수정 페이지</h3>
	<hr>
	
	<form action="" method="post">
		
		<table border="1" width="500">
			
			<tr>
				<td>글 번호</td>
				<td></td>
			</tr>
			<tr>
				<td>작성자</td>
				<td><input type="text" name="" value="" readonly></td>
			</tr>
			<tr>
				<td>글 제목</td>
				<td>
					<input type="text" name="" value="">
				</td>
			</tr>
			<tr>
				<td>글 내용</td>
				<td>
					<textarea rows="10" style="width: 95%;" name="">
					</textarea>
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" value="수정 하기" onclick="">&nbsp;&nbsp;
					<input type="button" value="목록">        
				</td>
			</tr>
			
		</table>
	</form>
	
</div>

<%@include file="../include/footer.jsp" %>

 

 

이동할 컨트롤러

BoardController

package com.example.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.example.board.service.BoardService;
import com.example.board.service.BoardServiceImpl;


@WebServlet("*.board")
public class BoardController extends HttpServlet {
	private static final long serialVersionUID = 1L;
   
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doAction(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doAction(request, response);
	}
	protected void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
				//한글처리
				request.setCharacterEncoding("utf-8");
				
				//요청분기
				String uri = request.getRequestURI();
				String path = request.getContextPath();
				String command =uri.substring(path.length());
				
				System.out.println("요청경로:"+command);
				BoardService service=new BoardServiceImpl();
				
			if(command.equals("/board/board_write.board")) { //등록화면
				request.getRequestDispatcher("board_write.jsp").forward(request, response);
				
			}else if(command.equals("/board/board_list.board")) { //목록화면
				request.getRequestDispatcher("board_list.jsp").forward(request, response);
				
			}else if(command.equals("/board/board_content.board")) { //상세내용화면
				request.getRequestDispatcher("board_content.jsp").forward(request, response);
				
			}else if(command.equals("/board/board_modify.board")) { //수정화면
				request.getRequestDispatcher("board_modify.jsp").forward(request, response);
				
			}else if(command.equals("/board/registForm.board")) {//글 등록
				
				/*
				 * 1.service의 regist메서드로 연결
				 * 2.service에서 등록에 필요한 파라미터를 받습니다.
				 * 3.dao의 void regist()메서드를 생성하고 insert작업
				 * 4.insert이후 컨트롤러에서 리스트로 리다이렉트
				 */
				service.regist(request, response);
				response.sendRedirect("board_list.board");
				
			}
		
	}

}

작성을 완료하면 리다이렉트를 통해 list로 페이지가 이동한다.

아직 작성된 글을 list에 출력하는 코드는 생성하지 않았으나,

service와 DAO를 통해 DB에 저장되는 프로세스는 생성하였다.

 

BoardVO

package com.example.board.model;

import java.sql.Timestamp;

public class BoardVO {
	private int bno;
	private String writer;
	private String title;
	private String content;
	private Timestamp regdate;
	private int hit;
	
	public BoardVO() {}

	public BoardVO(int bno, String writer, String title, String content, Timestamp regdate, int hit) {
		super();
		this.bno = bno;
		this.writer = writer;
		this.title = title;
		this.content = content;
		this.regdate = regdate;
		this.hit = hit;
	}

	public int getBno() {
		return bno;
	}

	public void setBno(int bno) {
		this.bno = bno;
	}

	public String getWriter() {
		return writer;
	}

	public void setWriter(String writer) {
		this.writer = writer;
	}

	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 Timestamp getRegdate() {
		return regdate;
	}

	public void setRegdate(Timestamp regdate) {
		this.regdate = regdate;
	}

	public int getHit() {
		return hit;
	}

	public void setHit(int hit) {
		this.hit = hit;
	}

	@Override
	public String toString() {
		return "BoardVO [bno=" + bno + ", writer=" + writer + ", title=" + title + ", content=" + content + ", regdate="
				+ regdate + ", hit=" + hit + "]";
	}
	
	

}

 

 

BoardDAO

package com.example.board.model;

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

import com.example.util.JDBCUtil;


public class BoardDAO {
	
	private static BoardDAO instance = new BoardDAO();
	
	private BoardDAO() {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버클래스 로드에러");
		}
	}
	
	public static BoardDAO getInstance() {
		return instance;
	}
	
	public String URL = "jdbc:oracle:thin:@localhost:1521:xe";
	public String UID = "jsp";
	public String UPW = "jsp";
	
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;
	
	public void regist(String writer, String title, String content) {
		
		String sql="insert into board values(board_seq.nextval,?,?,?,sysdate,0)";
		
		try {
			conn=DriverManager.getConnection(URL,UID,UPW);
			
			pstmt=conn.prepareStatement(sql);
			pstmt.setString(1,writer);
			pstmt.setString(2,title);
			pstmt.setString(3,content);
			
			pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JDBCUtil.close(conn, pstmt, rs);
		}
	}

}

 

 

BoardService

package com.example.board.service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface BoardService {
	
	public void regist(HttpServletRequest request, HttpServletResponse response);//등록

}

 

 

BoardServiceImpl

package com.example.board.service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.example.board.model.BoardDAO;

public class BoardServiceImpl implements BoardService{

	public void regist(HttpServletRequest request, HttpServletResponse response) {
		String writer = request.getParameter("writer");
		String title = request.getParameter("title");
		String content = request.getParameter("content");
		
		BoardDAO dao = BoardDAO.getInstance();
		dao.regist(writer, title, content);

	}
	
}