IT&코딩/자바 프로젝트
자바 프로젝트 12일차 - Spring 2 (springBoard)
솔론
2023. 2. 5. 00:55
728x90
반응형
■ board.dto package
□ BoardDTO.java
package board.dto;
public class BoardDTO {
private int num;
private String writer;
private String email;
private String subject;
private String passwd;
private String reg_date;
private int readcount;
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 String getReg_date() {
return reg_date;
}
public void setReg_date(String reg_date) {
this.reg_date = reg_date;
}
public int getReadcount() {
return readcount;
}
public void setReadcount(int readcount) {
this.readcount = readcount;
}
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;
}
}
■ board.dao package
□ BoardDAO.java (인터페이스)
package board.dao;
import java.util.List;
import board.dto.BoardDTO;
public interface BoardDAO {
public List<BoardDTO> listBoard();
public BoardDTO getBoard(int num, String mode);
public int insertBoard(BoardDTO dto);
public int deleteBoard(int num, String passwd);
public int updateBoard(BoardDTO dto);
}
□ BoardDAOImpl.java
package board.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import board.dto.BoardDTO;
public class BoardDAOImpl implements BoardDAO {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
class MyRowMapper implements RowMapper<BoardDTO>{
@Override
public BoardDTO mapRow(ResultSet rs, int co) throws SQLException {
BoardDTO dto = new BoardDTO();
dto.setNum(rs.getInt("num"));
dto.setWriter(rs.getString("writer"));
dto.setEmail(rs.getString("email"));
dto.setSubject(rs.getString("subject"));
dto.setPasswd(rs.getString("passwd"));
dto.setReg_date(rs.getString("reg_date"));
dto.setReadcount(rs.getInt("readcount"));
dto.setContent(rs.getString("content"));
dto.setIp(rs.getString("ip"));
return dto;
}
}
private MyRowMapper mapper = new MyRowMapper();
@Override
public List<BoardDTO> listBoard() {
String sql = "select * from board order by num desc";
return jdbcTemplate.query(sql, mapper);
}
@Override
public BoardDTO getBoard(int num, String mode) {
if(mode.equals("content")){
String sql = "update board set readcount = readcount + 1 where num = ?";
jdbcTemplate.update(sql, num);
}
String sql = "select * from board where num = ?";
BoardDTO dto = jdbcTemplate.queryForObject(sql, mapper, num);
return dto;
}
@Override
public int insertBoard(BoardDTO dto) {
String sql = "insert into board values(board_seq.nextval, ?,?,?,?,sysdate,0,?,?)";
Object[] values = new Object[] {dto.getWriter(), dto.getEmail(),
dto.getSubject(), dto.getPasswd(), dto.getContent(), dto.getIp()};
return jdbcTemplate.update(sql, values);
}
@Override
public int deleteBoard(int num, String passwd) {
BoardDTO dto = getBoard(num, "password");
if(dto.getPasswd().equals(passwd)){
String sql = "delete from board where num = ?";
return jdbcTemplate.update(sql, num);
}
return -1;
}
@Override
public int updateBoard(BoardDTO dto) {
BoardDTO bdto = getBoard(dto.getNum(), "password");
if (dto.getPasswd().equals(bdto.getPasswd())) {
String sql = "update board set writer=?, email=?, "
+ "subject=?, content=? where num = ?";
Object[] values = new Object[] {dto.getWriter(), dto.getEmail(),
dto.getSubject(), dto.getContent(), dto.getNum()};
return jdbcTemplate.update(sql, values);
}
return -1;
}
}
■ board.controller package
□ ListBoardController.java
package board.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import board.dao.BoardDAO;
import board.dto.BoardDTO;
public class ListBoardController implements Controller {
private BoardDAO boardDAO;
public void setBoardDAO(BoardDAO boardDAO) {
this.boardDAO = boardDAO;
}
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
List<BoardDTO> list = boardDAO.listBoard();
return new ModelAndView("list", "listBoard", list);
}
}
□ WriteFormBoardController.java
package board.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class WriteFormBoardController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
return new ModelAndView("writeForm");
}
}
□ WriteProBoardAbstractCommandController.java
package board.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;
import board.dao.BoardDAO;
import board.dto.BoardDTO;
public class WriteProBoardAbstractCommandController extends AbstractCommandController {
private BoardDAO boardDAO;
public void setBoardDAO(BoardDAO boardDAO) {
this.boardDAO = boardDAO;
}
@Override
protected ModelAndView handle(HttpServletRequest req, HttpServletResponse arg1, Object arg2, BindException arg3)
throws Exception {
BoardDTO dto = (BoardDTO)arg2;
dto.setIp(req.getRemoteAddr());
int res = boardDAO.insertBoard(dto);
ModelAndView mav = new ModelAndView();
if (res>0) {
mav.addObject("msg", "게시글등록 성공!! 게시글목록페이지로 이동합니다.");
mav.addObject("url", "list_board.do");
}else {
mav.addObject("msg", "게시글등록 실패!! 게시글등록페이지로 이동합니다.");
mav.addObject("url", "writeForm_board.do");
}
mav.setViewName("forward:message.jsp");
return mav;
}
}
□ ContentBoardController.java
package board.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import board.dao.BoardDAO;
import board.dto.BoardDTO;
public class ContentBoardController implements Controller {
private BoardDAO boardDAO;
public void setBoardDAO(BoardDAO boardDAO) {
this.boardDAO = boardDAO;
}
@Override
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse arg1) throws Exception {
int num = ServletRequestUtils.getIntParameter(req , "num");
BoardDTO dto = boardDAO.getBoard(num, "content");
return new ModelAndView("content", "getBoard", dto);
}
}
□ DeleteFormBoardController.java
package board.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class DeleteFormBoardController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse arg1) throws Exception {
return new ModelAndView("deleteForm");
}
}
□ DeleteProBoardController.java
package board.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import board.dao.BoardDAO;
public class DeleteProBoardController implements Controller {
private BoardDAO boardDAO;
public void setBoardDAO(BoardDAO boardDAO) {
this.boardDAO = boardDAO;
}
@Override
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse arg1) throws Exception {
int num = ServletRequestUtils.getIntParameter(req , "num");
String passwd = req.getParameter("passwd");
int res = boardDAO.deleteBoard(num, passwd);
ModelAndView mav = new ModelAndView("forward:message.jsp");
if (res > 0) {
mav.addObject("msg", "게시글삭제 성공!! 게시글목록페이지로 이동합니다.");
mav.addObject("url", "list_board.do");
} else if(res < 0) {
req.setAttribute("msg", "비밀번호가 틀렸습니다.!! 다시 입력해주세요.");
req.setAttribute("url", "deleteForm_board.do?num=" + num);
} else {
req.setAttribute("msg", "게시글삭제 실패!! 글보기페이지로 이동합니다.");
req.setAttribute("url", "content_board.do?num" + num);
}
// req나 mav에 집어넣는 게 사실상 같다.
return mav;
}
}
□ UpdateFormBoardController.java
package board.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import board.dao.BoardDAO;
import board.dto.BoardDTO;
public class UpdateFormBoardController implements Controller {
private BoardDAO boardDAO;
public void setBoardDAO(BoardDAO boardDAO) {
this.boardDAO = boardDAO;
}
@Override
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse arg1) throws Exception {
int num = ServletRequestUtils.getIntParameter(req, "num");
BoardDTO dto = boardDAO.getBoard(num, "update");
return new ModelAndView("updateForm", "getBoard", dto);
}
}
□ UpdateProBoardAbstractCommandController.java
package board.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;
import board.dao.BoardDAO;
import board.dto.BoardDTO;
public class UpdateProBoardAbstractCommandController extends AbstractCommandController {
private BoardDAO boardDAO;
public void setBoardDAO(BoardDAO boardDAO) {
this.boardDAO = boardDAO;
}
@Override
protected ModelAndView handle(HttpServletRequest req, HttpServletResponse arg1, Object arg2, BindException arg3)
throws Exception {
BoardDTO dto = (BoardDTO)arg2;
int res = boardDAO.updateBoard(dto);
ModelAndView mav = new ModelAndView("forward:message.jsp");
if (res>0) {
mav.addObject("msg", "글수정 성공!! 글목록페이지로 이동합니다.");
mav.addObject("url", "list_board.do");
}else if (res<0) {
req.setAttribute("msg", "비밀번호가 틀렸습니다. 다시 입력해 주세요!!");
req.setAttribute("url", "updateForm_board.do?num="+ dto.getNum());
}else {
req.setAttribute("msg", "글수정 실패!! 글보기페이지로 이동합니다.");
req.setAttribute("url", "content_board.do?num="+ dto.getNum());
}
return mav;
}
}
■ WebContent
□ index.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!-- index.jsp -->
<html>
<head>
<title>게시판</title>
</head>
<body>
<h1 align="center">스프링으로 연습하는 게시판</h1>
<ul>
<li><a href="list_board.do">게시판으로 가기</a>
</ul>
</body>
</html>
□ message.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!-- message.jsp -->
<script type="text/javascript">
alert("${msg}")
location.href="${url}"
</script>
■ WEB-INF/board
□ list.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- list.jsp -->
<html>
<head>
<title>글목록</title>
</head>
<body>
<div align="center">
<b>글 목 록</b>
<table border="0" width="800">
<tr bgcolor="yellow">
<td align="right"><a href="writeForm_board.do">글쓰기</a></td>
</tr>
</table>
<table border="1" width="800">
<tr bgcolor="green">
<th>번호</th>
<th width="30%">제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회</th>
<th>IP</th>
</tr>
<c:if test="${empty listBoard}">
<tr>
<td colspan="6">등록된 게시글이 없습니다.</td>
</tr>
</c:if>
<c:forEach var="dto" items="${listBoard}">
<tr>
<td>${dto.num}</td>
<td><a href="content_board.do?num=${dto.num}">${dto.subject}</a></td>
<td>${dto.writer}</td>
<td>${dto.reg_date}</td>
<td>${dto.readcount}</td>
<td>${dto.ip}</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
□ writeForm.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!-- writeForm.jsp -->
<html>
<head>
<title>글쓰기</title>
<script type="text/javascript">
function check(){
if (f.writer.value==""){
alert("이름을 입력해 주세요!!")
f.writer.focus()
return false
}
if (f.subject.value==""){
alert("제목을 입력해 주세요!!")
f.subject.focus()
return false
}
if (f.content.value==""){
alert("내용을 입력해 주세요!!")
f.content.focus()
return false
}
if (f.passwd.value==""){
alert("비밀번호를 입력해 주세요!!")
f.passwd.focus()
return false
}
return true
}
</script>
</head>
<body>
<div align="center">
<form name="f" action="writePro_board.do" method="post" onsubmit="return check()">
<table border="1" width="500">
<tr bgcolor="yellow">
<td colspan="2" align="center">글 쓰 기</td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">이 름</th>
<td><input type="text" name="writer"></td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">제 목</th>
<td><input type="text" name="subject" size="50"></td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">Email</th>
<td><input type="text" name="email" size="50"></td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">내 용</th>
<td><textarea name="content" rows="11" cols="50"></textarea></td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">비밀번호</th>
<td><input type="password" name="passwd"></td>
</tr>
<tr bgcolor="yellow">
<td colspan="2" align="center">
<input type="submit" value="글쓰기">
<input type="reset" value="다시작성">
<input type="button" value="목록보기" onclick="window.location='list_board.do'">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
□ content.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!-- content.jsp -->
<html>
<head>
<title>글내용</title>
</head>
<body>
<div align="center">
<b>글내용 보기</b><br><br>
<table border="1" width="600">
<tr>
<th width="20%" bgcolor="yellow">글번호</th>
<td align="center" width="30%">${getBoard.num}</td>
<th width="20%" bgcolor="yellow">조회수</th>
<td align="center" width="30%">${getBoard.readcount}</td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">작성자</th>
<td align="center" width="30%">${getBoard.writer}</td>
<th width="20%" bgcolor="yellow">작성일</th>
<td align="center" width="30%">${getBoard.reg_date}</td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">글제목</th>
<td colspan="3">${getBoard.subject}</td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">글내용</th>
<td colspan="3">${getBoard.content}</td>
</tr>
<tr bgcolor="yellow">
<td colspan="4" align="right">
<input type="button" value="글수정"
onclick="window.location='updateForm_board.do?num=${getBoard.num}'">
<input type="button" value="글삭제"
onclick="window.location='deleteForm_board.do?num=${getBoard.num}'">
<input type="button" value="목록보기" onclick="window.location='list_board.do'">
</td>
</tr>
</table>
</div>
</body>
</html>
□ deleteForm.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!-- deleteForm.jsp -->
<html>
<head>
<title>글삭제</title>
</head>
<body>
<div align="center">
<B>글삭제</B><br><br>
<form name="f" action="deletePro_board.do" method="post">
<input type="hidden" name="num" value="${param.num}"/>
<table border="1" width="300">
<tr bgcolor="yellow">
<th>비밀번호를 입력해 주세요.</th>
</tr>
<tr>
<td align="center">비밀번호 : <input type="password" name="passwd"></td>
</tr>
<tr>
<td align="center">
<input type="submit" value="글삭제">
<input type="button" value="목록보기" onclick="window.location='list_board.do'">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
□ updateForm.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!-- updateForm.jsp -->
<html>
<head>
<title>글수정</title>
<script type="text/javascript">
function check(){
if (f.writer.value==""){
alert("이름을 입력해 주세요!!")
f.writer.focus()
return false
}
if (f.subject.value==""){
alert("제목을 입력해 주세요!!")
f.subject.focus()
return false
}
if (f.content.value==""){
alert("내용을 입력해 주세요!!")
f.content.focus()
return false
}
if (f.passwd.value==""){
alert("비밀번호를 입력해 주세요!!")
f.passwd.focus()
return false
}
return true
}
</script>
</head>
<body>
<div align="center">
<form name="f" action="updatePro_board.do" method="post" onsubmit="return check()">
<h3>글수정</h3>
<input type="hidden" name="num" value="${getBoard.num}"/>
<table border="1" width="500">
<tr>
<th width="20%" bgcolor="yellow">이 름</th>
<td><input type="text" name="writer" value="${getBoard.writer}"></td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">제 목</th>
<td><input type="text" name="subject" size="50" value="${getBoard.subject}"></td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">Email</th>
<td><input type="text" name="email" size="50" value="${getBoard.email}"></td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">내 용</th>
<td><textarea name="content" rows="11" cols="50">${getBoard.content}</textarea></td>
</tr>
<tr>
<th width="20%" bgcolor="yellow">비밀번호</th>
<td><input type="password" name="passwd"></td>
</tr>
<tr bgcolor="yellow">
<td colspan="2" align="center">
<input type="submit" value="글수정">
<input type="reset" value="다시작성">
<input type="button" value="목록보기" onclick="window.location='list_board.do'">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
□ web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>board</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>board</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>euc-kr</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
□ board-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix"><value>WEB-INF/board/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="web01"/>
<property name="password" value="web01"/>
</bean>
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="boardDAO" class="board.dao.BoardDAOImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean name="/list_board.do" class="board.controller.ListBoardController">
<property name="boardDAO" ref="boardDAO"/>
</bean>
<bean name="/writeForm_board.do" class="board.controller.WriteFormBoardController">
</bean>
<bean name="/writePro_board.do" class="board.controller.WriteProBoardAbstractCommandController">
<property name="boardDAO" ref="boardDAO"/>
<property name="commandClass" value="board.dto.BoardDTO"/>
<property name="commandName" value="boardCmd"/>
</bean>
<bean name="/content_board.do" class="board.controller.ContentBoardController">
<property name="boardDAO" ref="boardDAO"/>
</bean>
<bean name="/deleteForm_board.do" class="board.controller.DeleteFormBoardController">
</bean>
<bean name="/deletePro_board.do" class="board.controller.DeleteProBoardController">
<property name="boardDAO" ref="boardDAO"/>
</bean>
<bean name="/updateForm_board.do" class="board.controller.UpdateFormBoardController">
<property name="boardDAO" ref="boardDAO"/>
</bean>
<bean name="/updatePro_board.do"
class="board.controller.UpdateProBoardAbstractCommandController">
<property name="boardDAO" ref="boardDAO"/>
<property name="commandClass" value="board.dto.BoardDTO"/>
<property name="commandName" value="boardCmd"/>
</bean>
</beans>
* 라이브러리
- 전부 사용하는것은 아니다.
728x90
반응형