项目练习:RuoYi: 基于SpringBoot的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。直接运行即可用RuoYi: 基于SpringBoot的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。直接运行即可用RuoYi: 基于SpringBoot的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。直接运行即可用
RuoYi: 基于SpringBoot的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。直接运行即可用 - Gitee.com
1.boot 引导
ssm—sping spring-webmvc mybatis 集成配置困难
自动配置(核心技术就是通过反射注解来配置Java bean)
spring [Java bean(创建对象) 容器] 提供IOC(控制反转)/DI(依赖注入)
IOC(控制反转):
DI(依赖注入):需要啥给你送啥
AOP(面向切面的编程):
OOP(面向对象的编程):
WebMVC(model view controller):
jpa jdbc mybatis
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
定义controller 处理请求@controller
注解在类上
处理请求在方法上加上@RequestMapping
如何获取请求参数@RequestMapping
注解的方法中定义对应的参数 就可以获得
IOC/DI 控制反转/依赖注入
要在控制反转的类上加@Component
要在注入的地方使用@Autowired
@Resource
构造方法
1.boot 二次引导
SSM(spring spring-webMVC mybatis)
自动配置(核心技术就是通过反射注解配置Java bean)
spring (Java bean 容器) 提供IOC(控制反转)/DI(依赖注入)
IOC(控制反转):
DI(依赖注入):
AOP(面向切面的编程)
回顾:OOP(面向对象的编程)
WebMVC(model view controller)
了解一下:Guice
上下对等
spring (Java bean 容器) 提供IOC(控制反转)/DI(依赖注入)
IOC(控制反转):
今天学习重点:
1.定义controller,处理请求@Controller
注解在类上
处理请求在方法上加上 @RequestMapping
2.如何获取请求参数@RequestMapping
注解的方法中定义对应的参数就可以获得
3.IOC/DI
控制反转/依赖注入
要在控制反转的类上加@Component
要在依赖注入的地方加上@Autowired
@Resource
构造方法
redirect:/student/list
表单验证分:前端,后端
前端:h5内置了一些验证input(数字 日期 email)复杂验证要通过js。
后端:spring-MVC 借助 hibernate-validator验证实现,注解式验证
引入验证(对Email进行验证):
第一步:引入依赖
spring-boot 启动器—-starter
org.springframework.boot
spring-boot-starter-validation
第二步:
在验证实体类的验证属性上加上注解
package com.bigdata09.demo2.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import java.util.Date;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Integer id;
private String name;
private String gender;
// 将string类型的时间转化为日期类型
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date born;
@Email(message = "邮箱的正确格式至少有一个@和一个.",regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$")
@NotBlank
private String email;
private Grade grade = Grade.builder().build();
private Integer GradeId;
}
第三步:控制器中注解验证@Valid
代码案例:
public String saveStudent(@Valid Student student, BindingResult bindingResult, RedirectAttributesModelMap map){ // RedirectAttributesModelMap : 闪存作用域
参数验证 @Validated 和 @Valid 的区别:
所属框架:@Validated由spring框架提供,@Valid由validation框架提供
使用位置:@Validated可以用在类型、方法和方法参数上,但是不能用在成员属性上;
@Valid可以用在方法、构造函数、方法参数和成员属性上
分组:@Validated提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制
第四步:获取验证信息BindingResult
中封装了验证信息
判断是否有验证失败的hasErrors()
方法
获取验证失败字段信息getFieldError("实体类字段名")
遇到的业务困难
保存失败时,重定向到edit,如何同时保存用户输入的错误模型,又能解决edit中查到的模型(实体)
重定向的flash作用域数据的使用
get请求和post请求的区别,用法?
数据库学完之后学习内容:
jhipster: JHipster - 现代开发人员的全栈开发平台!
jhipster.pro: http://jhipster.pro/index-cn
gitee上学习jhipster的网址: book/summary.md · seal.jing/jhipster book 上 - Gitee.com
angular: Angular
Angular
与MVN仓库对应的网站:Maven Central Repository Search
表单要设置 enctype = "multipart/form-data"
后台: MultipartFile
接受
下载文件 响应头中要设置 Content-disposition
它的值有 inline
和 attachment
inline
: 浏览器直接打开
attachment
: 表示下载保存
spring mvc
创建一个 响应实体 ResponseEntity
ResponseEntity 的泛型 可以使用两种方式 FileSystemResource
和 byte[]
byte[]
适合下文件
ResponseEntity
的创建凡是 一种 new
另一种 builder
方式 例如 ResponseEntity.ok()
自定义响应头部: HttpHeaders
文件
—>新建项目
—>Spring Initializr
—>设置相关参数
—>选择spring boot版本
—>选择依赖
—>完成
复制package com.bigdata09.springbootdemo1.demo;
import com.bigdata09.springbootdemo1.entity.Grade;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
@Controller
public class HelloController {
@RequestMapping ("/hello")
public String hello(ModelMap map){
int rd = (int) (Math.random()*10+1);
map.addAttribute("rd",rd); //
return "hello";
}
/* @RequestMapping("/hello2")
public String hello2(){
return "hello spring boot";
}*/
@RequestMapping("/test")
public String test(HttpServletRequest request){
Grade grade1 = Grade.builder().id(1).name("grade1").build();
Grade grade2 = Grade.builder().id(2).name("grade2").build();
ServletContext application = request.getServletContext();
List grades = (List) application.getAttribute("grades");
if (grades == null) {
grades = new ArrayList<>();
application.setAttribute("grades",grades);
}
grades.add(grade1);
grades.add(grade2);
return "test";
}
}