想和你们分享我眼里的代码世界🗺️ 优选系列持续更新中💫
绿色代表解释说明 黄色代表重点 红色代表精髓
SpringMVC是一个基于Java的Web框架,它使用了MVC(模型-视图-控制器)的设计模式,将Web应用程序分为三个层次:模型层负责封装业务逻辑和数据,视图层负责展示用户界面,控制器层负责处理用户请求和调用模型层和视图层。
本文将详细介绍如何使用SpringMVC来开发一个简单而优雅的Web应用程序。我们将从创建一个Maven项目开始,然后配置SpringMVC所需的依赖和文件,接着编写控制器类和视图页面,最后运行我们的应用程序。通过本文,你将能够快速入门和掌握SpringMVC的核心概念和功能。
目录
一、Maven简介及安装
二、 SpringMVC的基本使用
(一)SpringMVC简介
(二)SpringMVC项目的基础搭建
1.引入坐标
2.编写一个初始化类
3.编写配置类,SpringConfig.java
4.编写配置类,WebConfig.java
5.编写Controller类
三、SpringMVC框架提供的高效功能
(一)请求参数及其属性
(二)bean对象自动生成get、set、构造器
(三)数据校验
(四)异常处理
(五)拦截器
1️⃣常用注解大全
2️⃣常用配置文件方法大全
3️⃣常用坐标配置大全
一、Maven简介及安装
maven是用于管理项目所依赖的jar包。以前我们用到别人开发的jar包,需要自己去找jar包,并且手动导入到项目中。通过Maven,我们只需要在Web项目中的pom.xml文件中导入坐标(告诉Maven这个包在哪),就会自动导入jar包。使用maven的jar包时,maven先中本地仓库中去查找,如果找不到,再去中央仓库中去查找。
坐标格式如下:
<dependency><groupId>commons-dbutils</groupId><artifactId>commons-dbutils</artifactId><version>1.7</version>
</dependency>
maven配置和安装非本文重点,可以参考这个博客:史上最全安装Maven教程_mvnw 按照_小Du猿的博客-CSDN博客
二、 SpringMVC的基本使用
(一)SpringMVC简介
SpringMVC是一个表现层(Servlet层)框架,主要用于处理前端发来的请求。它代替了第1弹中([Java优选系列第1弹]如何优化Java三层架构开发效率?三个实用技巧分享_高垚淼的博客-CSDN博客),我们所说的使用单纯Servlet来进行开发的模型,极大的提高了开发效率。
使用SpringMVC有以下几个优点:
🔸它与Spring框架完美集成,可以利用Spring的依赖注入、事务管理、安全等特性。
🔸它支持多种视图技术,如JSP、Thymeleaf、Freemarker等,可以灵活地选择适合的视图渲染方式。
🔸它提供了丰富的注解和接口,可以方便地实现请求映射、参数绑定、数据校验、异常处理等功能。
🔸它采用前端控制器模式,通过一个DispatcherServlet来统一处理所有的HTTP请求,并将它们分发给相应的处理器,从而简化了Web开发流程。(将在第三弹专门发布一篇文章,解析SpringMVC的底层实现机制)
在实际开发中,使用注解进行SpringMVC项目的创建更广泛,因此,本文基于注解开发的方式进行讲解,基于xml方式不进行赘述。
(二)SpringMVC项目的基础搭建
1.引入坐标
打开pom.xml文件,并添加以下语句,引入构建SpringMVC项目的jar包。
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.24</version></dependency>
2.编写一个初始化类
单独新建一个类,继承AbstractAnnotationConfigDispatcherServletInitializer类并实现其三个默认方法。
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {/*** 配置spring的配置类* @return*/@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}/*** 配置一个springmvc的配置类* @return*/@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{WebConfig.class};}/*** 配置一个路径,告诉tomcat哪些请求要交给springmvc来处理* / 所有的请求都交给springmvc处理* @return*/@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}
}
3.编写配置类,SpringConfig.java
创建一个config包,在包中编写配置类,SpringConfig.java(名字可以随便取)。
//@Configuration标识这是一个配置类
@Configuration
public class SpringConfig {
}
4.编写配置类,WebConfig.java
在config包中编写配置类,WebConfig.java。
//@Configuration标识这是一个配置类
@Configuration
//配置一个要扫描的包
@ComponentScan("com.woniu.springmvc")
public class WebConfig {
}
5.编写Controller类
创建一个controller包,编写处理请求的Controller类。
//这是一个控制器类,用于处理前端发来的请求
@Controller
public class HelloController {//把返回的内容直接返回给浏览器(默认情况下,会去找相应的文件)@ResponseBody//指定处理哪个路径的请求@RequestMapping("/test")public String test(){System.out.println("请求来了");return "woniu蜗牛";}}
这样我们就完成了一个最基本的SpringMVC项目的创建,只需要在 Controller类中编写接收请求的各种方法即可。
三、SpringMVC框架提供的高效功能
(一)请求参数及其属性
@RequestParam注解标识获取前端传过来的参数
@ResponseBody注解标识直接返回数据的内容给前端(不加,默认是返回网页资源)
@ResponseBody
@RequestMapping("/test")
public String test(//@RequestParam指定要获取哪一个参数//value/name指定参数名称//required是否为必须传的参数,默认是true//defaultValue在没传参数的情况下,指定一个默认值。@RequestParam(value = "name",required = false) String name,@RequestParam(value = "age",required = false,defaultValue = "100") Integer age){System.out.println(name+":"+age);return "woniu蜗牛";
}//大多数情况下
@ResponseBody
@RequestMapping("/test1")
public String test1(String name,Integer age){//简写,要求形参名必须和参数名一样System.out.println(name);System.out.println(age);return "test1";
}
(二)bean对象自动生成get、set、构造器
-
导入坐标,lombok
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency>
-
给bean对象加上注释@get、@set、@ToString、@NoArgsConsturctor(以上可以用@Data替换)、@AllArgsConsturctor
(三)数据校验
- 引入坐标
- 在验证的实体类的属性上,标注相应注解如@min(value = 10)
-
在方法的参数中为要验证的实体类,标注相应注解@valid
-
获取错误消息,添加参数BindingResault,这个参数必须放在验证类参数的后面一个
- 可以自定义错误信息,在注解中写
(四)异常处理
- 加上注解@EsceptionHandler,处理当前类。出异常会自动运行
-
全局异常处理:单独创建一个处理异常类并加上@RestControlleAdvice注解标识,放入同一个异常处理方法(别忘记注解)
-
全局异常和局部异常处理,依旧遵循就近原则
(五)拦截器
-
编写拦截器类实现HandlerInterceptor接口,并实现其中的三个方法
PreHandle() 返回true才会继续执行postHandl()和afterCompletion();postHandl()执行完才会继续执行afterCompletion()。可以用于进行登录检查、权限验证等操作
PostHandl() 可以给请求绑定数据。可以用于对模型数据或视图进行处理或修改。该方法的参数modelAndView是一个模型和视图对象,包含了控制器方法返回的数据和视图名称。
afterCompletion() ,可以接收异常。用于进行一些资源清理、性能监控等操作。该方法的参数ex是一个异常对象,表示控制器方法或视图渲染过程中抛出的异常,如果没有异常,则为null。
- 在配置类中,添加拦截器
附录:
1️⃣常用注解大全
- @AllArgsConstructor 标识bean对象生成全参构造器
- @NoArgsConstructor 标识bean对象生成无参构造器
- @Configuration 标识是配置类
- @Controller 标识是控制层
- @ComponentScan("全类名") 标识作用的控制层
- @Data 标识bean对象自动生成get、set、toStirng、无参构造器方法(注意:如果@Data和@AllArgsConstructor一起使用,无参构造器会被覆盖,需要手动再创建一次@NoArgsConstructor)
- @ExceptionHandler 用于处理控制器中发生的异常,可以指定异常类型和返回值
- @RestControllerAdvice 标识该类中的异常方法作用于全局(类似于RestController,等价于@ResponseBody+ControllerAdvice)
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 标识自动转成指定格式(注意,前端的格式需要与此对应,可用value-format)
- @ModelAttribute 用于绑定请求参数到模型属性上,可以在方法或参数上使用
- @PathVariable 标识将(形如:/xx/1 )请求中的参数绑定到方法参数上
- @RequestBody 标识将接收的Json字符串转为Java对象
- @RequestMapping(value = "路径" , Method = RequestMethod.post) 标识访问的url路径(使用@getMapping、@postMapping代替)
- @ResponseBody 标识将该变量直接返回给页面
- @RestController 作用等于@ResponseBody+@Controller
- @RequestParam 标识将(形如:/xx?name=1 )请求中的参数绑定到方法参数上(如果请求参数和方法参数相同,可以省略)
- @SessionAttributes(value = "xx") 标识存储数据到Map(Request请求域)中时,同时放入到Session域中
2️⃣常用配置文件方法大全
- 打开页面网页资源的访问权限
@Overrideprotected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}
2.添加自定义格式化器和转换器
protected void addFormatters(FormatterRegistry registry) {super.addFormatters(registry);registry.addConverter(new DateConverter());}
3. 后端中,将对象转为Json字符串。用于扩展或修改已有的消息转换器列表
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {//添加一个消息转换器,可以把对象自动转换成jsonconverters.add(new MappingJackson2HttpMessageConverter());}
(这里想和大家分享的是,前端使用Axios发送携带对象的请求,会自动转为Json字符串发送;接收携带Json字符串的相应,会自动转为对象。这真的很好用,都不用转来转去了)
3️⃣常用坐标配置大全
1.使用SpringMVC框架
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.24</version></dependency>
2.后端对象转为Json字符串
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.14.1</version>
</dependency>
3.Bean对象生成set、get等方法
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency>
4.处理LocalDateTime
<dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId><version>2.14.2</version></dependency>
5.数据校验
<dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>6.2.5.Final</version></dependency>
6.文件上传
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency>
以上就是本文的全部内容啦,确定不来个点赞👍和收藏💖嘛~