@ComponentScan("com.dragon.springStudy") @Configuration @EnableWebMvc public class SpringWebConfig extends WebMvcConfigurerAdapter { @Bean public InternalResourceViewResolver viewResolver(){ InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/classes/views/"); viewResolver.setSuffix(".jsp"); viewResolver.setViewClass(JstlView.class); return viewResolver; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); } @Bean public MultipartResolver multipartResolver(){ CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(); commonsMultipartResolver.setMaxUploadSize(1000000); return commonsMultipartResolver; } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(simpleInterceptor()); } @Override public void addViewControllers(ViewControllerRegistry registry) { super.addViewControllers(registry); registry.addViewController("directPage").setViewName("directPage"); registry.addViewController("servletAsync").setViewName("servletAsync"); } @Bean public SimpleInterceptor simpleInterceptor(){ return new SimpleInterceptor(); } }
public class WebInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(SpringWebConfig.class); ctx.setServletContext(servletContext); ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher",new DispatcherServlet(ctx)); servlet.addMapping("/"); servlet.setLoadOnStartup(1); servlet.setAsyncSupported(true); //开启servlet3.0+的异步方法支持 } }
二、springMvc常用注解
1、@Controller
声明控制器
2、@RequestMapping
映射web请求,注解在类上或方法上,
内部有参数,
value,表示路径,如value="path";
produces,表示返回的媒体类型和字符集
如返回json数据,则有
@RequestMapping(value = "/getJson", produces = {"application/json;charset=utf-8"}) @ResponseBody如返回xml数据,则有
@RequestMapping(value = "/getXml",produces = "application/xml;charset=UTF-8") @ResponseBody
如返回文本,则有
@RequestMapping(value = "/getText" ,produces = {"text/plain;charset=utf-8"}) @ResponseBody
实例如:
@RequestMapping(value = "/getJson", produces = {"application/json;charset=utf-8"}) @ResponseBody public Student getJson(Student stu) { stu.setName("apple"); return stu; } @RequestMapping(value = "/getXml",produces = "application/xml;charset=UTF-8") @ResponseBody public Student getXml(Student stu){ stu.setName("apple"); return stu; }
备注:添加json和xml的maven依赖
com.fasterxml.jackson.core jackson-databind 2.6.0 com.fasterxml.jackson.dataformat jackson-dataformat-xml 2.6.0
3、@ResponseBody
将返回值直接给用户,而不是表示逻辑页面
4、@RequestBody
表示请求参数在request请求体中,而不是在url后面
5、@RequestParam
表示接收请求参数
6、@PathVariable
用来接收路径中的参数
7、@RestController
是一个组合注解,是@Controller和@ResponseBody的组合,表示是一个控制器,且直接返回结果
8、@ControllerAdivce
注解在类上,开启对控制器全局配置,
如
@ControllerAdvice public class BaseControllerAdvice {}
在类内部方法上,有几下注解进行全局配置:
a)@ExceptionHandler
全局处理控制器内的异常,如
@ExceptionHandler(value = Exception.class) public String exceptionHandler(Exception e, WebRequest request, Model model){ model.addAttribute("errorMsg",e.getMessage()); return "error"; }
b)@InitBinder
用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中
@InitBinder public void initBinder(WebDataBinder webDataBinder){ webDataBinder.setDisallowedFields("name"); //忽略name值的绑定,注意是model中,如自定义的Student实例对象 webDataBinder.registerCustomEditor(Date.class,new MyDateEditor()); //定义string到Date的映射 } //自定义Date绑定格式 class MyDateEditor extends PropertyEditorSupport{ @Override public void setAsText(String text) throws IllegalArgumentException { try { Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(text); setValue(date); } catch (ParseException e) { e.printStackTrace(); } } }
c)@ModelAttribute
全局绑定键值对到Model中,也就是绑定后,全局controller内的model都有设定的值
@ModelAttribute public void addDate(Model model){ model.addAttribute("nowDate", DateFormatUtils.format(new Date(),"yyyy-MM-dd hh:mm:ss")); }当然也可以在请求方法内,通过注解@ModelAtttribute获取绑定的值,如:
@RequestMapping("/") public String index(@ModelAttribute("nowDate") String nowDate) {}