티스토리 뷰
Spring MVC 적용을 위해 앞서 개발했던 view.controller 패키지를 삭제한다.
1. HandlerMapping 등록
- 각각의 컨트롤러 파일들을 매핑시켜준다.
- SimpleUrlHandlerMapping객체는 Setter 인젝션을 통해 Properties 타입의 컬렉션 객체를 의존성 주입하고 있다.
- 그리고 의존성 주입된 Porperties 컬렉션에는 "*.do"경로 요청에 대한 아이디가 매핑되어 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <!-- presentation-layer.xml --> <!-- HandlerMapping 등록 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/login.do">login</prop> <prop key="/getBoardList.do">getBoardList</prop> <prop key="/getBoard.do">getBoard</prop> <prop key="/insertBoard.do">insertBoard</prop> <prop key="/updateBoard.do">updateBoard</prop> <prop key="/deleteBoard.do">deleteBoard</prop> <prop key="/logout.do">logout</prop> </props> </property> </bean> <!-- Controller 등록 --> <bean id="login" class="com.springbook.view.user.LoginController"></bean> <bean id="getBoardList" class="com.springbook.view.board.GetBoardListController"></bean> <bean id="getBoard" class="com.springbook.view.board.GetBoardController"></bean> <bean id="insertBoard" class="com.springbook.view.board.InsertBoardController"></bean> <bean id="updateBoard" class="com.springbook.view.board.UpdateBoardController"></bean> <bean id="deleteBoard" class="com.springbook.view.board.DeleteBoardController"></bean> <bean id="logout" class="com.springbook.view.user.LogoutController"></bean> | cs |
2. controller 구현
- 스프링에서 제공하는 controller로 변경하고, 리턴타입을 ModelAndView로 변경한다.
- DispatcherServlet은 Controller가 리턴한 ModelAndView 객체에서 Model 정보를 추출한 다음 HttpServletRequest 객체에 검색 결과에 해당하는 Model 정보를 저장하여 jsp로 포워딩한다. 따라서 jsp파일에서는 검색 결과를 세션이 아닌 HttpServletRequest로부터 꺼내 쓸 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | public class LoginController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) { System.out.println("로그인 처리"); // 1. 사용자 입력 정보 추출 String id = request.getParameter("id"); String password = request.getParameter("password"); // 2. DB 연동 처리 UserVO vo = new UserVO(); vo.setId(id); vo.setPassword(password); UserDAO userDAO = new UserDAO(); UserVO user = userDAO.getUser(vo); // 3. 화면 네비게이션 ModelAndView mav = new ModelAndView(); if(user != null) { mav.setViewName("redirect:getBoardList.do"); } else { mav.setViewName("redirect:login.jsp"); } return mav; } } public class GetBoardListController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) { System.out.println("글 목록 검색 처리"); // 1. 사용자 입력 정보 추출(검색 기능은 추후 구현) // 2. DB 연동 처리 BoardVO vo = new BoardVO(); BoardDAO boardDAO = new BoardDAO(); List<BoardVO> boardList = boardDAO.getBoardList(vo); // 3. 응답 화면 구성 ModelAndView mav = new ModelAndView(); mav.addObject("boardList", boardList); // Model 정보 저장 mav.setViewName("getBoardList"); // View 정보 저장 return mav; } } | cs |
3. ViewResolver 활용하기
- http://localhost:8080/BoardWeb/getBoardList.jsp 와 같은 클라이언트로부터의 직접적인 JSP 호출을 차단 할 수 있어 대부분 웹 프로젝트에서 사용한다.
- /WEB-INF/board 폴더를 생성하고 getBoardList.jsp와 getBoard.jsp 파일을 이동시킨다.
> 위의 경로로 이동시키면 브라우저에서 접근을 할 수 없다.
3-1. ViewResolver 설정
- 아래와 같이 설정 시 jsp파일을 view 화면으로 사용할 수 있다.
- mav.setViewName("getBoardList"); 접두사와 접미사를 설정해준다.
- mav.setViewName("redirect:login.jsp"); 와 같이 redirect를 입력하면 이를 무시하고 리다이렉트한다.
1 2 3 4 5 6 7 | <!-- presentation-layer.xml --> <!-- ViewResolver 등록 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/board/"></property> <property name="suffix" value=".jsp"></property> </bean> | cs |
'spring' 카테고리의 다른 글
day4 class02 어노테이션으로 게시판 프로그램 구현하기 (0) | 2019.02.09 |
---|---|
day4 class01 어노테이션 기반 MVC 개발 (0) | 2019.02.07 |
day3 class05 Spring MVC 구조 (0) | 2019.01.27 |
day3 class04 MVC 프레임워크 개발 (0) | 2019.01.27 |
day3 class03 Model2 아키텍처로 게시판 개발 (0) | 2019.01.20 |
- Total
- Today
- Yesterday
- 의존성
- servlet context
- JoinPoint
- java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent
- aspect oriented programming
- aop
- LoggingEvent
- Controller
- 검색
- #java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent삭제
- ViewResolver
- 의존성 주입
- Class path contains multiple SLF4J bindings
- exclude-mapping
- postHandler
- application context
- setter 인젝션
- 스프링 컨테이너
- afterCompletion
- 컨트롤러
- NoClassDefFoundError
- preHandler
- XmlWebApplicationContext
- SqlSessionFactoryBean
- handlermapping
- @Autowired
- 횡단 관심
- multiple SLF4J bindings
- blocking
- 어노테이션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |