二、Spring MVC進級
10884 ワード
2.1、Spring MVC基本構成
Spring MVCのカスタム構成では、WebMvcConfigurerAdapterクラスを継承し、@EnableWebMvc注記を使用してSpring MVCの構成サポートを開始する必要があります.
2.1.1、静的資源マッピング
プログラムの静的ファイル(js、css、image)などに直接アクセスする必要がある場合、addResourceHandlersを構成に書き換える必要はありません.例:
2.1.2、遮断器の配置
インターセプタ(interceptor)は、サーブレットのFilterと同様に、各リクエスト処理の前後に関連するトラフィック処理を実現する.実装方式としては,通常のBeanにHandlerInterceptorインタフェースを実装させるか,あるいは継承クラスHandlerInterceptorAdapterクラスにカスタムブロッキングを実装させることができる.例:カスタムブロッキングDemoInterceptorは、HandlerIntercepterAdapterを継承します.
構成を追加し、Beanを注入します.
2.1.3、@ControllerAdvice
この注記により、コントローラのグローバル構成を同じ場所に置くことができ、@Controllerのクラスを注記する方法は@ExceptionHandler、@InitBinder、@ModelAttributeを使用してメソッドに注記できます.@ExceptionHandler:コントローラ内の例外をグローバルに処理します.@InitBinder:WebDataBinderを設定し、フロント要求パラメータをModelに自動的にバインドします.@ModelAttribute:キー値のペアをModelにバインドします.例:ControllerAdviceのカスタマイズ
2.1.4、その他の構成
1、ショートカットのViewController一部のコントローラでは、以下のような簡単なページジャンプコードがあります.
以下のようにaddView Controlメソッドを構成で書き換えることができます.
2.1.5、Spring MVCの高級配置
1、ファイルアップロードプロファイルアップロード機能、Spring MVCはMultipartResolverを構成してファイルをアップロードすることができる.コントローラでMultipartFile fileでファイルを受け取ります.例:MultipartResolverの構成
コントローラ:
コード:点我下一篇:Spring MVC基礎
Spring MVCのカスタム構成では、WebMvcConfigurerAdapterクラスを継承し、@EnableWebMvc注記を使用してSpring MVCの構成サポートを開始する必要があります.
2.1.1、静的資源マッピング
プログラムの静的ファイル(js、css、image)などに直接アクセスする必要がある場合、addResourceHandlersを構成に書き換える必要はありません.例:
/**
* ( )
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
registry.addResourceHandler("/assets/**").
addResourceLocations("classpath:/assets/");
}
2.1.2、遮断器の配置
インターセプタ(interceptor)は、サーブレットのFilterと同様に、各リクエスト処理の前後に関連するトラフィック処理を実現する.実装方式としては,通常のBeanにHandlerInterceptorインタフェースを実装させるか,あるいは継承クラスHandlerInterceptorAdapterクラスにカスタムブロッキングを実装させることができる.例:カスタムブロッキングDemoInterceptorは、HandlerIntercepterAdapterを継承します.
package com.dy.springmvc.interceptor;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Author:dy_bom
* Description: Bean
* Date:Created in 1:10 2018/4/12
* Copyright (c) [email protected] All Rights Reserved.
*/
public class DemoInterceptor extends HandlerInterceptorAdapter{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
long startTime = System.currentTimeMillis();
request.setAttribute("startTime",startTime);
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
long startTime =(Long) request.getAttribute("startTime");
request.removeAttribute("startTime");
long endTime = System.currentTimeMillis();
System.out.println(" :"+new Long(endTime-startTime) +"ms");
request.setAttribute("handlingTime",endTime-startTime);
}
}
構成を追加し、Beanを注入します.
/**
*
* @return
*/
@Bean
public DemoInterceptor demoInterceptor(){
return new DemoInterceptor();
}
/**
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(demoInterceptor());
}
2.1.3、@ControllerAdvice
この注記により、コントローラのグローバル構成を同じ場所に置くことができ、@Controllerのクラスを注記する方法は@ExceptionHandler、@InitBinder、@ModelAttributeを使用してメソッドに注記できます.@ExceptionHandler:コントローラ内の例外をグローバルに処理します.@InitBinder:WebDataBinderを設定し、フロント要求パラメータをModelに自動的にバインドします.@ModelAttribute:キー値のペアをModelにバインドします.例:ControllerAdviceのカスタマイズ
package com.dy.springmvc.advice;
import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.servlet.ModelAndView;
/**
* Author:dy_bom
* Description: @ControllerAdvice @Component, Bean
* Date:Created in 1:22 2018/4/12
* Copyright (c) [email protected] All Rights Reserved.
*/
@ControllerAdvice
public class ExceptionHandlerAdvice {
/**
* ,
*
* @param exception
* @return
*/
@ExceptionHandler(value = Exception.class)
public ModelAndView exception(Exception exception) {
//error
ModelAndView modelAndView = new ModelAndView("error");
modelAndView.addObject("errorMessage", exception.getMessage());
return modelAndView;
}
/**
*
* ,
* @RequestMapping
* @param model
*/
@ModelAttribute
public void addAttributes(Model model) {
model.addAttribute("msg", " ");
}
/**
* webDataBinder
* request id
* @param webDataBinder
*/
@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
webDataBinder.setDisallowedFields("id");
}
}
2.1.4、その他の構成
1、ショートカットのViewController一部のコントローラでは、以下のような簡単なページジャンプコードがあります.
@Controller
public class HelloController {
@GetMapping({"/index", "/"})
public String hello() {
return "index";
}
}
以下のようにaddView Controlメソッドを構成で書き換えることができます.
/**
*
*
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/index").
setViewName("/index");
}
2.1.5、Spring MVCの高級配置
1、ファイルアップロードプロファイルアップロード機能、Spring MVCはMultipartResolverを構成してファイルをアップロードすることができる.コントローラでMultipartFile fileでファイルを受け取ります.例:MultipartResolverの構成
/**
*
* @return
*/
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver =
new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(1000000);
return multipartResolver;
}
コントローラ:
@Controller
public class UploadController {
/**
* @param file
* @return
*/
@PostMapping("/upload")
public @ResponseBody
String upload(MultipartFile file) {
try {
FileUtils.writeByteArrayToFile(new File("/tmp/logs/" + file.getOriginalFilename()), file.getBytes());
return "OK";
} catch (Exception e) {
e.printStackTrace();
return "wrong";
}
}
}
コード:点我下一篇:Spring MVC基礎