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数据操作 这篇主 ...
随机推荐
- MongoDB复制集概念架构浅析
一.复制集的作用 (1) 高可用 防止设备(服务器.网络)故障. 提供自动failover 功能. 技术来保证数 (2) 灾难恢复 当发生故障时,可以从其他节点恢复. (3) 功能隔离 用于分析.报表 ...
- ggplot2(5) 工具箱
5.1 简介 ggplot2的图层化架构鼓励我们以一种结构化的方式来设计和构建图形.本章旨在概述可用的几何对象和统计变换,在文中逐个详述.每一节都解决一个特定的作图问题. 5.2 图层叠加的总体策略 ...
- Redis集群搭建及选举原理
redis集群简述 哨兵模式中如果主从中master宕机了,是通过哨兵来选举出新的master,在这个选举切换主从的过程,整个redis服务是不可用的.而且哨兵模式中只有一个主节点对外提供服务,因此没 ...
- async,await怎么用
async声明一个函数是异步的,await用于等待异步完成,并且await只能在async中使用. 使用async,await并行处理请求,速度减半: 将多个promise直接发起请求,先执行asyn ...
- flask连接数据库的URI书写格式
1. MySQL mysql://username:password@hostname/database 2. PostgreSQL postgresql://username:password@ho ...
- go源码分析(二) 使用go http包开发web时遇到的坑之重复注册Handle路由
我们使用Handle注册http时 如果添加两行,即重复注册函数. http.HandleFunc("/",index) http.HandleFunc("/" ...
- C# 获取系统所有字体
获取已安装的所有字体列表 System.Drawing.FontFamily StringBuilder str = ); InstalledFontCollection fonts = new In ...
- 再刷JVM-JVM运行时数据区域
前言 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域有各自的用途,以及创建和销毁的时机,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程 ...
- SpringBoot源码分析(一)@SpringBootApplication解析
@SpringBootApplication解析 三层注解 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(exclu ...
- android 练习效果(界面一)