Develop/JavaScript JQuery JSP

0721 게시판 만들기

포페PostFace 2022. 7. 22. 19:46

1.board_table.txt

drop table board;

create table board( 
	num number not null primary key,
	writer varchar2(10) not null,
	email varchar2(10),
	subject varchar2(20) not null,
	passwd varchar2(12) not null,
	reg_date date not null,
	readcount int default 0,
	ref number not null,
	re_step number not null,
	re_level number not null,
	content varchar2(20) not null,
	ip varchar2(15) not null
);

drop sequence board_seq;
create sequence board_seq
  increment by 1
  start with 1
  minvalue 1
  maxvalue 10000
  nocache;
  
select num,ref,re_step,re_level from board;
--아래 sql문은 답글까지 insert 한 것
	
insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a1','a1','a1','1234','2015-1-1',1,0,0,'내용1','127.0.0.1');



insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a2','a2','a2','1234','2015-1-1',2,0,0,'내용2','127.0.0.1');

insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a21','a21','a21','1234','2015-1-1',2,4,1,'내용21','127.0.0.1');

insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a22','a22','a22','1234','2015-1-1',2,1,1,'내용22','127.0.0.1');

insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a221','a221','a221','1234','2015-1-1',2,3,2,'내용221','127.0.0.1');

insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a222','a222','a222','1234','2015-1-1',2,2,2,'내용222','127.0.0.1');



insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a3','a3','a3','1234','2015-1-1',7,0,0,'내용3','127.0.0.1');

insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a31','a31','a31','1234','2015-1-1',7,6,1,'내용31','127.0.0.1');

insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a311','a311','a311','1234','2015-1-1',7,7,2,'내용311','127.0.0.1');

insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a32','a32','a32','1234','2015-1-1',7,2,1,'내용32','127.0.0.1');

insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a321','a321','a321','1234','2015-1-1',7,5,2,'내용321','127.0.0.1');

insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a322','a322','a322','1234','2015-1-1',7,3,2,'내용322','127.0.0.1');

insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a3221','a3221','a3221','1234','2015-1-1',7,4,3,'내용3221','127.0.0.1');

insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)
values(board_seq.nextval,'a33','a33','a33','1234','2015-1-1',7,1,1,'내용33','127.0.0.1');


commit;

SQL> col subject for a10
SQL> select rownum,num,subject,ref,re_step,re_level from board;

    ROWNUM        NUM SUBJECT           REF    RE_STEP   RE_LEVEL
---------- ---------- ---------- ---------- ---------- ----------
         1          1 a1                  1          0          0
         2          2 a2                  2          0          0
         3          3 a21                 2          4          1
         4          4 a22                 2          1          1
         5          5 a221                2          3          2
         6          6 a222                2          2          2
         7          7 a3                  6          0          0
         8          8 a31                 6          6          1
         9          9 a311                6          7          2
        10         10 a32                 6          2          1
        11         11 a321                6          5          2
        12         12 a322                6          3          2
        13         13 a3221               6          4          3
        14         14 a33                 6          1          1


SQL> select rownum,num,subject,ref,re_step,re_level from board
  2  order by ref desc, re_step asc;

    ROWNUM        NUM SUBJECT           REF    RE_STEP   RE_LEVEL
---------- ---------- ---------- ---------- ---------- ----------
         7          7 a3                  6          0          0
        14         14 a33                 6          1          1
        10         10 a32                 6          2          1
        12         12 a322                6          3          2
        13         13 a3221               6          4          3
        11         11 a321                6          5          2
         8          8 a31                 6          6          1
         9          9 a311                6          7          2
         2          2 a2                  2          0          0
         4          4 a22                 2          1          1
         6          6 a222                2          2          2
         5          5 a221                2          3          2
         3          3 a21                 2          4          1
         1          1 a1                  1          0          0

14 개의 행이 선택되었습니다.

[topN절 사용의 1단계]
select num, subject, ref, re_step, re_level	
from board 
order by ref desc, re_step asc;


      NUM SUBJECT           REF    RE_STEP   RE_LEVEL
--------- ---------- ---------- ---------- ----------
        7 a3                  6          0          0
       14 a33                 6          1          1
       10 a32                 6          2          1
       12 a322                6          3          2
       13 a3221               6          4          3
       11 a321                6          5          2
        8 a31                 6          6          1
        9 a311                6          7          2
        2 a2                  2          0          0
        4 a22                 2          1          1
        6 a222                2          2          2
        5 a221                2          3          2
        3 a21                 2          4          1
        1 a1                  1          0          0

