Spirng 복습 2일차
차근차근 알아보자
부산 itwillbs 수업을 토대로 작성
HomeController(콘트롤러) 를 좀 더 이해해보자
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
// return "index"; // webapp/WEB-INF/views/index.jsp
// return "test/main"; // webapp/WEB-INF/views/test/main.jsp
}
}
위 콘트롤러 코드를 분석해볼려고 한다.
@Controller
public class HomeController {
Handles requests for the application home page.
웹 요청들을 처리하기 위한 홈페이지 역할을 수행하는 클래스(= 컨트롤러)
=> 반드시 클래스 선언부 이해 @Controller 어노테이션 붙임
=> 컨트롤러 클래스 내에서 메서드 단위로 매핑 가능
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@RequestMapping(value = "/", method = {RequestMethod.GET, RequestMethod.POST})
public String home(Locale locale, Model model) {
@RequestMapping
@RequestMapping 어노테이션을 사용하여 URL 매핑 작업 수행
파라미터 중 value 속성값에 지정된 URL 을 매핑 주소로 사용
method 속성값에 지정된 RequestMethod.xxx 방식을 요청 메서드로 인식
(이 때, method 속성값은 복수개 지정 가능하며, 중괄호로 묶어서 복수개의 방식을 모두 처리)
(ex, @RequestMapping(value = "/", method = RequestMethod.GET)//
@RequestMapping(value = "/", method = {RequestMethod.GET, RequestMethod.POST})
현재 프로젝트에 서블릿 주소("/") 가 GET 방식으로 요청되면 자동으로 home() 메서드가 호출
@RequestMapping(value = "/", method = RequestMethod.GET
현재 프로젝트에 서블릿 주소("/") 가 GET 또는 POST 방식으로 요청되면 자동으로 home() 메서
드가 호출 우리가 Servlet인 배운 doProcess로 한거랑 똑같다
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
}
꿀팁 : GET 방식으로 "/main" 서블릿 주소가 요청되면 WEB-INF/views/index.jsp
페이지로 포워딩(Dispathcer) 메서드부터 만들고 @RequestMapping 을 만들면 자동완성이 잘 됨
<article>
<h1>메인 페이지</h1>
<hr>
<h3><a href="BoardWriteForm">글쓰기</a></h3>
<h3><a href="BoardList">글목록</a></h3>
</article>
위와 같은 뷰페이지의 글쓰기를 와 글목록 매핑을 해보자
controller 패키지와 BoardController(글쓰기) 콘트롤러 생성
@Controller
public class BoardController {
@GetMapping("BoardWriteForm")
public String writeForm() {
return "test2/board_write_form";
}
"BoardWriteForm" 서블릿 요청(GET) 시
test2 디렉토리의 board_write_form.jsp 페이지로 포워딩
"BoardWritePro" 서블릿 요청(POST) 시
폼 파라미터5개 (작성자, 패스워드, 제목, 내용 파일명) 전달받아 출력 후
"BoardList"(있다고 가정) 서블릿 요청(리다이렉트) 를 해보자
리다이렉트는 서블릿->서블릿 할때 사용됨
"BoardWritePro" 서블릿 요청(POST) 시
폼 파라미터5개 (작성자, 패스워드, 제목, 내용 파일명) 전달받아 출력 방법 2가지
1) 파라미터에 직접 value 입력하는 방법
@PostMapping("BoardWritePro")
public String writePro(@RequestParam String board_name, @RequestParam String board_pass... @RequestParam String file 등등) {
System.out.println("글쓴이 : " + board_name);
System.out.println("비밀번호 : " + board_pass);
..
..
System.out.println("파일명 : " + board_file);
return "redirect:/BoardList"; // 서블릿 -> 서블릿 redirect
}
2) 파라미터에 map 을 이용하는 방법
@PostMapping("BoardWritePro")
public String writePro(@RequestParam Map<String, String> map) {
System.out.println("글쓴이 : " + map.get("board_name"));
System.out.println("비밀번호 : " + map.get("board_pass"));
System.out.println("제목 : " + map.get("board_subject"));
System.out.println("내용 : " + map.get("board_content"));
System.out.println("파일명 : " + map.get("board_file"));
return "redirect:/BoardList"; // 서블릿 -> 서블릿 redirect
}
BoardList" 서블릿 요청(GET) 시 글 목록 출력!" 메세지 콘솔에 출력 후
test2/board_list.jsp 으로 매핑
@GetMapping("BoardList")
public String list() {
System.out.println("글 목록 출력!");
return "test2/board_list.jsp";
}
}
위에서 지금까지 배운 MVC 로 진행할거 같으면
BoardService service = new BoardService(); // 하나로 다 집어넣어서 메서드로 집어넣어라
boolean isWriteSuccess = servic.registBoard(board);
BoardDAO dao = new BoardDAO();
int insertCount =dao.insertBoard(baord);
이런식으로 진행해라 (하지만 추후에 배울 스프링이 더 편해서 안하는게 좋다.)