<참조> https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/mvc.html

Spring WEB MVC 프레임워크 (3)

 

 

작업중... 

 

4. 핸들러 매핑

 

다음 예는 인터셉터를 구성하는 방법을 보여줍니다.

<beans>
  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="interceptors">
      <bean class="example.MyInterceptor"/>
    </property>
  </bean>
<beans>

4.1 요청을 가로채기 HandlerInterceptor

 

<beans>
    <bean id="handlerMapping"
          class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="officeHoursInterceptor"/>
            </list>
        </property>
    </bean>
    <bean id="officeHoursInterceptor"
          class="samples.TimeBasedAccessInterceptor">
        <property name="openingTime" value="9"/>
        <property name="closingTime" value="18"/>
    </bean>
<beans>
package samples;
public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter {
    private int openingTime;
    private int closingTime;
    public void setOpeningTime(int openingTime) {
        this.openingTime = openingTime;
    }
    public void setClosingTime(int closingTime) {
        this.closingTime = closingTime;
    }
    public boolean preHandle(
            HttpServletRequest request,
            HttpServletResponse response,
            Object handler) throws Exception {
        Calendar cal = Calendar.getInstance();
        int hour = cal.get(HOUR_OF_DAY);
        if (openingTime <= hour && hour < closingTime) {
            return true;
        } else {
            response.sendRedirect("http://host.com/outsideOfficeHours.html");
            return false;
        }
    }
}
 

5. 뷰 해결하기

 

5.1 ViewResolver인터페이스 로 보기 해결하기

 

표 3. 확인자 보기

ViewResolver설명
AbstractCachingViewResolver 뷰를 캐시하는 추상 뷰 리졸버. 종종 보기를 사용하려면 먼저 준비해야 합니다. 이 뷰 리졸버를 확장하면 캐싱이 제공됩니다.
XmlViewResolver 이를 구현 ViewResolver하면 Spring의 XML 빈 팩토리와 동일한 DTD로 XML로 작성된 구성 파일을 허용합니다. 기본 구성 파일은 /WEB-INF/views.xml.
ResourceBundleViewResolver 그 구현은 번들 기본 이름으로 지정된 ViewResolver에서 빈 정의를 사용합니다 . ResourceBundle일반적으로 클래스 경로에 있는 속성 파일에서 번들을 정의합니다. 기본 파일 이름은 views.properties입니다.
UrlBasedViewResolver ViewResolver명시적인 매핑 정의 없이 논리적 뷰 이름을 URL로 직접 확인 하는 인터페이스의 간단한 구현입니다 . 논리적 이름이 임의의 매핑 없이 간단한 방식으로 보기 리소스의 이름과 일치하는 경우에 적합합니다.
InternalResourceViewResolver 편리한 서브클래스 (사실상 Servlet 및 JSP)와 및 와 같은 서브클래스  UrlBasedViewResolver지원합니다 . 를 사용하여 이 해석기에 의해 생성된 모든 보기에 대한 보기 클래스를 지정할 수 있습니다 . 자세한 내용은 클래스에 대한 Javadocs를 참조 하세요.InternalResourceViewJstlViewTilesViewsetViewClass(..)UrlBasedViewResolver
VelocityViewResolver/ FreeMarkerViewResolver 그 편리한 서브클래스 (사실상, Velocity 템플릿) 또는 각각 및 이들의 사용자 정의 서브클래스를 UrlBasedViewResolver지원 합니다.VelocityViewFreeMarkerView
ContentNegotiatingViewResolver 요청 파일 이름 또는 헤더 ViewResolver를 기반으로 보기를 확인 하는 인터페이스의 구현입니다 . 

 

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

 

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
    <property name="basename" value="views"/>
    <property name="defaultParentView" value="parentView"/>
</bean>

 

 

5.2 ViewResolver 연결

 

<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/jsp/"/>
  <property name="suffix" value=".jsp"/>
</bean>
<bean id="excelViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver">
  <property name="order" value="1"/>
  <property name="location" value="/WEB-INF/views.xml"/>
</bean>
<!-- in views.xml -->
<beans>
  <bean name="report" class="org.springframework.example.ReportExcelView"/>
</beans>

 

5.3 보기로 리디렉션

 

RedirectView

@RequestMapping(value = "/files/{path}", method = RequestMethod.POST)
public String upload(...) {
    // ...
    return "redirect:files/{path}";
}

 

redirect:접두사 _

 

forward:접두사 _

 

5.4 ContentNegotiatingViewResolver

  •  
 
