화면은 나중에 처리하는 것보다 전체 디자인이 반영된 상태에서 개발하는 것이 낫다고 생각해 게시판 디자인은 시간을 아끼고자 무료 템플릿 사이트에서 적용했다.
사용한 무료 템플릿 사이트 👉 https://startbootstrap.com/
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
➡️jstl사용을 위해 라이브러리를 추가해준다.
<c:set var="contextPath" value="${pageContext.request.contextPath }"/>
➡️해당 경로를 잡아줄 코드도 추가
<table>
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>조회수</th>
<th>작성일자</th>
</tr>
</thead>
<tbody>
<c:forEach items="" var="">
게시글이 반볼될 부분
</c:forEach>
</tbody>
</table>
<div>
<a href="${contextPath }/board/write">
<input type="button" value="글쓰기" class="btn btn-xs pull-right" style= "font-size: 17px; ">
</a>
</div>
➡️필요한 코드만 남기고 나머지는 지우기
💡개인적으로 파일들을 순서대로 만드는 것이 덜 헷갈리는 방법 같다.
- DTO(VO)
- contoller
- service/serviceImpl
- dao
- mapper
전에 작성한 내용과 같은 dto에 getter
, setter
를 추가한다.
public class boardDTO {
private int writeNum;
private String title;
private String content;
private String regDate;
private int hitNum;
private String imgFile;
private String writer;
}
getter,setter
를 추가하는 방법
1.마우스 우클릭 - source
- generate getters and setters
2.Alt
+ Shift
+ s
- generate getters and setters
.
이 나오기 때문에 형태를 변경해주어야 한다. public void setRegDate(java.sql.Timestamp regDate) {
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
this.regDate = format.format(regDate);
}
✂️변경 전
✂️변경 후
@Controller
을 사용해서 빈을 등록한다.@RequestMapping
은 컨트롤러에서 들어온 요청을 특정 메서드와 매핑하기 위해 사용하는데 여기서 공통적으로 board를 쓰고 있어서 반복을 줄이기 위해 사용했다.@Autowired
로 service를 자동 주입 함으로서 연결해준다. @Controller
@RequestMapping("board")
public class boardController{
@Autowired boardService bs;
@GetMapping("list")
public String board(HttpSession session, Model model, @RequestParam(required = false,defaultValue="1") {
bs.boardList(model);
if(session.getAttribute(LOGIN) != null) {
return "board/list";
}
return "member/login";
}
@GetMapping
을 써준다.HttpSession
을 불러왔다. 게시판 목록은 단순 리스트를 보여주는 부분이라 안써도 괜찮다.Model
을 쓰고, @RequestParam
을 사용해서 db에 저장된 모든 값을 가져오고 값이 없다면 default값으로 1을 준다.public interface boardService {
public void boardList(Model model);
}
@Service
어노테이션을 사용해서 등록한다.@Autowired
로 mapper
로 연결해준다.@Service
public class boardServiceImpl implements boardService {
@Autowired BoardMapper mapper;
public void boardList(Model model) {
model.addAttribute("boardList", mapper.boardList);
}
public interface BoardMapper {
public java.util.List<boardDTO> boardList;
}
List
배열을 사용하고 dto
를 받아준다.<mapper namespace="com.care.board.mybatis.board.BoardMapper">
<resultMap type="com.care.board.board.dto.boardDTO" id="boardAllList">
<id property="writeNum" column="write_num" />
<result property="title" column="title" />
<result property="content" column="content" />
<result property="regDate" column="regDate" />
<result property="hitNum" column="hit" />
<result property="imgFile" column="img_file" />
<result property="writer" column="writer" />
</resultMap>
<select id="boardList" resultMap="boardAllList">
select * from talk_board
</select>
</mapper>
namespace
에 매퍼의 경로를 설정한다.<resultMap type>
은 dto 패키지명, id
는 type을 부를 명으로 작성한다.dto
와 sql
매핑 작업을 해주어야 하는데 id
는 프라이머리키로 property
는 dto명 , column
은 sql 컬럼명을 의미한다.<select>
는 데이터를 조회 때 사용하는 구문으로 id
는 구문을 찾기위한 유일한 구분자이다. <table>
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>조회수</th>
<th>작성일자</th>
</tr>
</thead>
<c:forEach items="${boardList}" var="dto">
<tr class="odd gradeX">
<td>${dto.writeNum }</td>
<td><a href="${contextPath }/board/writeView?writeNum=${dto.writeNum}"> ${dto.title }</a></td>
<td>${dto.writer }</td>
<td>${dto.hitNum }</td>
<td>${dto.regDate }</td>
</tr>
</c:forEach>
</table>
<c:forEach items="${boardList}" var="dto">
로 반복문을 사용했다.var
을 지정해 데이터를 가져온다.