2013년 7월 18일 목요일

(130718) 19일차 BoardWrite.jsp 외 4개 (JSP에서 Servlet 호출을 이용한 게시판 예제)

 - BoardWrite.jsp 소스
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<center> <h2> 글 쓰 기 </h2>

<form action="ServletB" method="post">

<table width="500" border="1" cellpadding="5" cellspacing="2">
    <tr>
    <th width="70" align="center" bgcolor="FFFFFFF"> 이 름 </th>
    <td width="330"> <input type="text" name="writer" size="25"> </td>
    </tr>
   
    <tr>
    <th width="70" align="center" bgcolor="FFFFFFF"> 제 목  </th>
    <td width="330"> 
    <input type="text" name="subject" size="25">
    </tr>
   
    <tr>
    <th width="70" align="center" bgcolor="FFFFFFF"> Email </th>
    <td width="330"> <input type="text" name="email" size="25"> </td>
    </tr>

    <tr>
    <th width="70" align="center" bgcolor="FFFFFFF"> 내 용  </th>
    <td width="330"> <textarea name="content" rows="13" cols="40"></textarea> </td>
    </tr>

    <tr>
    <th width="70" align="center" bgcolor="FFFFFFF"> 비밀번호 </th>
    <td width="330"> <input type="password" name="passwd" size="25"> </td>
    </tr>
    </table>
   
    <table width="180" border="0" cellpadding="5">
    <tr>
    <td> <input type="submit" value="쓰기"> </td>
    <td> <input type="reset" value="취소"> </td>
    <td> <input type="button" value="목록" onclick="window.location='BoardList.jsp'"> </td>    
    </tr>
  </table>
  </form> 
</center>
</body>
</html>


 - ServletB.java 소스
package board;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ServletB")
public class ServletB extends HttpServlet {
private static final long serialVersionUID = 1L;
    

protected void doGet(HttpServletRequest req, HttpServletResponse res) 
throws ServletException, IOException {
jspProcess(req, res);
}

protected void doPost(HttpServletRequest req, HttpServletResponse res) 
throws ServletException, IOException {
jspProcess(req, res);
}

private void jspProcess(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

res.setCharacterEncoding("euc-kr");
req.setCharacterEncoding("euc-kr");
String writer = req.getParameter("writer");
String passwd = req.getParameter("passwd");
String subject = req.getParameter("subject");
String content = req.getParameter("content");
String email = req.getParameter("email");


// jsp를 호출하여 화면에 출력하시오.
// Request 객체의 데이터를 떠 안고
req.setAttribute("writer", writer);
req.setAttribute("passwd", passwd);
req.setAttribute("subject", subject);
req.setAttribute("content", content);
req.setAttribute("email", email);
RequestDispatcher dispatcher = req.getRequestDispatcher("WriteProc.jsp");
// RequestDispatcher의 WriteProc.jsp로 넘겨줌
dispatcher.forward(req, res);
}
}


 - BoardBean.java 소스
package board;

import java.util.Date;

public class BoardBean {
private int num;
private String writer;
private String passwd;
private String subject;
private String content;
private String email;
private int ref;
private int re_level;
private int re_step;
private Date reg_date;
private int readcount;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getRef() {
return ref;
}
public void setRef(int ref) {
this.ref = ref;
}
public int getRe_level() {
return re_level;
}
public void setRe_level(int re_level) {
this.re_level = re_level;
}
public int getRe_step() {
return re_step;
}
public void setRe_step(int re_step) {
this.re_step = re_step;
}
public Date getReg_date() {
return reg_date;
}
public void setReg_date(Date reg_date) {
this.reg_date = reg_date;
}
public int getReadcount() {
return readcount;
}
public void setReadcount(int readcount) {
this.readcount = readcount;
}
}


 - BoardDao.java 소스
package board;
import java.sql.*;
import java.util.Vector;

public class BoardDao {

String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";
String id="system";
String pass="123456";
Connection con;
PreparedStatement pstmt;
ResultSet rs;

// 데이터 베이스에 접근하는 메소드 
public void con(){
try {
// 1.어느 데이터 베이스를 사용할건지를 설정 
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2.실제 데이터 베이스에 접근하기위한 소스를 작성 == 접속완료되면 커넥션을 리턴
con = DriverManager.getConnection(url, id, pass); 

} catch(Exception e){
}

// 하나의 게시글을 저장하는 메소드
public void insertBoard(BoardBean bbean){
try {
// 데이터 베이스에 접근
this.con();
// 쿼리준비 (nextval를 이용해서 자동적으로 값을 증가시킴, sysdate를 이용해서 현재 날짜를 입력함)
String sql ="insert into bboard values(board_seq.nextval,?,?,?,?,?,0,0,0,sysdate,0)";
// 쿼리 실행객체 준비
pstmt = con.prepareStatement(sql);
// ?에 데이터 입력
pstmt.setString(1, bbean.getWriter()); 
pstmt.setString(2, bbean.getPasswd());
pstmt.setString(3, bbean.getSubject()); 
pstmt.setString(4, bbean.getContent()); 
pstmt.setString(5, bbean.getEmail()); 
// 쿼리를 실행 하시오
pstmt.executeUpdate();
// 자원 반납
pstmt.close();
con.close();
} catch (Exception e) {
}
}
}


 - WriteProc.jsp 소스
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <% request.setCharacterEncoding("euc-kr"); %>
    <!-- 빈클래스 생성 -->
    <jsp:useBean id = "bbean" class = "board.BoardBean"></jsp:useBean>
    <!-- 빈클래스에 데이터를 추가 -->
    <jsp:setProperty property = "*" name = "bbean"/>
   
    <!-- 데이터를 추가 -->
    <%
    BoardDao bdao = new BoardDao();

    // 데이터를 추가하는 메소드 호출
    bdao.insertBoard(bbean);
  
    // 데이터를 추가 후 제어권을 BoardListList로 넘겨줌
    response.sendRedirect("BoardList.jsp");
    %>

</body>
</html>


 - BoardList.jsp 소스
<%@page import="java.util.Vector"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<center>
<h2> 게 시 판 목 록 </h2>
<table border = "1" width = "740" cellpadding="1" cellspacing="2">
<tr bgcolor = "FFFFFFF">
  <th width = "50"> 번호 </th>
  <th width = "330"> 제목 </th>
  <th width = "130"> 작성자 </th>
  <th width = "130"> 날짜 </th>
  <th width = "80"> 조회수 </th>
</tr>
 
  <!-- 커넥션 설정 -->
  <sql:setDataSource
  url = "jdbc:oracle:thin:@127.0.0.1:1521:XE"
  driver = "oracle.jdbc.driver.OracleDriver"
  user = "system"
  password = "123456"
  var = "ds"
  />
 
  <!-- 데이터 베이스에서 가져올 쿼리 설정 및 실행 -->
  <sql:query var = "rs" dataSource = "${ds}">
  select num, subject, writer, reg_date, readcount from bboard
  </sql:query>
 
  <!-- rowsByIndex는 해당 개수만큼의 row - 열을 얻어오는 것 -->
  <c:forEach var = "row" items="${rs.rowsByIndex}">
  <tr>
  <!-- 각 해당 열의 col - 행을 출력 -->
  <c:forEach var = "col" items="${row}">
  <td> <c:out value="${col}"/> </td>
  </c:forEach>
</tr>
</c:forEach>
    </table>
</center>
</body>
</html>


 - 결과