◎ 참고 서적 | Mastering Spring 5
준비 사항
- 이클립스
- 자바 8 이상
- 메이븐 3 이상
- 인터넷 연결
[ @RequestMapping ]
예1)
@Controller
public class UserController{
@RequestMapping(value="/show-page", method=RequestMethod.GET)
public String showPage(){
/*코드 작성 부분*/
}
}
==> shpw-page라는 값이 넘어오면 아래 메소드를 수행시킴
예2)
@Controller
@RequestMappin("/user")
public class UserController{
@RequestMapping(value="/show-page", method=RequestMethod.GET)
public String showPage(){
/*코드 작성 부분*/
}
}
==> 하나는 클래스에 매핑, 하나는 메소드에 매핑
==> 동작 ex) localhost:8090/user/show-page 일 때
[ @RequestMapping 의 리턴 타입 ]
- ModelAndView
ex) public ModelAndView showPage(){ ~~~ return new ModelAndView("다음 뷰", 모델 객체)} - Model
모델만 반환 뷰는 DefaultRequestToViewNameTranslator 를 사용하여 결정 - Map
- View
암묵적으로 정의된 모델이 있는 뷰 - String
뷰 이름에 대한 참조 이때까지 많이 사용했음 + 뷰 리졸버
[ 뷰 리졸버 : JSP 뷰 리졸버 ]
뷰 리졸버란?(@RequestMapping 한 컨트롤러)컨트롤러 메소드에서 return "다음 뷰 논리적 주소" 형태로 다음 뷰를 결정할 때논리적 뷰를 물리적 뷰로 바꿔 url에 매핑해주는 역할ex) return "hello" ==> hello.jsp" 이런식으로 바꾸어 url로 매핑해준다.
뷰 리졸버 구성하는 방법 1 -jjsp 뷰 리졸버 방법
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
코드 구문을 *context.xml 에 추가한다.
2- 프리마커 방법
- 프리마커 템플릿
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name = "templateLoaderPath" value="/WEB-INF/freemarker/"/>
</bean>
- 프리마커 리졸버
<bean id="freemarkerViewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true">
<property name="prefix" value=""/>
<property name="suffix" value=".ftl">
</bean>
[ 핸들러 매핑 및 인터셉터 탐색 ]
스프링 2.5 이하 버전에서 url 과 컨트롤러 사이의 매핑이 필요했는데 이때 사용하던 핸들러 매팅 구형 방법 ▼
(현재는 어노테이션 사용으로 핸들퍼 매핑 불필요)
시기에 따른 종류
- public boolean preHandler(HttpServletRequest, request, HttpServletResponse response, Object handler)
핸들러 메소드 호출 전 - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
핸들러 메소드 호출 후 - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
요청 처리과 완료된 후 호출
핸들러 타이머 코드 예제
- 클래스 파일
public class HandlerTimerLogginInterceptor extends
HandlerInterceptorAdapter{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
request.setAttribute("startTime", System.currentTimeMillis());}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception{
request.setAttribute("endTime", System.cuttrenTimeMillis());
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex)
throws Exception {
long startTime = (Long) request.getAttribute("StartTime");
long endTime - (Long) request.getAttribute("endTime");
logger.info("Time Spent in Handler in ms : " + (endTime - startTime));
}
- context.xml에 추가해야 할 내용
<mvc:interceptors>
<mapping path="/**"/>
<exclude-mapping path="/secure/**"/>
<bean class="com.mastering.spring.springmvc.controller.interceptor
.HandlerTimeLoggingInterceptor" />
</mvc:interceptors>
└ ▶ /secure/로 시작하는 URI 매핑을 가진 핸들러를 제외한 모든 핸들러가 인터셉스 된다.
'spring framework' 카테고리의 다른 글
스프링 프레임워크 #7 - 부트 스트랩 - 메이븐 설정, 단위테스트, 통합테스트 (0) | 2023.09.21 |
---|---|
스프링 프레임워크 #6 - 모델, 세션, 예외처리 (0) | 2023.09.18 |
★스프링 프레임워크 #4 - Chapter03 : Spring MVC 실습, 유효성 검사, 예외 처리, 정규식 등 (0) | 2023.09.14 |
스프링 프레임워크 #3 - Chapter03 : Spring MVC (0) | 2023.09.13 |
스프링 프레임워크 #2 - Chapter02 : 스코프 (0) | 2023.09.12 |