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数据操作 这篇主 ...
随机推荐
- python学习-练习题1巩固(随机数)
1.生成随机数 random.random()生成一个0-1之前的随机数
- VWware Workstation 安装CentOS系统
VWware Workstation 安装CentOS系统 下载CentOS系统镜像: 官方地址:https://www.centos.org/download/mirrors/ 在此可选择华为云服务 ...
- VS配置C++依赖包
处理好三个东西 1.头文件,Configuration Properties → VC++ Directories → Include Directories 2.静态库,Configuration ...
- Java多线程并发06——CAS与AQS
在进行更近一步的了解Java锁的知识之前,我们需要先了解与锁有关的两个概念 CAS 与 AQS.关注我的公众号「Java面典」了解更多 Java 相关知识点. CAS(Compare And Swap ...
- dom4j解析xml格式文件实例
以下给4种常见的xml文件的解析方式的分析对比: DOM DOM4J JDOM SAX Dom解析 在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工作.由于它是基于信息层次 ...
- vuepress-theme-reco + Github Actions 构建静态博客,部署到第三方服务器
最新博客链接 Github链接 查看此文档前应先了解,vuepress基本操作 参考官方文档进行配置: vuepress-theme-reco VuePress SamKirkland / FTP-D ...
- RestFul API 统一格式返回 + 全局异常处理
一.背景 在分布式.微服务盛行的今天,绝大部分项目都采用的微服务框架,前后端分离方式.前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端. ...
- 简单BBS项目开始(二)
登陆和生成图片验证码 1.生成图片 pillow 1.生成图片的模块pillow,在python中安装pillow,在Django中使用时用PIL2. 在页面上<img id="val ...
- 题解 P5663 【加工零件【民间数据】】
博客园体验更佳 讲讲我的做法 确定做法 首先,看到这道题,我直接想到的是递归,于是复杂度就上天了,考虑最短路. 如何用最短路 首先,看一张图 我们该如何解决问题? 问题:\(3\)做\(5\)阶段的零 ...
- ubuntu 16.04安装mysql server入门
1.安装mysql-server -> sudo apt-get install mysql-server 输入root密码即可 2.修改服务器配置 默认mysql-server只对本机访问,新 ...