게시판의 클래스 작업을 진행할 것이다.
BoardDTO
package com.mystory001.domain;
import java.sql.Timestamp;
public class BoardDTO {
private int no;
private String id;
private String subject;
private String content;
private Timestamp writetime;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
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 Timestamp getWritetime() {
return writetime;
}
public void setWritetime(Timestamp writetime) {
this.writetime = writetime;
}
}
다음으로 Controller와 Service, DAO 그리고 mapper 파일에 어노테이션부터 넣고 시작하려고 한다.
BoardController
package com.mystory001.controller;
import javax.inject.Inject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.mystory001.service.BoardService;
@Controller
@RequestMapping("/board/*")
public class BoardController {
@Inject
private BoardService boardService;
}
@RequestMapping
MemberController와 달리 @RequestMapping 어노테이션이 추가되었다. 이 어노테이션이 무엇인지 먼저 찾아보자.
docs.spring.io에서 찾을 수 있었다. @RequestMapping을 사용하여 요청을 컨트롤러 메소드에 매핑할 수 있다. URL, HTTP, 메소드, 요청 매개 변수, 헤더 및 미디어 유형별로 일치시킬 수 있는 다양한 속성이 있다. 클래스 수준에서 공유 매핑을 표현하거나 메소드 수준에서 특정 엔드 포인트 매핑으로 좁힐 수 있다.
내가 이해한 것을 설명하자면 경로가 같고 파일명이 다른 파일을 한 번 경로를 설정함으로써 또 작성하지 않게 해줄 수 있다?로 볼 수 있을까 @RequestMapping("/board")를 써줌으로써 @GetMapping/@PostMapping에()안에 "board/"를 작성해주지 않아도 된다.
더 자세히 정확히 하나라도 알아가야 하므로 열심히 블로그들을 찾아보았다. 그 결과 아주 정리가 잘 된 블로그를 찾았다. https://backendcode.tistory.com/227 여기를 참고하였다. 위치에 따라 역할이 조금 다르다. 메소드와 클래스에 붙일 수 있다. 지금처럼 클래스에 붙였을 때는 공통되는 URL이 있을 때 메소드에 중복되는 value 값을 없앨 수 있다.
BoardService
package com.mystory001.service;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import com.mystory001.dao.BoardDAO;
@Service
public class BoardService {
@Inject
private BoardDAO boardDAO;
}
BoardDAO
package com.mystory001.dao;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
@Repository
public class BoardDAO {
@Inject
private SqlSession sqlSession;
private static final String namespace = "com.mystory001.mappers.boardMapper";
}
boardMapper
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mystory001.mappers.boardMapper">
</mapper>
기본적인 클래스 작업은 끝났다.
글쓰기 주소 매핑하고 insert 페이지를 봤는데(따로 확인은 안 함.. 대략적으로 이런 느낌이겠지 하고 만들어만 둠) 생각보다 만족스러움
제목이랑 내용이 너무 붙어 있어 한 칸이나 두 칸 줄 바꾸기 하고 placeholder 속성을 이용하고 제목 : 내용 : 을 삭제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>그냥 게시판</title>
</head>
<style>
.container{
align-content : center;
width: 1200px;
height: 600px;
}
.content{
width: 1000px;
height: 600px;
}
</style>
<body>
<div class="container"> <%-- container 영역 div --%>
<jsp:include page="../inc/top.jsp" />
<jsp:include page="../inc/sidebar.jsp" />
<div class="content"> <%-- content영역 div --%>
<h1>게시 글 작성</h1>
<form>
<input type="text" name="subject" placeholder="제목을 작성해주세요"><br><br>
<textarea rows="10" cols="50" name="content" placeholder="내용을 입력해주세요."></textarea><br><br>
<input type="submit" value="작성하기">
</form>
</div> <%-- content영역 div --%>
<jsp:include page="../inc/footer.jsp" />
</div> <%-- container 영역 div --%>
</body>
</html>
작성하기를 누르면 글 번호가 매겨지고 작성 시간은 알아서 매겨질 것이다. 글 번호를 어떻게 매겨야 할까? 떠오르는 방법은 사실 DB에 board 테이블에 no를 auto-increment 속성을 넣어주면 될 것 같다는 생각이 든다. 교육받을 때는 다른 방법으로 한 것 같은데 기억이 안 난다. 프로젝트 때도 auto-increment속성을 사용해서 그런 것 같다. 교육받을 때는 HttpSession 객체와 Model 객체를 이용해서 나타냄. Model 객체도 좀 알아보고 넘어가야 할 것 같다.
Model 객체
MVC 아키텍처에서 View와 Controller 간 데이터 전달을 담당하는 객체. 로직의 결과를 담아 View에 전달하거나, 사용자 입력을 받아 Controller에 전달하는 역할을 함.
K-V 쌍의 컨테이너로 사용됨. Controller에서 데이터를 Model에 저장하고, 이를 View에 전달하여 동적으로 생성되는 웹 페이지를 생성함.
//Controller
@GetMapping("/main")
public String main(Model model){
String str = "Model 객체";
model.addAttribute("str", str);
return "main";
}
//main.jsp
(...생략...)
<h1>${str}</h1>
(...생략...)
${str} 표현식을 이용해 Model에 저장된 데이터를 사용할 수 있을 것이다. main.jsp에서 "Model 객체"라는 것이 표시될 것이다.
즉, Model 객체는 Controller과 View 간의 데이터 전달을 쉽게 처리하기 위한 중간 매개체로 사용됨
출처 : https://iknowandyouknow.tistory.com/entry/JAVA-spring-model-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
BoardController
package com.mystory001.controller;
import java.util.List;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.mystory001.domain.BoardDTO;
import com.mystory001.service.BoardService;
@Controller
@RequestMapping("/board/*")
public class BoardController {
@Inject
private BoardService boardService;
/* 게시판 글 들고오기 */
@GetMapping("/")
public String main(HttpServletRequest request, Model model) {
System.out.println("BoardController main()");
List<BoardDTO> boardList = boardService.getBoardList(); //게시물
return "/";
}
/* 글쓰기 */
@GetMapping("/insert")
public String insert() {
System.out.println("BoardController");
return "board/insert";
}
@PostMapping("/insertPro")
public String insertPro() {
return "";
}
}
BoardService
package com.mystory001.service;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import com.mystory001.dao.BoardDAO;
import com.mystory001.domain.BoardDTO;
@Service
public class BoardService {
@Inject
private BoardDAO boardDAO;
public List<BoardDTO> getBoardList() {
System.out.println("BoardService getBoardList()");
return boardDAO.getBoardList();
}
}
BoardDAO
package com.mystory001.dao;
import java.util.List;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
import com.mystory001.domain.BoardDTO;
@Repository
public class BoardDAO {
@Inject
private SqlSession sqlSession;
private static final String namespace = "com.mystory001.mappers.boardMapper";
public List<BoardDTO> getBoardList() {
System.out.println("BoardDAO getBoardList()");
return sqlSession.selectList(namespace+".getBoardList");
}
}
boardMapper
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mystory001.mappers.boardMapper">
<select id="getBoardList" resultType="com.mystory001.domain.BoardDTO">
select *
from board
</select>
</mapper>
남은 작업 insert, update, delete 마무리 하기
'organize > 프로젝트' 카테고리의 다른 글
justBoard10 마무리 (5) | 2024.09.30 |
---|---|
justBoard9 (1) | 2024.09.29 |
justBoard7 member 마무리, board 준비 (1) | 2024.09.26 |
justBoard6 member (2) | 2024.09.25 |
justBoard5 화면(view)2 (0) | 2024.09.24 |