Spring MVC 笔记--配置基于JavaConfig
主要使用基于 JavaConfig 方式配置
配置 DispatcherServlet
通过继承抽象类AbstractAnnotationConfigDispatcherServletInitializer来自动配置 DispatcherServlet 和 Spring 应用上下文(不需在 xml 中配置)
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
// 指定 Spring 应用上下文配置类(主要配置 web 组件的 Bean)
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
// 相对应的另一个应用上下文配置类(应用中的其他 Bean)
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
// 将 DispatcherServlet 映射到 "/"
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
其中 WebConfig 主要配置 web 组件相关的 Bean,如控制器、视图解析器以及处理映射器等,内容大致如下
@Configuration // 标志这个类为配置类
@EnableWebMvc // 启用注解驱动的 Spring MVC,同xml配置方式的<mvc:annotation-driven>
@ComponentScan("spitter.web") // 扫描这个包中的 Bean 组件
public class WebConfig extends WebMvcConfigurerAdapter{
/**
* 配置视图解析器
*/
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
/**
* 配置静态资源的处理
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
} // 其他 web 相关 Bean 等...
}
RootConfig 配置除 web 组件外的其他 Bean,内容大致如下
@Configuration
// 配置扫描的包,以及过滤条件
@ComponentScan(basePackages = {"spitter"}, excludeFilters = {
@Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)})
public class RootConfig {
// Bean 等
}
WebConfig 与 RootConfig 配置内容的区别具体可参考如下的 Spring 文档中的图片

不过这个不是强制要分开的,我们也可以把它们配置在一个文件中

添加 Controller 等
可以在相应位置添加对应 Controller 、jsp 文件等
列一个简单的 Controller
@Controller
@RequestMapping("/")
public class HomeController {
@RequestMapping(method = RequestMethod.GET)
public String home() {
return "home";
}
}
文件结构
文件整体结构如下:

上面的内容就是一个简单的基于 SpringMVC 的应用,下面来说一下 SpringMVC 的其他功能
数据校验
添加实现 Java Validation API 的 jar 包,如 Hibernate Validator
在实体类中对应字段使用相应的注解,如 @NotNull、@Size、@Max、@Min 等
在控制器中的使用
@RequestMapping(value="/", method=RequestMethod.GET)
public String processRegistration(@Valid Spitter spitter, Errors errors) {
if (errors.hasErrors()) {
return "errorpage"; // 校验错误,进入错误页面
}
// 执行业务操作
return "successpage";
}
文件上传
如要进行文件上传,需配置 multipart 解析器,可以选择如下其中的一种配置
CommonsMultipartResolver : 使用 Jakarta Commons FileUpload 解析 multipart 请求
StandardServletMultipartResolver : 依赖于 Servlet 3.0 对 multipart 请求的支持
@Bean
public MultipartResolver multipartResolver() throws IOException {
// 使用 CommonsMultipartResolver 解析器
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setUploadTempDir(new FileSystemResource("aa/bb")); // 文件临时保存目录
multipartResolver.setMaxUploadSize(2048000); // 上传文件的大小上限
multipartResolver.setMaxInMemorySize(0); // 当文件达到这个设置大小时,将写入到临时文件路径中
return multipartResolver; // 使用 StandardServletMultipartResolver 解析器
return new StandardServletMultipartResolver();
}
如果选择使用 StandardServletMultipartResolver 解析器,则其中的配置需要在 Servlet 中进行,在这个记录中,就是在之前配置的 SpittrWebAppInitializer 类中添加如下内容(重写 customizeRegistration 方法):
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
// 省略内容见上面的对应文件
@Override
protected void customizeRegistration(Dynamic registration) {
registration.setMultipartConfig(new MultipartConfigElement("/tmp/spittr/uploadss", 2048000, 4096000, 0));
}
}
其中 MultipartConfigElement 有四个参数,分别为:
临时路径的位置
上传文件的最大容量,以字节为单位(默认无限制)
整个 multipart 请求的最大容量
在上传的过程中,如果文件达到指定大小,将会写入到临时文件路径中(默认值为0)
对应的控制器中,可以使用 MultipartFile 获取文件,进行后续操作
处理异常
将异常映射为状态码: 在异常上面添加注解 @ResponseStatus(value = HttpStatus.NOT_FOUND, reason ="")
编写异常处理方法:
@ExceptionHandler(DuplicateException.class)
public String handleDuplidateException() {
return "error";
}
这个方法将会拦截所在类中的所有异常,进行处理
如果我们想要一个能处理所有控制器方法中异常的功能,则需要使用控制器通知(@ControllerAdvice)
@ControllerAdvice
public class AppWideExceptionHandler {
@ExceptionHandler(DuplicateException.class)
public String handleDuplidateException() {
return "error";
} // ...
}
Spring MVC 笔记--配置基于JavaConfig的更多相关文章
- Spring MVC的配置和使用
Spring MVC的配置和使用 笔记仓库:https://github.com/nnngu/LearningNotes Spring MVC需要的jar包 文章中 Spring MVC 使用的版本是 ...
- Spring MVC 事务配置
Spring MVC事务配置 要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法: 一. XML,使用tx标签配置拦截器实现事务 一. ...
- spring mvc+myBatis配置详解
一.spring mvc Spring框架(框架即:编程注解+xml配置的方式)MVC是Spring框架的一大特征,Spring框架有三大特征(IOC(依赖注入),AOP(面向切面),MVC(建模M- ...
- [转]Spring MVC 事务配置
Spring MVC事务配置 要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法: <tx:advice/>就是告诉事务管理器:怎么做 ...
- 【Java Web开发学习】Spring MVC 开始配置
Spring MVC 开始配置 转载:http://www.cnblogs.com/yangchongxing/p/8871370.htm 学习搭建最简单的Spring MVC框架. ======== ...
- Spring MVC国际化配置
Spring MVC国际化配置 前言 项目开发中要考虑支持国际化,框架选用的是Spring MVC框架,那么问题来了Spring MVC如何配置并实现国际化. 实现过程(Maven项目) 对于Spri ...
- Spring MVC(配置、入门)
Spring MVC 框架的模块 什么是Spring的MVC框架? Spring 配备构建Web 应用的全功能MVC框架.Spring可以很便捷地和其他MVC框架集成,如Struts,Spr ...
- Maven 工程下 Spring MVC 站点配置 (三) C3P0连接池与@Autowired的应用
Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 前两篇文章主要是对站点和数据库操作配置进行了演示,如果单 ...
- Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作
详细的Spring MVC框架搭配在这个连接中: Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 这篇主 ...
随机推荐
- Redis系列五 - 哨兵、持久化、主从
问:骚年,都说Redis很快,那你知道这是为什么吗? 答:英俊潇洒的面试官,您好.我们可以先看一下 关系型数据库 和 Redis 本质上的区别. Redis采用的是基于内存的,采用的是单进程单线程模型 ...
- Core + Vue 后台管理基础框架3——后端授权
1.前言 但凡业务系统,授权是绕不开的一环.见过太多只在前端做菜单及按钮显隐控制,但后端裸奔的,觉着前端看不到,系统就安全,掩耳盗铃也好,自欺欺人也罢,这里不做评论.在.NET CORE中,也见过不少 ...
- Java自学路线图之Java基础自学
自学Java要从Java基础语法开始自学,自学Java的过程中打好基础是很重要的!首先自学:面向对象基础,API基础,集合基础.这些对Java小白的数学和英语能力的要求门槛不高,在学习的过程中积累相应 ...
- css中:overflow:hidden清除浮动的原理
要想彻底清除浮动的影响,适合的属性不是 clear 而是 overflow. 一般使用 overflow:hidden,利用 BFC 的“结界”特性彻底解决浮动对外部或兄弟元素的影响. 1. 前言: ...
- 常用计算机CMD 命令
cd\ '返回到根目录 cd.. '返回到上一级目录 1 cd 显示当前目录名或改变当前目录. 2 dir 显示目录中的文件和子目录列表. 3 md 创建一个目录. 4 mkdir 创 ...
- rem - 移动前端自适应适配布局解决方案和比较(转载)
原文链接:http://caibaojian.com/mobile-responsive-example.html 互联网上的自适应方案到底有几种呢?就我个人实践所知,有这么几种方案:· 固定一个某些 ...
- Jquery 系列化表单
大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法.不过,我们可以写一个插件实现. 我在网上看到有人用替换的方法,先用 ...
- 0919-The Standard of Code Review
The primary purpose of code review is to make sure that the overall code health of Google’s code bas ...
- ASP.NET MVC升级到ASP.NET Core MVC踩坑小结
写在前面 ASP.NET Core是微软新推出的支持跨平台.高性能.开源的开发框架,它的优势不必多说,因为已经说得太多了.当然,现在依然有着数量庞大的系统运行于.NET Framework上,由于有大 ...
- 类与对象 CG作业1. 复数类Comple 。
问题描述]一个完整的复数由实数部分和序数部分构成,请定义一个复数类,含有两个私有属性realPart和imagPart分别表示复数的实部和虚部,三个成员函数:initComplex实现复数成员变量的初 ...