Controller -Java
boardFrontController
package kr.ac.daegu.jspmvc.controller;
import kr.ac.daegu.jspmvc.biz.*;
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;
import java.io.IOException;
@WebServlet("*.bbs") // jspmvc/*.bbs 으로 들어오는 모든 요청을 처리하는 서블릿
public class BoardFrontController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
String cmdURI = requestURI.substring(contextPath.length());
// log
System.out.println("requestURI = " + requestURI);
System.out.println("contextPath = " + contextPath);
System.out.println("cmdURI = " + cmdURI);
BoardCmd cmd = null;
String viewPage = null;
// 글 목록 조회 처리(/jspmvc/boardList.bbs)
if(cmdURI.equals("/boardList.bbs")){
cmd = new BoardListCmd();
cmd.execute(request, response);
viewPage = "view/boardList.jsp";
}
// 글 추가하기
if(cmdURI.equals("/boardInsert.bbs")){
// enduser가 작성한 글을 db에 insert 시키는
// bizness logic을 작성
cmd = new BoardInsertCmd();
cmd.execute(request, response);
viewPage = "boardList.bbs";
}
// 글 읽기
if(cmdURI.equals("/boardRead.bbs")){
cmd = new BoardReadCmd();
cmd.execute(request, response);
viewPage = "view/boardRead.jsp";
}
/*
* 수정하기 관련
* */
// 글의 패스워드 체크
if(cmdURI.equals("/boardPwdCheckToUpdate.bbs")){
cmd = new BoardPwdCheckCmd();
boolean isPasswordCorrect = cmd.execute(request, response);
if(isPasswordCorrect){
viewPage = "view/boardReadToUpdate.jsp";
} else {
viewPage = "view/boardPwdCheckFalse.jsp";
}
}
// 글 수정 처리
if(cmdURI.equals("/boardUpdate.bbs")){
// 글 수정처리 bizlogic
cmd = new BoardUpdateCmd();
cmd.execute(request, response);
// 바로 글 목록 화면으로
viewPage = "boardList.bbs";
}
/*
* 삭제하기 관련
* */
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPage);
dispatcher.forward(request, response);
}
}
Model -Java
boardDAO
package kr.ac.daegu.jspmvc.model;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
public class BoardDAO {
private static final String DB_URL = "jdbc:mariadb://localhost:3306/dgd";
private static final String DB_USER = "root";
private static final String DB_PW = "0000";
public static boolean getConnection() throws SQLException, ClassNotFoundException {
// Connection, PreparedStatement, ResultSet은 interface 객체이다.
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PW);
PreparedStatement pstmt = null;
ResultSet rs = null;
return true;
}
public ArrayList<BoardDTO> getBoardList() throws ClassNotFoundException, SQLException {
// Connection, PreparedStatement, ResultSet은 interface 객체이다.
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PW);
PreparedStatement pstmt = null;
ResultSet rs = null;
// 쿼리 준비 & db 쿼리
pstmt = conn.prepareStatement("select * from Board");
rs = pstmt.executeQuery();
// 글 목록을 반환할 ArrayList
ArrayList<BoardDTO> boardRowList = new ArrayList<BoardDTO>();
// db에서 데이터를 row단위로 가져와서
// list에 넣는다.
while(rs.next()) {
int id = rs.getInt("id");
String author = rs.getString("author");
String subject = rs.getString("subject");
String content = rs.getString("content");
Date writeDate = rs.getDate("writeDate");
Time writeTime = rs.getTime("writeTime");
int readCount = rs.getInt("readCount");
int commentCount = rs.getInt("commentCount");
BoardDTO dto = new BoardDTO();
dto.setId(id);
dto.setAuthor(author);
dto.setSubject(subject);
dto.setContent(content);
dto.setWriteDate(writeDate);
dto.setWriteTime(writeTime);
dto.setReadCount(readCount);
dto.setCommentCount(commentCount);
boardRowList.add(dto);
}
// db로부터 데이터 잘 들어왔는지 확인 (log 찍어봄)
for(BoardDTO dto: boardRowList){
System.out.println(dto.toString());
}
return boardRowList;
}
public int getBoardNewId() throws ClassNotFoundException, SQLException {
// Connection, PreparedStatement, ResultSet은 interface 객체이다.
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PW);
PreparedStatement pstmt = null;
ResultSet rs = null;
// newId를 가져오는 쿼리
pstmt = conn.prepareStatement("select max(id) + 1 AS newId from Board");
rs = pstmt.executeQuery();
int newId = 0;
if(rs.next()){
newId = rs.getInt("newId");
return newId;
}
// 예외 발생
throw new SQLException("글 컨텐츠를 새로 입력하기 위한 아이디값 받아오기를 실패하였습니다.");
}
public void insertBoardContent(int newId,
String subject,
String author,
String content,
String password) throws ClassNotFoundException, SQLException {
// Connection, PreparedStatement, ResultSet은 interface 객체이다.
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PW);
PreparedStatement pstmt = null;
// 쿼리 준비 & db 쿼리
// insert into board values (1, 'testAuthor', 'testSubject', 'testContent', CURDATE(), CURTIME(), 0, 0)
pstmt = conn.prepareStatement("insert into Board values (?, ?, ?, ?, CURDATE(), CURTIME(), 0, 0, ?)");
pstmt.setInt(1, newId);
pstmt.setString(2, subject);
pstmt.setString(3, author);
pstmt.setString(4, content);
pstmt.setString(5, password);
pstmt.executeUpdate();
}
public BoardDTO getBoardData(int id) throws ClassNotFoundException, SQLException {
// db에 접속해서
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PW);
PreparedStatement pstmt = null;
ResultSet rs = null;
// 쿼리 실행시키고
pstmt = conn.prepareStatement("select * from Board where id = ?");
pstmt.setInt(1, id);
rs = pstmt.executeQuery();
// 반환 데이터를 리턴.
BoardDTO data = new BoardDTO();
if(rs.next()){
// int id = rs.getInt("id");
String author = rs.getString("author");
String subject = rs.getString("subject");
String content = rs.getString("content");
Date writeDate = rs.getDate("writeDate");
Time writeTime = rs.getTime("writeTime");
int readCount = rs.getInt("readCount");
int commentCount = rs.getInt("commentCount");
String password = rs.getString("password");
data.setId(id);
data.setAuthor(author);
data.setSubject(subject);
data.setContent(content);
data.setWriteDate(writeDate);
data.setWriteTime(writeTime);
data.setReadCount(readCount);
data.setCommentCount(commentCount);
data.setPassword(password);
}
return data;
}
public void boardRowPlusReadCount(int rowId, int howMuch) throws ClassNotFoundException, SQLException {
// db에 접속해서
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PW);
PreparedStatement pstmt = null;
// 해당 아이디의 row에서 readCount를 +1 해주는 쿼리 실행
pstmt = conn.prepareStatement("update Board set readCount=readCount + ? where id = ?");
pstmt.setInt(1, howMuch);
pstmt.setInt(2, rowId);
pstmt.executeUpdate();
}
public void updateBoardContent(int id,
String subject,
String content) throws ClassNotFoundException, SQLException {
// db에 접속해서
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PW);
PreparedStatement pstmt = null;
// 해당 아이디의 row에서 subject와 content를 업데이트
pstmt = conn.prepareStatement("update Board set subject=?, content=? where id = ?");
pstmt.setString(1, subject);
pstmt.setString(2, content);
pstmt.setInt(3, id);
pstmt.executeUpdate();
}
}
boardDTO
package kr.ac.daegu.jspmvc.model;
import java.sql.Time;
import java.time.LocalDateTime;
import java.util.Date;
// db에서 Board테이블의 컬럼과 row를 정의.
public class BoardDTO {
private int id; // 글 id(글번호)
private String author; // 작성자 이름
private String subject; // 글 제목
private String content; // 글 컨텐츠
private Date writeDate; // 작성 날짜
private Time writeTime; // 작성 시간
private int readCount; // 조회수
private int commentCount; // 댓글 갯수
private String password; // 수정 삭제를 위한 패스워드
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
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 Date getWriteDate() {
return writeDate;
}
public void setWriteDate(Date writeDate) {
this.writeDate = writeDate;
}
public Time getWriteTime() {
return writeTime;
}
public void setWriteTime(Time writeTime) {
this.writeTime = writeTime;
}
public int getReadCount() {
return readCount;
}
public void setReadCount(int readCount) {
this.readCount = readCount;
}
public int getCommentCount() {
return commentCount;
}
public void setCommentCount(int commentCount) {
this.commentCount = commentCount;
}
@Override
public String toString() {
return "BoardDTO{" +
"id=" + id +
", author='" + author + '\'' +
", subject='" + subject + '\'' +
", content='" + content + '\'' +
", writeDate=" + writeDate +
", writeTime=" + writeTime +
", readCount=" + readCount +
", commentCount=" + commentCount +
'}';
}
}
biz -java
boardCmd
package kr.ac.daegu.jspmvc.biz;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
* *.bbs 로 들어오는 모든 요청의 비즈니스 로직을 담당.
* */
public interface BoardCmd {
public boolean execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException;
}
boardInsertCmd
package kr.ac.daegu.jspmvc.biz;
import kr.ac.daegu.jspmvc.model.BoardDAO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
public class BoardInsertCmd implements BoardCmd {
@Override
public boolean execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// enduser로부터 입력받은 데이터
int newId;
String subject = request.getParameter("subject");
String author = request.getParameter("author");
String content = request.getParameter("content");
String password = request.getParameter("password");
// enduser로부터 입력받은 데이터 잘 들어왔는지 확인 log
System.out.println("subject=" + subject);
System.out.println("author=" + author);
System.out.println("content=" + content);
System.out.println("password=" + password);
// db에 접근해서 데이터 가져오는 인스턴스
BoardDAO dao = new BoardDAO();
try {
// board 테이블에 들어갈 id값을 가져오기 : board.id중에서 가장 높은 id값 + 1
newId = dao.getBoardNewId();
// dao 기능 호출해서 enduser가 입력한 데이터를 insert
dao.insertBoardContent(newId, subject, author, content, password);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return true;
}
}
boardListCmd
package kr.ac.daegu.jspmvc.biz;
import kr.ac.daegu.jspmvc.model.BoardDAO;
import kr.ac.daegu.jspmvc.model.BoardDTO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
/*
* 글 목록 조회 요청이 들어왔을 때 DB에서 데이터를 가져옴
* view로 보낼 데이터 셋의 정의.
* */
public class BoardListCmd implements BoardCmd {
@Override
public boolean execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// db에 접근해서 데이터 가져오는 인스턴스
BoardDAO dao = new BoardDAO();
// dao 기능 호출해서 가져온 db 데이터를 저장하는 컬렉션
ArrayList<BoardDTO> list = new ArrayList<BoardDTO>();
try {
list = dao.getBoardList(); // 여기까지는 성공
/*
* 가져온 db 데이터 리스트를 어떻게 jsp로 보여줄것인가?
* */
request.setAttribute("boardRowList", list);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return true;
}
}
boardPwdCheckCmd
package kr.ac.daegu.jspmvc.biz;
import kr.ac.daegu.jspmvc.model.BoardDAO;
import kr.ac.daegu.jspmvc.model.BoardDTO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
public class BoardPwdCheckCmd implements BoardCmd {
@Override
public boolean execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("boardDataId"));
String userInputPassword = request.getParameter("password");
BoardDAO dao = new BoardDAO();
try {
// id값 기준 db board 테이블 조회하여 1개의 board 데이터row 가져옴.
BoardDTO selectedData = dao.getBoardData(id);
System.out.println("입력id, password=" + id + ", " + userInputPassword);
System.out.println("dbid, password=" + selectedData.getId() + ", " + selectedData.getPassword());
// client로부터 입력받은 패스워드와 board 데이터 row의 패스워드 비교
if(userInputPassword.equals(selectedData.getPassword())){
// 기존 글 내용 가져와서 보여주기
request.setAttribute("boardData", selectedData);
return true;
} else {
return false;
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return false;
}
}
BoardReadCmd
package kr.ac.daegu.jspmvc.biz;
import kr.ac.daegu.jspmvc.model.BoardDAO;
import kr.ac.daegu.jspmvc.model.BoardDTO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
public class BoardReadCmd implements BoardCmd {
@Override
public boolean execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// parsing
// 데이터의 형변환(참조형 -> 기본형)
// java wrapper class
int id = Integer.parseInt(request.getParameter("id"));
// db에 접근해서 데이터 가져오는 인스턴스
BoardDAO dao = new BoardDAO();
// dao의 기능중 id값으로 한건의 데이터를 담는 객체 준비.
BoardDTO boardData = new BoardDTO();
try {
// 조회수 +1
// boardRowPlusReadCount() : readCount 업데이트 해라, id : 어느 row의 id값인지?, 1 : 얼마나 업데이트 할건지?
dao.boardRowPlusReadCount(id, 1);
boardData = dao.getBoardData(id);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
// boardRead.jsp에 보여줄 데이터를 셋
request.setAttribute("boardData", boardData);
return true;
}
}
BoardUpdateCmd
package kr.ac.daegu.jspmvc.biz;
import kr.ac.daegu.jspmvc.model.BoardDAO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
public class BoardUpdateCmd implements BoardCmd {
@Override
public boolean execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 요청 파라미터들
int id = Integer.parseInt(request.getParameter("id"));
String subject = request.getParameter("subject");
String content = request.getParameter("content");
// db 접속하여 업데이트 쿼리 날림.
BoardDAO dao = new BoardDAO();
try {
dao.updateBoardContent(id, subject, content);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return true; // 의미없음
}
}
wapapp
boardInsert
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>글추가하기</title>
</head>
<body>
<form action="../boardInsert.bbs" method="post">
<table>
<tr>
<td colspan="2">글 추가하기</td>
</tr>
<tr>
<td><label for="subject">제목</label></td>
<td><input type="text" name="subject" id="subject"/></td>
</tr>
<tr>
<td><label for="author">작성자</label></td>
<td><input type="text" name="author" id="author"/></td>
</tr>
<tr>
<td><label for="content">내용</label></td>
<td><input type="text" name="content" id="content"/></td>
</tr>
<tr>
<td><label for="password">수정삭제비밀번호</label></td>
<td><input type="password" name="password" id="password"/></td>
</tr>
<tr>
<!--취소 버튼을 누르면 boardList.bbs 로 가도록 처리해 보시오-->
<td colspan="2"><input type="submit" value="[글쓰기]"/>
<a href="../boardList.bbs">[취소]</a></td>
</tr>
</table>
</form>
</body>
</html>
boardList
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- jstl -->
<html>
<head>
<title>전체 글 목록 보기</title>
</head>
<body>
<!-- BoardListCmd.java에서 가져온 데이터를 어떻게 jsp파일에서 html 형태로 보여줄 것인가? -->
<table>
<tr>
<td>글번호</td>
<td>작성자</td>
<td>제목</td>
<td>작성일</td>
<td>작성시각</td>
<td>조회수</td>
<td>댓글갯수</td>
</tr>
<!-- jstl if 태그를 써서 글번호가 짝수인 글의 목록만 보여주시오. -->
<c:forEach items="${boardRowList}" var="row">
<tr>
<td>${row.id}</td>
<td>${row.author}</td>
<td><a href="boardRead.bbs?id=${row.id}">${row.subject}</a></td><!-- 제목을 누르면 글 읽기에 해당하는 controller 요청-->
<td>${row.writeDate}</td>
<td>${row.writeTime}</td>
<td>${row.readCount}</td>
<td>${row.commentCount}</td>
</tr>
</c:forEach>
<tr>
<!-- boardInsert.jsp로 이동 되도록 처리 해 보시오. -->
<td colspan="7"><a href="/jspmvc/view/boardInsert.jsp">[글 추가하기]</a></td>
</tr>
</table>
</body>
</html>
boardPassword
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>수정할 비밀번호 입력</title>
</head>
<body>
<form action="../boardPwdCheck.bbs" method="post">
<input type="hidden" name="boardDataId" value="<%= request.getParameter("id")%>">
<table>
<tr>
<td><label for="password">비밀번호</label></td>
<td><input type="password" name="password" id="password"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="[확인]">[취소]
</td>
</tr>
</table>
</form>
</body>
</html>
boardPasswordToDelete
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
글 삭제를 위한 비밀번호 호출 화면입니다.
삭제처리 하는 controller url 호출 boardPwdCheckToDelete.bbs
비번 맞으면 delete처리 하고 boardList.bbs foward
틀리면 틀렸습니다 jsp출력
</body>
</html>
boardPasswordToUpdate
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>수정할 비밀번호 입력</title>
</head>
<body>
<form action="../boardPwdCheckToUpdate.bbs" method="post">
<input type="hidden" name="boardDataId" value="<%= request.getParameter("id")%>">
<table>
<tr>
<td><label for="password">비밀번호</label></td>
<td><input type="password" name="password" id="password"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="[확인]">[취소]
</td>
</tr>
</table>
</form>
</body>
</html>
boardPwdCheckFalse
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
글컨텐츠 수정/삭제를 위한 패스워드가 틀려서 제공하는 안내 화면 입니다.
<a href="boardList.bbs">[목록 보기]</a>
</body>
</html>
boardRead
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>글 읽기</title>
</head>
<body>
<!-- 글번호, 제목, 작성자, 내용, 작성일, 작성시각, 조회수(+1), 댓글수 -->
<table>
<tr>
<td>글번호</td>
<td>${boardData.id}</td>
</tr>
<tr>
<td>제목</td>
<td>${boardData.subject}</td>
</tr>
<tr>
<td>작성자</td>
<td>${boardData.author}</td>
</tr>
<tr>
<td>내용</td>
<td>${boardData.content}</td>
</tr>
<tr>
<td>작성일</td>
<td>${boardData.writeDate}</td>
</tr>
<tr>
<td>작성시각</td>
<td>${boardData.writeTime}</td>
</tr>
<tr>
<td>조회수</td>
<td>${boardData.readCount}</td>
</tr>
<tr>
<td>댓글수</td>
<td>${boardData.commentCount}</td>
</tr>
<tr>
<td colspan="2">
<a href="boardList.bbs">[글 목록 보기]</a>
<a href="./view/boardPasswordToUpdate.jsp?id=${boardData.id}">[수정하기]</a>
[삭제하기] <!-- ORDER : 패스워드 확인 하고 boardPasswordToDelete.jsp -->
</td>
</tr>
</table>
<!-- [글 목록 보기][수정하기][삭제하기] 글 목록보기 클릭하면 boardList.bbs로 foward -->
글 읽기 화면입니다.
</body>
</html>
boardReadToUpdate
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
글컨텐츠 수정/삭제를 위한 패스워드가 일치하여 제공하는 글 수정 화면 입니다.
<form action="boardUpdate.bbs" method="post">
<input type="hidden" name="id" value="${boardData.id}">
<table>
<tr>
<td>글번호</td>
<td>${boardData.id}</td>
</tr>
<tr>
<td><label for="subject">제목</label></td>
<td><input type="text" name="subject" id="subject" value="${boardData.subject}"></td>
</tr>
<tr>
<td>작성자</td>
<td>${boardData.author}</td>
</tr>
<tr>
<td><label for="content">내용</label></td>
<td><input type="text" name="content" id="content" value="${boardData.content}"></td>
</tr>
<tr>
<td>작성일</td>
<td>${boardData.writeDate}</td>
</tr>
<tr>
<td>작성시각</td>
<td>${boardData.writeTime}</td>
</tr>
<tr>
<td>조회수</td>
<td>${boardData.readCount}</td>
</tr>
<tr>
<td>댓글수</td>
<td>${boardData.commentCount}</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="[수정하기]">
<a href="boardList.bbs">[취소하기]</a>
</td>
</tr>
</table>
</form>
</body>
</html>
'ETC > JSP' 카테고리의 다른 글
2- JSP 게시판 (게시글의 댓글갯수) (0) | 2021.08.31 |
---|---|
1- Jsp 게시판 (댓글기능) (0) | 2021.08.30 |
JSP- FileUpload1 (0) | 2021.08.24 |
JSP- forward 와 Redirect Test (0) | 2021.08.22 |
Jsp- sessionLogin (0) | 2021.08.18 |