Spring Web MVC 프레임워크 학습 구성 Spring Web MVC

14268 단어 springwebmvc
이 글은 자바 코드 설정과 XML 파일 설정, 그리고 MVC 명칭 공간의 사용 방법을 포함하여 Spring Web MVC의 각 부분의 설정 방법을 다루고 있다.
VC Java 구성 및 XML 네임스페이스 활성화
기본 구성
VC Java 구성(@Controller 등 다양한 메모)과 XML 네임스페이스를 사용하려면 Java 구성을 사용하는 경우 구성 클래스에 @EnableWebMvc 메모를 추가하면 됩니다.

@Configuration
@EnableWebMvc
public class WebAppConfig {

}
XML 구성 파일을 사용하는 경우 다음 행을 추가하면 됩니다.

<mvc:annotation-driven/>
어떤 방식으로든 Spring에 일부 구성 요소를 등록하여 가장 기본적인 MVC 기능을 제공합니다.이 기능들은 문서에서 매우 명확하게 말한다.간단히 번역했습니다.
위의 설정은 Request Mapping Handler Mapping, Request Mapping Handler Adapter와 Exception Handler Exception Resolver를 등록하여 주해 컨트롤러와 주해 방법(예를 들어 @Request Mapping과 @Exception Handler 등)으로 요청을 처리하는 기능을 제공합니다.
다음 기능도 활성화됩니다.
  • Conversion Service 실례를 통해 Spring 3 방식의 유형 변환 및 데이터 귀속 지원을 합니다.
  • @NumberFormat 포맷 디지털 필드 지원
  • @DateTimeFormat 포맷 Date, Calendar, Long, JodaTime 유형 필드를 지원합니다.
  • 컨트롤러 방법에 @Valid 검증 Bean의 지원을 사용하고 JSR-303 Bean 검증의 실현이 검출되면.
  • 문자열과 필요한 Java 형식 사이의 형식 변환을 위한 HttpMessageConverter 그룹입니다. 구체적인 목록은 Spring 문서 22.16.1.Enabling the MVC Java Config or the MVC XML Namespace。
  • 참조.
    이러한 기본 구성을 통해 가장 기본적인 Spring MVC 사용을 시작할 수 있습니다.
    사용자 정의 구성
    위에서 가장 기본적인 설정을 제공하였다.일부 구성을 사용자 정의해야 하는 경우에도 가능합니다.Java 설정을 사용하면 설정 클래스가 WebMvcConfigurer 인터페이스를 실현하도록 합니다. 더 자주 사용하는 방법은 WebMvcConfigurerAdapter 기본 클래스를 계승하고 기본 클래스를 다시 쓰는 방법을 통해 관련 기능을 설정할 수 있습니다.
    
    @Configuration
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        // , 
    
    }
    
    
    XML 프로필을 사용한다면 IDE의 자동 보완 기능을 통해 에 어떤 하위 속성과 하위 요소가 있는지 보십시오.
    유형 변환 및 포맷
    기본적으로 Spring은 Number (모든 기본 숫자 형식 포함) 와java를 등록합니다.util.Date 유형 변환 및 포맷 기능형식의 변환과 포맷 기능을 제공하려면 해당하는 형식 변환기와 포맷기를 스스로 등록해야 한다.
    자바 설정을 사용하면addFormatters(Formatter Registry registry) 방법을 다시 쓰고 해당 기능을 추가하면 됩니다.
    
    @Configuration
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter {
    
      @Override
      public void addFormatters(FormatterRegistry registry) {
        // Add formatters and/or converters
      }
    
    }
    
    
    XML 설정을 사용하려면 Conversion Service를 등록하고 노드에 추가해야 합니다.
    
      <mvc:annotation-driven conversion-service="conversionService"/>
    
      <bean id="conversionService"
          class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
          <set>
            <bean class="org.example.MyConverter"/>
          </set>
        </property>
        <property name="formatters">
          <set>
            <bean class="org.example.MyFormatter"/>
            <bean class="org.example.MyAnnotationFormatterFactory"/>
          </set>
        </property>
        <property name="formatterRegistrars">
          <set>
            <bean class="org.example.MyFormatterRegistrar"/>
          </set>
        </property>
      </bean>
    
    
    기능 검증
    Spring은 자체적으로 하나의 인터페이스와 클래스를 제공하여 일련의 검증 기능을 제공합니다.그러나 더 일반적인 방법은 Bean Validation을 이용하여 자바 대상의 검증을 하는 것이다. Bean Validation의 실현 중 하나는 바로 Hibernate Validator이다.
    기본적으로 @EnableWebMvc 또는 설정 후 스프링이 Bean Validation을 감지하면 LocalValidator Factory Bean을 자동으로 등록하여 검증 기능을 제공합니다.만약 우리가 수동으로 검증 과정을 처리하기를 원한다면 검증기 실례를 컨트롤러에 주입하기를 원할 수도 있습니다. 이때 자동으로 등록된 Local Validator Factory Bean을 사용할 수 없습니다.이때 우리는 수동으로 Local Validator Factory Bean 실례를 등록하고 @Primary를 주석하여 사용자 정의 Local Validator Factory Bean을 우선적으로 사용할 수 있습니다.
    Spring의 기본 인증서 구성을 직접 덮어쓰는 방법도 있습니다.Java 구성을 사용하는 경우 getValidator () 메서드를 다시 작성하면 됩니다.
    
    @Configuration
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter {
    
      @Override
      public Validator getValidator() {
        // return "global" validator
      }
    
    }
    
    
    XML 프로필을 사용하면 Validator를 정의하고 에 추가합니다.
    
    <mvc:annotation-driven validator="globalValidator"/>
    위에서 정의한 것은 모두 전역 검증기입니다. 우리도 어떤 컨트롤러에서 국부 검증기를 정의한 다음에 전역 검증기와 결합하여 사용할 수 있습니다.이때 @InitBinder 메모를 사용해야 합니다.
    
    @Controller
    public class MyController {
    
      @InitBinder
      protected void initBinder(WebDataBinder binder) {
        binder.addValidators(new FooValidator());
      }
    
    }
    
    
    검증기를 설치한 후에Spring이 @Valid 메모의 메소드 매개 변수를 식별하면 검증을 실행하고 검증 결과를 BindingResult에 연결합니다. 우리는 방법에서 BindingResult에 접근하여 검증 결과를 얻을 수 있습니다.
    차단기
    우리는 차단기를 실현한 후에 그것을 웹 프로그램에 응용할 수 있다.자바 설정을 사용하면addInterceptors(Interceptor Registry registry) 방법을 다시 쓰고 차단기를 추가하면 됩니다.차단 경로와 배제 경로를 설정하려면 여기서도 설정할 수 있습니다.
    
    @Configuration
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter {
    
      @Override
      public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleInterceptor());
        registry.addInterceptor(new ThemeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
        registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*");
      }
    
    }
    
    
    XML 프로필을 사용하면 MVC 네임스페이스를 사용할 수 있고 구성도 간단합니다.
    
    <mvc:interceptors>
      <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
      <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/admin/**"/>
        <bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor"/>
      </mvc:interceptor>
      <mvc:interceptor>
        <mvc:mapping path="/secure/*"/>
        <bean class="org.example.SecurityInterceptor"/>
      </mvc:interceptor>
    </mvc:interceptors>
    
    뷰 컨트롤러
    이것은 Parameterizable View Controller를 정의하는 간단한 방식입니다. 이 컨트롤러가 요청되었을 때 논리적인 조작을 하지 않고 해당 보기로 바로 이동합니다.보기 컨트롤러의 흔한 사용법은 사이트의 첫 페이지를 직접적으로 비추거나 요청하는 것이다.
    자바 설정을 사용하면 다음과 같이 쓸 수 있습니다. 다음 설정은 index라는 보기에/비칩니다.
    
    @Configuration
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter {
    
      @Override
      public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
      }
    
    }
    
    
    XML 구성도 간단합니다.
    
    <mvc:view-controller path="/" view-name="index"/>
    뷰 해상도
    Java 구성을 사용하려면 configureViewResolvers(ViewResolverRegistry registry) 방법을 다시 작성하면 됩니다.JSP 뷰는 다음과 같이 구성되어 있습니다.다른 뷰 해상도가 필요한 경우 해당 문서와 ViewResolverRegistry의 JavaDoc을 참조하십시오.
    
    @Configuration
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter {
    
      @Override
      public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.enableContentNegotiation(new MappingJackson2JsonView());
        registry.jsp()
            .prefix("/WEB-INF/jsp/")
            .suffix(".jsp")
            .viewClass(JstlView.class);
      }
    
    }
    
    
    XML 프로파일을 사용하면 MVC 네임스페이스를 사용하여 구성을 단순화할 수 있습니다.내장된 JSP 해상도를 제외한 다른 뷰 해상도는 추가 구성이 필요할 수 있습니다. 여기서 더 이상 설명하지 않겠습니다.
    
    <mvc:view-resolvers>
      <mvc:jsp prefix="/WEB-INF/jsp/"
           suffix=".jsp"
           view-class="org.springframework.web.servlet.view.JstlView"/>
    </mvc:view-resolvers>
    자원 처리
    정적 자원 처리
    여기서 말하는 것은 주로 정적 자원의 처리이다.앞에서 컨트롤러, 보기에 대한 지식을 많이 말했지만 CSS, JS 파일을 어떻게 비추는지 설명하지 않았습니다.설정 방법은 여기서 설명합니다.
    Java 설정을 사용하면addResourceHandlers(ResourceHandlerRegistry registry) 방법을 다시 쓰고 해당하는 맵을 추가하면 됩니다.
    
    @Configuration
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter {
    
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/resources/static/");
      }
    
    }
    
    
    XML 프로파일을 사용하는 것도 간단합니다.
    
    <mvc:resources mapping="/static/**" location="/resources/static/"/>
    이렇게 비추면, 만약에 우리가/resources/static/bootstrap이 있다면.css 파일, 그러면/static/bootstrap을 사용할 수 있습니다.css 경로가 이 파일에 접근했습니다.같은 것은 보기 파일에서도 이렇게 인용할 수 있다.cache-period를 사용하여 자원의 만료 시간을 설정할 수 있습니다. 단위는 초입니다.여러 리소스 위치를 지정해야 하는 경우 쉼표로 구분할 수 있습니다.
    리소스의 버전 제어
    일부 빈번하게 업데이트되는 자원은 버전 제어를 필요로 하여 클라이언트가 최신 자원을 사용하도록 강요할 수 있다.Spring 프레임워크도 자원의 버전 제어를 지원합니다. 자원 체인을 정의해서 이 기능을 실현해야 합니다.리소스 체인은 ResourceResolver 인스턴스와 여러 ResourceTransformer 인스턴스로 구성됩니다.내장된 Version Resource Resolver는 우리의 대부분의 수요를 만족시킬 수 있습니다. 예를 들어 Fixed Version Strategy는 날짜, 버전 번호 또는 다른 것을 버전으로 설정하는 정책을 정의할 수 있습니다.ContentVersionStrategy는 리소스의 MD5 값을 계산합니다.
    ContentVersion Strategy 정책은 좋은 정책이지만 MD5를 계산하기 때문에 비용이 많이 들기 때문에 이런 정책을 사용할 때 캐시를 열어 성능을 향상시키는 것이 가장 좋다.
    자바 설정을 사용하면 앞의 예와 차이가 많지 않습니다. 리소스 체인(true) 등 방법을 많이 호출하고 해당하는 버전 자원 해상도와 버전 정책을 추가해야 합니다.
    
    @Configuration
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter {
    
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
            .addResourceLocations("/resources/static/")
            .resourceChain(true).addResolver(
              new VersionResourceResolver().addContentVersionStrategy("/**"));
      }
    
    }
    
    
    다음은 XML 구성을 사용하는 예입니다.
    
    <mvc:resources mapping="/static/**" location="/resources/static/">
      <mvc:resource-chain>
        <mvc:resource-cache/>
        <mvc:resolvers>
          <mvc:version-resolver>
            <mvc:content-version-strategy patterns="/**"/>
          </mvc:version-resolver>
        </mvc:resolvers>
      </mvc:resource-chain>
    </mvc:resources>
    기본 서브렛
    이 옵션을 켜면 Dispatcher Servlet이 루트 경로/아래의 정적 자원 요청을 처리할 수 있습니다. 정적 파일이 웹 응용 프로그램/css/site라면 상세하게 말해 줍니다.css, 그러면 우리는 직접/css/site를 통과할 수 있습니다.css에서 이 파일에 접근합니다.이 기능을 사용하지 않으면 정적 파일은/static 같은 다른 경로로만 비칠 수 있습니다.
    이 구성 항목은 경로/**에 매핑되고 가장 낮은 우선 순위가 있는 Default Servlet Http Request Handler를 실제로 구성합니다.Default ServletHttpRequestHandler는 모든 요청을 기본 Servlet으로 전송하기 때문에 마지막 처리 맵으로 설정해야 합니다.
    Java 구성을 사용하면 configureDefaultServletHandling(...)메서드를 열고 이 옵션을 엽니다.
    
    @Configuration
    @EnableWebMvc
    public class WebConfig extends WebMvcConfigurerAdapter {
    
      @Override
      public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
      }
    
    }
    
    
    XML 구성을 사용하는 경우 다음 행을 추가합니다.
    
    <mvc:default-servlet-handler/>
    메시지 변환
    Spring 기본 메시지 변환기를 덮어쓰려면 configure Message Converters (List > converters) 방법을 다시 쓰고 converters 매개 변수에 자신의 메시지 변환기를 추가할 수 있습니다.만약 자신의 형식 변환기를 추가하고 싶다면, extendMessageConverters () 방법을 다시 쓰십시오.
    XML 구성 파일을 사용하면 MVC 네임스페이스를 사용할 수 있습니다.
    
    <mvc:annotation-driven>
      <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
          <property name="objectMapper" ref="objectMapper"/>
        </bean>
        <bean class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter">
          <property name="objectMapper" ref="xmlMapper"/>
        </bean>
      </mvc:message-converters>
    </mvc:annotation-driven>
    
    고급 사용자 정의 구성
    위의 구성은 Spring에서 제공하는 단순화 클래스 또는 MVC 네임스페이스를 사용하여 기능을 신속하게 구성할 수 있도록 도와줍니다.때로는 더 높은 기능의 맞춤형 제작이 필요할 수도 있다. 그러면 이러한 베이스 빈의 초기화와 속성 설정을 스스로 처리해야 한다.
    Java 구성 사용자 정의
    먼저 @EnableWebMvc 메모의 정의를 살펴보겠습니다.또한 DelegatingWebMvcConfiguration 클래스를 참조하는 @Import 메모를 사용할 수 있습니다.@EnableWebMvc에 주석을 달았을 때 실제로 초기화되고 설정된 기본 클래스는 DelegatingWebMvcConfiguration입니다.
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    @Documented
    @Import(DelegatingWebMvcConfiguration.class)
    public @interface EnableWebMvc {
    }
    
    따라서 MVC를 사용자 정의하려면 첫 번째는 메모 @EnableWebMvc를 제거하는 것입니다.그리고 DelegatingWebMvcConfiguration 클래스를 계승하여 RequestMappingHandlerAdapter () 방법을 실현합니다.
    
    @Configuration
    public class WebConfig extends DelegatingWebMvcConfiguration {
    
      @Override
      @Bean
      public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
        //  
      }
    
    }
    
    
    프로젝트에서 DelegatingWebMvcConfiguration 하위 클래스와 @EnableWebMvc 주석 구성 클래스는 하나만 존재할 수 있습니다. 왜냐하면 그들이 하는 일은 사실상 같기 때문입니다.Spring MVC의 다른 구성에는 영향을 미치지 않습니다.
    사용자 정의 MVC 네임스페이스 구성
    Spring은 적절한 구성 메커니즘을 제공하지 않기 때문에 사용자 정의 구성이 더 어렵습니다.사용자 정의 MVC 네임스페이스 설정이 필요하다면, 스프링에서 제공하는 BeanPostProcessor 메커니즘을 사용하여 Bean을 감지한 후에 값을 수정하는 것을 고려할 수 있습니다.
    
    @Component
    public class MyPostProcessor implements BeanPostProcessor {
    
      public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException {
        if (bean instanceof RequestMappingHandlerAdapter) {
          //  
        }
      }
    
    }
    
    
    이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

    좋은 웹페이지 즐겨찾기