헤더 의 한 가지 문제는 AcceptHTML 내에서 웹 브라우저에서 헤더를 설정하는 것이 불가능하다는 것입니다. 예를 들어 Firefox에서는 다음과 같이 고정됩니다. 이러한 이유로 브라우저 기반 웹 애플리케이션을 개발할 때 각 표현에 대해 고유한 URI를 사용하는 것을 보는 것이 일반적입니다.

 

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  <property name="mediaTypes">
    <map>
      <entry key="atom" value="application/atom+xml"/>
      <entry key="html" value="text/html"/>
      <entry key="json" value="application/json"/>
    </map>
  </property>
  <property name="viewResolvers">
    <list>
      <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
      </bean>
    </list>
  </property>
  <property name="defaultViews">
    <list>
      <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
    </list>
  </property>
</bean>
<bean id="content" class="com.springsource.samples.rest.SampleContentAtomView"/>

 

 
ContentNegotiatingViewResolver의 ViewResolver 목록이 명시적으로 구성되지 않은 경우 애플리케이션 컨텍스트에 정의된 모든 ViewResolver를 자동으로 사용합니다 .

 

@Controller
public class ContentController {
    private List<SampleContent> contentList = new ArrayList<SampleContent>();
    @RequestMapping(value="/content", method=RequestMethod.GET)
    public ModelAndView getContent() {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("content");
        mav.addObject("sampleContentList", contentList);
        return mav;
    }
}

6. 플래시 속성 사용하기

 

플래시 속성에 대한 요청 일치

 

7. URI 건물

UriComponents uriComponents =
        UriComponentsBuilder.fromUriString("http://example.com/hotels/{hotel}/bookings/{booking}").build();
URI uri = uriComponents.expand("42", "21").encode().toUri();

 

UriComponents uriComponents =
        UriComponentsBuilder.newInstance()
            .scheme("http").host("example.com").path("/hotels/{hotel}/bookings/{booking}").build()
            .expand("42", "21")
            .encode();

 

HttpServletRequest request = ...
// Re-use host, scheme, port, path and query string
// Replace the "accountId" query param
ServletUriComponentsBuilder ucb =
        ServletUriComponentsBuilder.fromRequest(request).replaceQueryParam("accountId", "{id}").build()
            .expand("123")
            .encode();

또는 컨텍스트 경로를 포함하여 사용 가능한 정보의 하위 집합을 복사하도록 선택할 수 있다.

// Re-use host, port and context path
// Append "/accounts" to the path
ServletUriComponentsBuilder ucb =
        ServletUriComponentsBuilder.fromContextPath(request).path("/accounts").build()

또는 DispatcherServlet 이름으로 매핑되는 경우(예: /main/*), 서블릿 매핑의 리터럴 부분을 포함할 수도 있다.

// Re-use host, port, context path
// Append the literal part of the servlet mapping to the path
// Append "/accounts" to the path
ServletUriComponentsBuilder ucb =
        ServletUriComponentsBuilder.fromServletMapping(request).path("/accounts").build()

8. 로케일 사용

 

8.1 AcceptHeaderLocaleResolver

 

8.2 CookieLocaleResolver

 

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="cookieName" value="clientlanguage"/>
    <!-- in seconds. If set to -1, the cookie is not persisted (deleted when browser shuts down) -->
    <property name="cookieMaxAge" value="100000">
</bean>

표 4. CookieLocaleResolver속성


cookieName classname + LOCALE 쿠키의 이름
cookieMaxAge Integer.MAX_INT 쿠키가 클라이언트에서 지속되는 최대 시간입니다. -1을 지정하면 쿠키가 유지되지 않습니다. 클라이언트가 브라우저를 종료할 때까지만 사용할 수 있습니다.
cookiePath / 쿠키의 가시성을 사이트의 특정 부분으로 제한합니다. cookiePath가 지정되면 쿠키는 해당 경로와 그 아래 경로에만 표시됩니다.

8.3 SessionLocaleResolver

 

8.4 LocaleChangeInterceptor

 

<bean id="localeChangeInterceptor"
      class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="siteLanguage"/>
</bean>
<bean id="localeResolver"
      class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>
<bean id="urlMapping"
      class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="localeChangeInterceptor"/>
        </list>
    </property>
    <property name="mappings">
        <value>/**/*.view=someController</value>
    </property>
</bean>
 

 

반응형

'SPRING' 카테고리의 다른 글

Spring WEB MVC 프레임워크 (5)  (0) 2022.06.13
Spring WEB MVC 프레임워크 (4)  (0) 2022.06.13
Spring WEB MVC 프레임워크 (2)  (0) 2022.06.13
Spring WEB MVC 프레임워크 (1)  (0) 2022.06.12
Spring, JDBC 예제 코드  (0) 2022.06.12

+ Recent posts