[topN절 사용의 2단계]
select rownum as rank, num, subject, ref, re_step, re_level	
from (select num, subject, ref, re_step, re_level	
from board 
order by ref desc, re_step asc);


     RANK        NUM SUBJECT           REF    RE_STEP   RE_LEVEL
--------- ---------- ---------- ---------- ---------- ----------
        1          7 a3                  6          0          0
        2         14 a33                 6          1          1
        3         10 a32                 6          2          1
        4         12 a322                6          3          2
        5         13 a3221               6          4          3
        6         11 a321                6          5          2
        7          8 a31                 6          6          1
        8          9 a311                6          7          2
        9          2 a2                  2          0          0
       10          4 a22                 2          1          1
       11          6 a222                2          2          2
       12          5 a221                2          3          2
       13          3 a21                 2          4          1
       14          1 a1                  1          0          0


[topN절 사용의 최종 3단계]

select rank, num, subject, ref, re_step, re_level		        
from (select rownum as rank, num, subject, ref, re_step, re_level	
from (select num, subject, ref, re_step, re_level	
from board 
order by ref desc, re_step asc)) 
where rank between 3 and 7;
		        

   RANK        NUM SUBJECT           REF    RE_STEP   RE_LEVEL
------- ---------- ---------- ---------- ---------- ----------
      3         10 a32                 6          2          1
      4         12 a322                6          3          2
      5         13 a3221               6          4          3
      6         11 a321                6          5          2
      7          8 a31                 6          6          1

2.BoardBean.java

package board;

import java.sql.Timestamp;

