Spring 2일차 Java Servlet+JSP프로젝트를 스프링으로옮기기
기본적으로 자바 서블렛과 JSP를 이용해서 만든 프로젝트를 독학한 Spring을 이용해서 옮겨보려고 한다.
1일차의 생각 그대로 domain = dto, Service = dao 그리고 thymeleaf = jsp라고 생각하면서 천천히 옮기면서
프로젝트에서 지저분했던 코드들을 정리해나가기로 했다.
기본적인 로그인과정은 오전중에 전부 만들어서
다음과 같이 작성했다.
그냥 단순하게 id, pwd 입력받는 부분만 만들어 놓고
@RequestMapping(value = "/Login")
public String login(HttpServletRequest request) {
System.out.println("로그인 진입");
int inputId = Integer.parseInt(request.getParameter("inputId"));
String inputPwd = request.getParameter("inputPwd");
System.out.println("ID : " + inputId + " PWD : " + inputPwd);
boolean isAuthenticated = loginService.loginLogic(inputId, inputPwd);
if (isAuthenticated) {
System.out.println("로그인 성공");
return "/MainPage/MainPage";
} else {
System.out.println("로그인 실패");
return "/LoginPage/LoginPage";
}
}
}
로그인 컨트롤러에서 Login요청을 받게되면 해당 Parameter값들을 받아서 Service안에 있는 loginLogic을 통해서 참인지 거짓인지 간단하게 구별하도록 했다.
public boolean loginLogic(int empId, String empPwd) {
Employee employee = employeeRepository.findByEmpId(empId);
if (employee != null) {
return employee.getEmpPwd().equals(empPwd);
}
return false;
}
사실 SpringSecurity를 이용해서 진행해보려고했으나 아예 스프링에 대한 지식이 없는것에 가깝기도 하고 Token이라던지 인증과정에 대해서 이해가 안되었기에 추후에 진행해보려고한다.
이분의 자료가 정리가 잘되어있어서 모두다 성공적으로 프로젝트를 옮기게되면 시도해보려고한다.
아무튼 로그인 부분을 작성하면서 어느정도 서블렛과의 유사점을 알게되어서 그다음부턴 차분히 진행해 나가게 되었다.
이런식으로 얼마전에 JSP교재에서 봤던것처럼 게시판 부분, 글 작성부분, 세부페이지 부분 이렇게 세부분으로 진행했다.
이전에 JSP로 진행했을땐 사이드바를 include해서 받아왔는데 이번에는 전부다 비동기식으로해서 사이드바는 항상 존재하고 컨텐츠 부분만 매번 새롭게 innerHTML을 받아오도록 진행했다.
다만 해당 부분에서 문제가있엇는데 JavaScript를 이용해서 페이지를 구성하는 부분 같은 경우에는 Window.onload가 작동하지않아서 꽤나 애를 먹었는데, fetch를 보내서 받는 부분에서 해당 JavaScript Function을 실행하도록 했다.
@Controller
public class FreeBoardController {
private static final String FREE_BOARD_PAGE = "FreeBoardPage/FreeBoardPage";
private static final String WRITE_FREE_BOARD_PAGE = "FreeBoardPage/FreeBoardWritePage";
private static final String DETAIL_FREE_BOARD_PAGE = "FreeBoardPage/FreeBoardDetailPage";
private final FreeBoardService freeBoardService;
public FreeBoardController(FreeBoardService freeBoardService) {
this.freeBoardService = freeBoardService;
}
@GetMapping("/FreeBoard")
public ModelAndView FreeBoard() {
System.out.println("Get FreeBoard Page");
List<FreeBoard> freeBoardList = freeBoardService.getFreeBoardList();
ModelAndView modelAndView = new ModelAndView(FREE_BOARD_PAGE);
modelAndView.addObject("freeBoardList", freeBoardList);
return modelAndView;
}
@GetMapping("/FreeBoard/WritePage")
public String FreeBoardWrite(Model model) {
System.out.println("WritePage FreeBoard");
model.addAttribute("freeBoard", new FreeBoard());
return WRITE_FREE_BOARD_PAGE;
}
@PostMapping("FreeBoard/WritePage/Write")
public String WriteContent(@ModelAttribute FreeBoard freeBoard){
System.out.println("WriteContent FreeBoard");
freeBoard.setDate(LocalDate.now());
freeBoardService.save(freeBoard);
return FREE_BOARD_PAGE;
}
@GetMapping("/FreeBoard/WritePage/Detail/{idx}")
public String FreeBoardDetail(Model model, @PathVariable int idx) {
System.out.println("DetailPage FreeBoard");
FreeBoard freeBoard = freeBoardService.getFreeBoard(idx);
long daysAgo = ChronoUnit.DAYS.between(freeBoard.getDate(), LocalDate.now());
model.addAttribute("detail", freeBoard);
model.addAttribute("daysAgo", daysAgo);
return DETAIL_FREE_BOARD_PAGE;
}
}
기존에 JSP로 진행할땐 JavaServlet을 이용했기때문에 모든 기능마다 컨트롤러를 다 따로 만들어서 넘겨줫었는데 한 클래스안에서 매핑을 다르게 해주면 편리하게 만들수있어서 좋았다. 사실 맞는 방식인지는 전혀 모르겠으나, 일단 현재까진 문제없이 진행하고 있다.