Spring MVC控制器使用
获取请求参数
模型驱动:Controller对象构造时Spring MVC会自动构建一个Model对象(Map类型),用于存放请求相关的值,比如原来在request.setAttribute()中的值。请求从WEb容器到底Controller会经过一系列的过滤器,实现如类型转换的功能。
具体提供以下几种方式获取请求相关参数的值:
- 直接属性取值@RequestParam
- 对象取值
- 获取请求URL中的值@PathVariable,获取请求头中的值@RequestHeader等
传递数据完成响应
ModelMap、Model、ModelAndView
- Spring MVC中用来存放数据的有ModelMap、Model、ModelAndView三个对象,其中ModelMap、Model由拦截器自动创建,在Controller的功能方法之前运行
- 也可以使用@ModelAttribute注解自定义取值及赋值方法
- ModelAndView对象是在Model的基础上添加了视图对象,需自行创建
- 赋值和取值能力ModelMap < Model < ModelAndView
使用容器对象
Spring MVC使用容器对象
- 在Spring MVC的Controller中使用容器对象(Request、Session等),可以分为耦合方式和非耦合方式
- 耦合方式即通过接口在Controller中直接获取容器对象
- 非耦合方式即通过Spring MVC提供的接口进行注入
Thymeleaf模板引擎
Spring MVC视图层解决方案
- Spring MVC支持多种View层解决方案
- 传统的JSP、FreeMarker等在组件化和去耦合上有明显缺点,目前Spring MVC流行使用Thymeleaf进行视图渲染
- Thymeleaf主要特点:数据和HTML的分离
<p th:text="${message}">Hello World!</p>
@PostMapping("/login")
public String login(Account account,Model model){
if(service.login(account)!=null){
return "success";
}
else{
model.addAttribute("message","用户名或密码错误");
return "login";
}
}
Spring MVC拦截器
Spring MVC拦截器类似于Servlet技术中的过滤器,用于对请求进行前置和后置的过滤,实现系统的plug-in功能,达到业务功能部分和非业务功能部分解耦的目的
Spring MVC拦截器实现机制是基于Spring AOP实现的,和servlet中的过滤器及其他Web表现出框架的过滤/拦截器实现机制不同
——动态代理方法即可
- 通过HandlerInterceptor实现接口拦截器
-
- preHandle:请求到达前置处理方法
- postHandle:请求处理后置处理方法
- afterCompletion:响应处理后置处理
SpringBoot简介
SpringBoot是为了简化Spring框架的使用,推出的一个组件(工具)
主要功能
- Spring Boot Starter:将常用的依赖进行分组整合,合并到一个依赖中
- 自动配置:条件化支撑特性,自动化推测和配置bean
- 命令行接口(CLI):结合Groovy的特点,简化Spring应用开发
- Actuator:提供Spring框架的管理功能
主要特点
- 极低的学习成本
- 开发可独立运行的Web应用
- “约定优于配置”,极大提高了开发效率
- 简单的组建依赖,自动发现与自动装配
- 提供运行时的应用监控
- 提供与分布式架构、云计算和大数据组件的良好集成
SpringBoot应用的入口类:
- 必须有@SpringBootApplication注解
- 通过应用SpringApplication.run()方法启动
package org.csu.mypetstore;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("org.csu.mypetstore.persistence")
public class MypetstoreApplication {
public static void main(String[] args) {
SpringApplication.run(MypetstoreApplication.class, args);
}
}
启动流程:
加载配置文件(application.properties)——自动装配——加载组件(@Repository|@Controller|@Entity . . . )——应用初始化
常用的application.properties
#tomcat服务器使用的端口
server.port=80
#Spring JDBC数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/mypetstore
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=密码
#mybatis配置
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.type-aliases-package=org.csu.mypetstore.domain
mybatis.configuration.lazy-loading-enabled=false
#项目运行时在控制台输出sql语句等信息
logging.level.org.csu.mypetstore.persistence=debug