public class BoardBean {
	private int num;
	private String writer;
	private String email;
	private String subject;
	private String passwd;
	private Timestamp reg_date;
	private int readcount;
	private int ref;
	private int re_step;
	private int re_level;
	private String content;
	private String ip;
	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 getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	public Timestamp getReg_date() {
		return reg_date;
	}
	public void setReg_date(Timestamp reg_date) {
		this.reg_date = reg_date;
	}
	public int getReadcount() {
		return readcount;
	}
	public void setReadcount(int readcount) {
		this.readcount = readcount;
	}
	public int getRef() {
		return ref;
	}
	public void setRef(int ref) {
		this.ref = ref;
	}
	public int getRe_step() {
		return re_step;
	}
	public void setRe_step(int re_step) {
		this.re_step = re_step;
	}
	public int getRe_level() {
		return re_level;
	}
	public void setRe_level(int re_level) {
		this.re_level = re_level;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
}

3.BoardDao.java

package board;

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

import javax.naming.spi.DirStateFactory.Result;

public class BoardDao {
	private static BoardDao instance;
	String driver="oracle.jdbc.driver.OracleDriver";
	String url="jdbc:oracle:thin:@localhost:1521:orcl";
	String id="sqlid";
	String pw="sqlpw";
	Connection conn=null;
	private BoardDao() {
		try {
			System.out.println("드라이버 로드");
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버 로드 실패");
			e.printStackTrace();
		}
	}
	public static BoardDao getInstance() {
		if(instance==null) {
			instance=new BoardDao();
		}		
		return instance;
	}
	public void connect() {
		try {
			System.out.println("계정 접속");
			conn=DriverManager.getConnection(url, id, pw);
		} catch (SQLException e) {
			System.out.println("계정 접속 실패");
			e.printStackTrace();
		}
	}
	public int getArticleCount() {
		connect();
		String sql="select count(*) as cnt from board";
		int result=-1;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			ps=conn.prepareStatement(sql);
			rs=ps.executeQuery();
			if(rs.next()) {
				result=rs.getInt("cnt");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null)
					conn.close();
				if(ps!=null)
					ps.close();
				if(rs!=null)
					rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		return result;
	}
	public ArrayList<BoardBean> getArticles(int start,int end){
		connect();
		String sql = "select num, writer, email, subject, passwd, reg_date, readcount, ref, re_step, re_level, content, ip " ;		        
		sql += "from (select rownum as rank, num, writer, email, subject, passwd, reg_date, readcount, ref, re_step, re_level, content, ip ";
		sql += "from (select num, writer, email, subject, passwd, reg_date, readcount, ref, re_step, re_level, content, ip ";
		sql += "from board  ";
		sql += "order by ref desc, re_step asc )) ";
		sql += "where rank between ? and ? ";
		PreparedStatement ps=null;
		ResultSet rs=null;
		ArrayList<BoardBean> lists=new ArrayList<BoardBean>();
		try {
			ps=conn.prepareStatement(sql);
			ps.setInt(1, start);
			ps.setInt(2, end);
			rs=ps.executeQuery();
			while(rs.next()) {
				BoardBean bb=new BoardBean();
				bb.setNum(rs.getInt("num"));
				bb.setWriter(rs.getString("writer"));
				bb.setEmail(rs.getString("email"));
				bb.setSubject(rs.getString("subject"));
				bb.setPasswd(rs.getString("passwd"));
				bb.setReg_date(rs.getTimestamp("reg_date"));
				bb.setReadcount(rs.getInt("readcount"));
				bb.setRef(rs.getInt("ref"));
				bb.setRe_step(rs.getInt("re_step"));
				bb.setRe_level(rs.getInt("re_level"));
				bb.setContent(rs.getString("content"));
				bb.setIp(rs.getString("ip"));
				lists.add(bb);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null)
					conn.close();
				if(ps!=null)
					ps.close();
				if(rs!=null)
					rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return lists;
	}
	//글쓰기(원글)
	public int insertArticle(BoardBean bb) {
		connect();
		String sql="insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)"+
					" values(board_seq.nextval,?,?,?,?,?,board_seq.currval,?,?,?,?)";
					//ref=>board_seq.currval
		PreparedStatement ps=null;
		int result=-1;
		try {
			ps=conn.prepareStatement(sql);
			ps.setString(1, bb.getWriter());
			ps.setString(2, bb.getEmail());
			ps.setString(3, bb.getSubject());
			ps.setString(4, bb.getPasswd());
			ps.setTimestamp(5, bb.getReg_date());
			ps.setInt(6,0); //re_step
			ps.setInt(7,0); //re_level
			ps.setString(8, bb.getContent());
			ps.setString(9, bb.getIp());
			result=ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null)
					conn.close();
				if(ps!=null)
					ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return result;
	}
	public BoardBean getArticle(String num) {
		connect();
		String sql2="update board set readcount=readcount+1 where num="+num;
		String sql="select * from board where num=?";
		PreparedStatement ps=null;
		ResultSet rs=null;
		BoardBean bb=null;
		try {
			ps=conn.prepareStatement(sql2);
			ps.executeUpdate();
			
			ps=conn.prepareStatement(sql);
			ps.setString(1, num);
			rs=ps.executeQuery();
			if(rs.next()) {
				bb=new BoardBean();
				bb.setNum(rs.getInt("num"));
				bb.setWriter(rs.getString("writer"));
				bb.setEmail(rs.getString("email"));
				bb.setSubject(rs.getString("subject"));
				bb.setPasswd(rs.getString("passwd"));
				bb.setReg_date(rs.getTimestamp("reg_date"));
				bb.setReadcount(rs.getInt("readcount"));
				bb.setRef(rs.getInt("ref"));
				bb.setRe_step(rs.getInt("re_step"));
				bb.setRe_level(rs.getInt("re_level"));
				bb.setContent(rs.getString("content"));
				bb.setIp(rs.getString("ip"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null)
					conn.close();
				if(ps!=null)
					ps.close();
				if(rs!=null)
					rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		return bb;
	}
	public int replyArticle(BoardBean bb) {
		connect();
		String sql="insert into board(num,writer,email,subject,passwd,reg_date,ref,re_step,re_level,content,ip)"+
				" values(board_seq.nextval,?,?,?,?,?,?,?,?,?,?)";
		String sql2="update board set re_step=re_step+1 where ref=? and re_step>?";		
		PreparedStatement ps=null;
		int result=-1;
		try {
			ps=conn.prepareStatement(sql2);
			ps.setInt(1, bb.getRef());
			ps.setInt(2, bb.getRe_step());
			ps.executeUpdate();
			ps=conn.prepareStatement(sql);
			ps.setString(1, bb.getWriter());
			ps.setString(2, bb.getEmail());
			ps.setString(3, bb.getSubject());
			ps.setString(4, bb.getPasswd());
			ps.setTimestamp(5, bb.getReg_date());
			ps.setInt(6,bb.getRef()); 
			ps.setInt(7,(bb.getRe_step()+1)); 
			ps.setInt(8,(bb.getRe_level()+1)); 
			ps.setString(9, bb.getContent());
			ps.setString(10, bb.getIp());
			result=ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null)
					conn.close();
				if(ps!=null)
					ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return result;
	}
	public BoardBean updateGetArticle(String num) {
		connect();
		String sql="select * from board where num=?";
		BoardBean bb=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			ps=conn.prepareStatement(sql);
			ps.setString(1, num);
			rs=ps.executeQuery();
			if(rs.next()) {
				bb=new BoardBean();
				bb.setNum(rs.getInt("num"));
				bb.setWriter(rs.getString("writer"));
				bb.setEmail(rs.getString("email"));
				bb.setSubject(rs.getString("subject"));
				bb.setPasswd(rs.getString("passwd"));
				bb.setReg_date(rs.getTimestamp("reg_date"));
				bb.setReadcount(rs.getInt("readcount"));
				bb.setRef(rs.getInt("ref"));
				bb.setRe_step(rs.getInt("re_step"));
				bb.setRe_level(rs.getInt("re_level"));
				bb.setContent(rs.getString("content"));
				bb.setIp(rs.getString("ip"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null)
					conn.close();
				if(ps!=null)
					ps.close();
				if(rs!=null)
					rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}		
		return bb;
	}
	public int updateArticle(BoardBean bb) {
		connect();
		String sql1="select * from board where num=?";
		String sql2="update board set writer=?,email=?,subject=?,content=? where num=?";
		PreparedStatement ps=null;
		ResultSet rs=null;
		int result=-1;
		try {
			ps=conn.prepareStatement(sql1);
			ps.setInt(1, bb.getNum());
			rs=ps.executeQuery();
			if(rs.next()) {				
				if(rs.getString("passwd").equals(bb.getPasswd())) {
					ps=conn.prepareStatement(sql2);
					ps.setString(1, bb.getWriter());
					ps.setString(2, bb.getEmail());
					ps.setString(3, bb.getSubject());
					ps.setString(4, bb.getContent());
					ps.setInt(5, bb.getNum());
					result=ps.executeUpdate();
				} else {
					result=-2;
				}
			}			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null)
					conn.close();
				if(ps!=null)
					ps.close();
				if(rs!=null)
					rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}				
		return result;
	}
	public int deleteArticle(String num,String passwd) {
		connect();
		String sql="select passwd from board where num=?";
		String sql2="delete board where num=?";
		PreparedStatement ps=null;
		ResultSet rs=null;
		int result=-1;
		try {
			ps=conn.prepareStatement(sql);
			ps.setString(1, num);
			rs=ps.executeQuery();
			if(rs.next()) {				
				if(rs.getString("passwd").equals(passwd)) {
					ps=conn.prepareStatement(sql2);					
					ps.setString(1, num);
					result=ps.executeUpdate();
				} else {
					result=-2;
				}
			}			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null)
					conn.close();
				if(ps!=null)
					ps.close();
				if(rs!=null)
					rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}				
		return result;
	}
}

4.list.jsp(메인)

<%@page import="java.text.SimpleDateFormat"%>
<%@page import="board.BoardBean"%>
<%@page import="java.util.ArrayList"%>
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="color.jsp"%>    
    
<style type="text/css">
	body{
		text-align: center;
	}
	table{
		margin: auto;
	}
</style>    
list.jsp<br>

<% 
	int pageSize=10;
	SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
	String pageNum=request.getParameter("pageNum");
	if(pageNum==null){
		pageNum="1";
	}
	int currentPage=Integer.parseInt(pageNum);
	int startRow = (currentPage-1) * pageSize+1;
	int endRow = currentPage * pageSize;
	//1페이지 => startRow:1 endRow:10 => num칼럼 값은 아니다.
	//2페이지 => startRow:11 endRow:20
	BoardDao bdao=BoardDao.getInstance();
	int count = bdao.getArticleCount();
	System.out.println("count : "+count);
	ArrayList<BoardBean> lists=null;
	if(count>0){
		lists = bdao.getArticles(startRow,endRow);
	}
	int number=count-(currentPage-1)*pageSize;
%>
	<b>글목록(전체 글 : <%=count %>)</b>
<table border="1" width="700">
	<tr>
		<td align="right" bgcolor="<%=value_c%>">
			<a href="writeForm.jsp">글쓰기</a>
		</td>
	</tr>
</table>

<%
	if(count == 0){
%>
	<table border="1" width="700">
	<tr>
		<td align="center">
			게시글이 없습니다.
		</td>
	</tr>
</table>
<%		
	}//if
	else{
%>
	<table border="1" width="700">
	<tr bgcolor="<%=value_c%>">
		<td align="center">번호</td>
		<td align="center">제목</td>
		<td align="center">작성자</td>
		<td align="center">작성일</td>
		<td align="center">조회</td>
		<td align="center">IP</td>
	</tr>
<%

	for(int i=0;i<lists.size();i++){
		BoardBean bb = lists.get(i);
		
%>
		<tr>
			<td align="right"><%=number-- %></td>
			<td >
				<%
				if(bb.getRe_level()>0){
				%>
				
				<img src="images/level.gif" width="<%=bb.getRe_level()*20 %>" height="15">
				<img src="images/re.gif" height="15">
				<% }
					%>
			<a href="content.jsp?num=<%=bb.getNum()%>&pageNum=<%=currentPage%>"><%=bb.getSubject() %></a>
			<%if(bb.getReadcount()>=10){ %>
			<img src="images/hot.gif" height="15" >
			<%} %>
			</td>
			<td align="center"><%=bb.getWriter() %></td>
			<td align="center"><%=sdf.format(bb.getReg_date())%></td>
			<td align="right"><%=bb.getReadcount() %></td>
			<td align="center"><%=bb.getIp() %></td>
		</tr>

<%		
	}//for
%>

		
</table>
<%				
	}//else
	
	if(count>0){
		int pageCount=count/pageSize+(count%pageSize==0 ? 0 : 1);
		//pageCount : 전체 페이지 수
		int pageBlock=10;
		
		int startPage = ((currentPage-1)/pageBlock*pageBlock)+1;
		int endPage=startPage+pageBlock-1;
		if(endPage>pageCount)
			endPage=pageCount;
		
		if(startPage>10){
	%>
			<a href="list.jsp?pageNum=<%=startPage-10%>">[이전]</a>		
	<% 
		}//if
		for(int i=startPage;i<=endPage;i++){
	%>
			<a href="list.jsp?pageNum=<%=i%>">[<%=i %>]</a>		
	<%			
		}
		if(endPage<pageCount){
	%>
			<a href="list.jsp?pageNum=<%=startPage+10%>">[다음]</a>		
	<%
		}//if
	}//if(count>0)
%>

5.content.jsp(글 조회)

<%@page import="java.text.SimpleDateFormat"%>
<%@page import="board.BoardBean"%>
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@include file="color.jsp"%>    
content.jsp<br>
<%
	String num=request.getParameter("num"); //부모번호(선택한 글)
	String pageNum=request.getParameter("pageNum");
	BoardDao bdao=BoardDao.getInstance();
	board.BoardBean article= bdao.getArticle(num);
	System.out.println("num:"+article.getNum());
	System.out.println("Ref:"+article.getRef()); //부모정보
	System.out.println("Re_step:"+article.getRe_step()); //부모정보
	System.out.println("Re_level:"+article.getRe_level()); //부모정보
	SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
%>
<form name="myform">
	<table width="500" border="1" cellspacing="0" cellpadding="0"  
      bgcolor="<%=bodyback_c%>" align="center">  
  <tr height="30">
    <td align="center" width="125" bgcolor="<%=value_c%>">글번호</td>
    <td align="center" width="125"> <%=article.getNum()%></td>
    <td align="center" width="125" bgcolor="<%=value_c%>">조회수</td>
    <td align="center" width="125"> <%=article.getReadcount()%></td>
  </tr>
  <tr height="40">
    <td align="center" width="125" bgcolor="<%=value_c%>">작성자</td>
    <td align="center" width="125"> <%=article.getWriter()%></td>
    <td align="center" width="125" bgcolor="<%=value_c%>" >작성일</td>
    <td align="center" width="125"> <%= sdf.format(article.getReg_date()) %></td>
  </tr>
  <tr height="30">
    <td align="center" width="125" bgcolor="<%=value_c%>">글제목</td>
    <td align="center" width="375" colspan="3"> <%=article.getSubject()%></td>
  </tr>
  <tr height="40">
    <td align="center" width="125" bgcolor="<%=value_c%>">글내용</td>
    <td align="left" width="375" colspan="3"><pre><%=article.getContent()%></pre></td>
  </tr> 
  <tr>
  	<td colspan="4" align="center" height="30">
  		<input type="button" value="글수정" onclick="location.href='updateForm.jsp?num=<%=article.getNum()%>&pageNum=<%=pageNum%>'">  
  		<input type="button" value="글삭제" onclick="location.href='deleteForm.jsp?num=<%=article.getNum()%>&pageNum=<%=pageNum%>'">  
  		<input type="button" value="답글쓰기" 
  		onclick="location.href='replyForm.jsp?ref=<%=article.getRef()%>&re_step=<%=article.getRe_step()%>&re_level=<%=article.getRe_level()%>'">  
  		<input type="button" value="글목록" onclick="location.href='list.jsp?pageNum=<%=pageNum%>'">  
  </tr>
</table>  
</form>

6.writeForm.jsp(원글 작성)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@include file="color.jsp"%>
    <style type="text/css">
	body{
		text-align: center;
	}
	table{
		margin: auto;
	}
</style>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="script.js"></script>    
writeForm.jsp<br>
<body bgcolor="<%=bodyback_c%>">
		<b>글쓰기</b> <br>
		<form method="post" name="writeform" action="writePro.jsp" onsubmit="return writeSave()"> 
			<table width="430" border="1" cellspacing="0" cellpadding="0"
				bgcolor="<%=bodyback_c%>" align="center">
				<tr>
					<td align="right" colspan="2" bgcolor="<%=value_c%>">
						<a href="list.jsp"> 글목록</a>
					</td>
				</tr>
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">이 름</td>
					<td width="330" align="left">
					<input type="text" size="30" maxlength="10"	name="writer" 
							value="홍길동"></td>
				</tr>
				
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">제 목</td>
					<td width="330" align="left">					
						<input type="text" size="50" maxlength="50" name="subject" 
								value="어떤글">
					</td>
				</tr>
<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">Email</td>
					<td width="330" align="left">
					<input type="text" size="50" maxlength="30"	name="email" 
							value="aa@xx.com"></td>
				</tr>
				
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">내 용</td>
					<td width="330" align="left">
						<textarea name="content" id="abc" rows="13" cols="50">호호호</textarea>
					</td>
				</tr>
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">비밀번호</td>
					<td width="330" align="left">
						<input type="password" size="10" maxlength="12"	name="passwd"  
								value="1234">
					</td>
				</tr>
				<tr>
					<td colspan=2 bgcolor="<%=value_c%>" align="center" height="30">
						<input	type="submit" value="글쓰기"> 
						<input type="reset"	value="다시작성"> 
						<input type="button" value="목록보기"	
								OnClick="window.location='list.jsp'">
					</td>
				</tr>
			</table>	
		</form>

7.writePro.jsp(작성 처리)

<%@page import="java.sql.Timestamp"%>
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
writePro.jsp<br>
<%request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="bb" class="board.BoardBean"/>
<jsp:setProperty property="*" name="bb"/> 
<%
	BoardDao bdao=BoardDao.getInstance();
	bb.setReg_date(new Timestamp(System.currentTimeMillis())); 	
	bb.setIp(request.getRemoteAddr());
	int result = bdao.insertArticle(bb);
	String msg;
	String url;
	if(result>0){
		msg="삽입성공";
		url="list.jsp";
	} else{
		msg="삽입실패";
		url="writeForm.jsp";		
	}
%>
<script>
	alert("<%=msg%>");
	location.href="<%=url%>";

</script>

8.updateForm.jsp(수정하기)

<%@page import="board.BoardDao"%>
<%@page import="board.BoardBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
content.jsp => updateForm.jsp<br>
<% 
	BoardDao bdao=BoardDao.getInstance();
	String num=request.getParameter("num");
	BoardBean bb=bdao.updateGetArticle(num);
	String pageNum=request.getParameter("pageNum");
%>


<%@include file="color.jsp"%>
    <style type="text/css">
	body{
		text-align: center;
	}
	table{
		margin: auto;
	}
</style>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="script.js"></script>    
writeForm.jsp<br>
<body bgcolor="<%=bodyback_c%>">
		<b>글쓰기</b> <br>
		<form method="post" name="writeform" action="updatePro.jsp" onsubmit="return writeSave()">
		<input type="hidden" name="num" value="<%=bb.getNum()%>"> 
		<input type="hidden" name="pageNum" value="<%=pageNum%>"> 
			<table width="430" border="1" cellspacing="0" cellpadding="0"
				bgcolor="<%=bodyback_c%>" align="center">
				<tr>
					<td align="right" colspan="2" bgcolor="<%=value_c%>">
						<a href="list.jsp"> 글목록</a>
					</td>
				</tr>
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">이 름</td>
					<td width="330" align="left">
					<input type="text" size="30" maxlength="10"	name="writer" 
							value="<%=bb.getWriter()%>"></td>
				</tr>
				
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">제 목</td>
					<td width="330" align="left">					
						<input type="text" size="50" maxlength="50" name="subject" 
								value="<%=bb.getSubject()%>">
					</td>
				</tr>
<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">Email</td>
					<td width="330" align="left">
					<input type="text" size="50" maxlength="30"	name="email" 
							value="<%=bb.getEmail()%>"></td>
				</tr>
				
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">내 용</td>
					<td width="330" align="left">
						<textarea name="content" id="abc" rows="13" cols="50"><%=bb.getContent() %></textarea>
					</td>
				</tr>
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">비밀번호</td>
					<td width="330" align="left">
						<input type="password" size="10" maxlength="12"	name="passwd"  
								value="">
					</td>
				</tr>
				<tr>
					<td colspan=2 bgcolor="<%=value_c%>" align="center" height="30">
						<input	type="submit" value="글쓰기"> 
						<input type="reset"	value="다시작성"> 
						<input type="button" value="목록보기"	
								OnClick="window.location='list.jsp'">
					</td>
				</tr>
			</table>	
		</form>

9.updatePro.jsp(수정처리)

<%@page import="board.BoardBean"%>
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
updatePro.jsp<br>
<%request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="bb" class="board.BoardBean"/>
<jsp:setProperty property="*" name="bb"/>
<% 
	BoardDao bdao=BoardDao.getInstance();
	String pageNum=request.getParameter("pageNum");

	int result=bdao.updateArticle(bb);
	System.out.println(pageNum);
	String msg;
	String url;		
	if(result>0){
		msg="수정 완료";
		url="list.jsp?pageNum="+pageNum;
	} else if(result==-2){
		msg="비밀번호가 틀렸습니다.";
		url="updateForm.jsp?num="+bb.getNum()+"&pageNum="+pageNum;
	} else {
		msg="수정 실패.";
		url="updateForm.jsp?num="+bb.getNum()+"&pageNum="+pageNum;		
	}
	
%>
<script type="text/javascript">
	alert("<%=msg%>");
	location.href="<%=url%>";
</script>

10.replyForm.jsp(답글 쓰기)

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

<%@include file="color.jsp"%>
    <style type="text/css">
	body{
		text-align: center;
	}
	table{
		margin: auto;
	}
</style>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="script.js"></script>    
replyForm.jsp<br>
<%
	String ref=request.getParameter("ref");
	String re_step=request.getParameter("re_step");
	String re_level=request.getParameter("re_level");
	System.out.println(ref);
	System.out.println(re_step);
	System.out.println(re_level);
%>
<body bgcolor="<%=bodyback_c%>">
		<b>답글쓰기</b> <br>
		<form method="post" name="writeform" action="replyPro.jsp" onsubmit="return writeSave()">
		<input type="hidden" name="ref" value="<%=ref%>"> 
		<input type="hidden" name="re_step" value="<%=re_step%>"> 
		<input type="hidden" name="re_level" value="<%=re_level%>"> 		
			<table width="430" border="1" cellspacing="0" cellpadding="0"
				bgcolor="<%=bodyback_c%>" align="center">
				<tr>
					<td align="right" colspan="2" bgcolor="<%=value_c%>">
						<a href="list.jsp"> 글목록</a>
					</td>
				</tr>
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">이 름</td>
					<td width="330" align="left">
					<input type="text" size="30" maxlength="10"	name="writer" 
							value="홍길동"></td>
				</tr>
				
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">제 목</td>
					<td width="330" align="left">					
						<input type="text" size="50" maxlength="50" name="subject" 
								value="[답글]어떤글">
					</td>
				</tr>
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">Email</td>
					<td width="330" align="left">
					<input type="text" size="50" maxlength="30"	name="email" 
							value="aa@xx.com"></td>
				</tr>
				
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">내 용</td>
					<td width="330" align="left">
						<textarea name="content" id="abc" rows="13" cols="50">호호호</textarea>
					</td>
				</tr>
				<tr>
					<td width="100" bgcolor="<%=value_c%>" align="center">비밀번호</td>
					<td width="330" align="left">
						<input type="password" size="10" maxlength="12"	name="passwd"  
								value="1234">
					</td>
				</tr>
				<tr>
					<td colspan=2 bgcolor="<%=value_c%>" align="center" height="30">
						<input	type="submit" value="답글쓰기"> 
						<input type="reset"	value="다시작성"> 
						<input type="button" value="목록보기"	
								OnClick="window.location='list.jsp'">
					</td>
				</tr>
			</table>	
		</form>

11.replyPro.jsp(답글처리)

<%@page import="java.sql.Timestamp"%>
<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
replyPro.jsp<br> <!-- 입력한 정보 5개+부모3가지+(작성일+ip부가로 생성) -->
<%request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="bb" class="board.BoardBean"/>
<jsp:setProperty property="*" name="bb"/>
<%
	BoardDao bdao=BoardDao.getInstance();
	bb.setReg_date(new Timestamp(System.currentTimeMillis()));
	bb.setIp(request.getRemoteAddr());
	System.out.println("ref:"+bb.getRef());
	System.out.println("re_level:"+bb.getRe_level());
	System.out.println("re_step:"+bb.getRe_step());
	int result = bdao.replyArticle(bb);
	String msg;
	String url;
	if(result>0){
		msg="삽입성공";
		url="list.jsp";
	} else{
		msg="삽입실패";
		url="replyForm.jsp?ref="+bb.getRef()+"&re_step="+bb.getRe_step()+
				"&re_level="+bb.getRe_level();	
	} 
%>	
<script>
	alert("<%=msg%>");
	location.href="<%=url%>";
</script>

12.deleteForm.jsp(삭제하기)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
deleteForm.jsp<br>
<b>글삭제</b>
<%@include file="color.jsp"%> 
<%
	String num=request.getParameter("num");
	String pageNum=request.getParameter("pageNum");
%>
<style type="text/css">
	body{
		text-align: center;
	}
	table{
		margin: auto;
	}
</style> 
<script type="text/javascript">
	function deleteCheck(){
		if(document.myform.passwd.value==""){
			alert('비밀번호를 입력하세요.');
			document.myform.passwd.focus();
			return false;			
		}
	}
</script>   
<form name="myform" method="post" action="deletePro.jsp" onsubmit="return deleteCheck()">
	<input type="hidden" name="num" value="<%=num%>">
	<input type="hidden" name="pageNum" value="<%=pageNum%>">
	<table width="360" border="1" cellspacing="0" cellpadding="0"  
      bgcolor="<%=bodyback_c%>" align="center">
		<tr>
			<td colspan='4' align="center"  height="40" bgcolor="<%=title_c%>"><b>비밀번호를 입력해 주세요.</b></td>
		</tr>
		<tr>
			<td colspan='4' align="center" height="50" bgcolor="<%=value_c%>">비밀번호 : <input type="password" name="passwd"></td>
		</tr>
		<tr>
			<td colspan='4' align="center" height="40" bgcolor="<%=title_c%>"><input type="submit" value="글삭제">
			<input type="button" value="글목록" onclick="location.href='list.jsp?pageNum=<%=pageNum%>'"></td>
		</tr>
	</table>
</form>

13.deletePro.jsp(삭제처리)

<%@page import="board.BoardDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
deleteForm.jsp=>deletePro.jsp<br>
<% 
	String num=request.getParameter("num");
	int pageNum=Integer.parseInt(request.getParameter("pageNum"));
	String passwd=request.getParameter("passwd");
	BoardDao bdao=BoardDao.getInstance();
	int result= bdao.deleteArticle(num,passwd); 
	int count=bdao.getArticleCount();
	int pageCount=count/10+(count%10==0 ? 0 : 1);
	String msg;
	String url;		
	if(result>0){
		msg="삭제 완료";
		if(pageCount<pageNum){
			url="list.jsp?pageNum="+(pageNum-1);						
		} else {
			url="list.jsp?pageNum="+pageNum;
		}
	} else if(result==-2){
		msg="비밀번호가 틀렸습니다.";
		url="deleteForm.jsp?num="+num+"&pageNum="+pageNum;
	} else {
		msg="삭제 실패.";
		url="deleteForm.jsp?num="+num+"&pageNum="+pageNum;		
	}
	
%>
<script type="text/javascript">
	alert("<%=msg%>");
	location.href="<%=url%>";
</script>

14.color.jsp(css/style)

<% 
 String bodyback_c="#e0ffff";
 String back_c="#8fbc8f";
 String title_c="#5f9ea0";
 String value_c="#b0e0e6";
 String bar="#778899";
%>

15.script.js(무결성검사)

/**
 * script.js
 */
function writeSave(){
		if($('input[name=writer]').val()==""){
			alert('이름을 입력하세요');
			$('input[name=writer]').focus();
			return false;
		}	
		if($('input[name=subject]').val()==""){
			alert('제목을 입력하세요');
			$('input[name=subject]').focus();
			return false;
		}	
		if($('input[name=email]').val()==""){
			alert('이메일을 입력하세요');
			$('input[name=email]').focus();
			return false;
		}	
		if($('#abc').val()==""){
			alert('내용을 입력하세요');
			$('#abc').focus();
			return false;
		}	
		if($('input[name=passwd]').val()==""){
			alert('비밀번호를 입력하세요');
			$('input[name=passwd]').focus();
			return false;
		}	
	}

'Develop > JavaScript JQuery JSP' 카테고리의 다른 글

0808 JSP Servlet  (0) 2022.08.10
0805 XML,EL,JSTL  (0) 2022.08.10
0720 JSP JDBC로 만든 칼럼 추가 삭제  (0) 2022.07.22
0721 게시판의 구조 + ip주소 방식 설정  (0) 2022.07.22
0720 JSP  (0) 2022.07.22