@Controller
@RequiredArgsConstructor
@RequestMapping("/board/*")
@Log4j
public class BoardController {
private final BoardService service;
@GetMapping("/list")
public void list(Model model) {
log.info("list..............");
model.addAttribute("list", service.getList());
}
}
중요한것은
1. @RequestMapping
2. private final BoardService - @RequiredArgsConstructor
3. void, string 반환형
RequestMapping
Request 매핑으로 해당 url이 입력 되었을 때 해당 메소드를 실행 시킨다는 의미
위의 코드를 따르자면
/board/* : board로 들어오는 모든 url
/list : board/list에 해당하는 url이 요청될 시 수행
이라는 의미이다
@RequiredArgsConstructor
스프링 4.3부터는 Autowired로 의존성을 주입하는 것은 선호하지 않는다고한다
대신 생성자 주입을 권장하는데
lombok에서는 그러한 생성자 주입을 편하게 할 수 있는 어노테이션 @RequiredArgsConstructor 을 제공한다
https://upcake.tistory.com/417
https://madplay.github.io/post/why-constructor-injection-is-better-than-field-injection
컨트롤러의 반환형 void, string
@PostMapping("url") : Post로 받는 url 반드시 redirect가 필요하다
Post 방식 이후 URL 방식 처리
RedirectAttributes
@PostMapping("/register")
public String register(BoardVO board, RedirectAttributes rttr) {
log.info("board : " + board);
service.register(board);
// 처음 보낼 때 한번만 전송하는것
rttr.addFlashAttribute("result", 1);
// 계속 데이터가 남음
rttr.addAttribute("result2", 2);
return "redirect:/board/list";
}
redirect를 사용할 때 쓰는 클래스
@RequestParam
@PostMapping("/remove")
public String remove(@RequestParam("bno") Long bno, RedirectAttributes rttr) {
int count = service.remove(bno);
if(count == 1) {
rttr.addFlashAttribute("result", "Success");
}
return "redirect:/board/list";
}
@getParameter와 같은 메소드로써
@RequestParam("가져올 데이터의 이름") [데이터타입][가져온데이터를 담을 변수]
이런형태로 파라미터를 가져올 수 있다
Jquery cdn
<script src="https://code.jquery.com/jquery-3.6.0.min.js"
integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
crossorigin="anonymous"></script>
include
include는 jsp의 내용이 길어질 때 대표적으로 header, footer를 나누어서 jsp를 항상 적용시키는 방법
<%@ include file='jsp 파일 경로' %>