开发Web应用
展现信息
-
MVC
模型-
Controller
:获取和处理数据 -
View
:将数据渲染到HTML
中并在浏览器中展现 Model
-
- 构建领域类
- 应用的领域指的是它要解决的主题范围
-
Lombok
库-
lombok
项目的产生就是为了省去我们手动创建getter
和setter
方法等等一些基本组件代码的麻烦,它能够在我们编译源码的时候自动帮我们生成getter
和setter
方法 - 常用注解
-
@Setter
注解在类或字段,注解在类时为所有字段生成setter
方法,注解在字段上时只为该字段生成setter
方法。 -
@Getter
使用方法同上,区别在于生成的是getter
方法。 -
@ToString
注解在类,添加toString
方法。 -
@EqualsAndHashCode
注解在类,生成hashCode
和equals
方法。 -
@NoArgsConstructor
注解在类,生成无参的构造方法。 -
@RequiredArgsConstructor
注解在类,为类中需要特殊处理的字段生成构造方法,比如final
和被@NonNull
注解的字段。 -
@AllArgsConstructor
注解在类,生成包含类中所有字段的构造方法。 -
@Data
注解在类,为类的所有字段注解@ToString
、@EqualsAndHashCode
、@Getter
的便捷方法,同时为所有非final字段
注解@Setter
。
-
- 使用
-
依赖安装
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
-
IDEA插件的安装(搜索
Lombok plugin
),重启 -
IDEA设置中编译器栏下启用
annotation processors
-
-
@Data
可以很好地处理字段的泛型参数。- 为了在为具有泛型的类构造对象时减少样板,可以使用
staticConstructor
参数来生成私有构造函数,以及返回新实例的静态方法。 - 通过这样声明:
@Data(staticConstructor =“of”)class Foo {private T x;}
- 可以通过写入来创建
Foo
的新实例:Foo.of(5);
而不必写:new Foo(5);
- 为了在为具有泛型的类构造对象时减少样板,可以使用
-
- 创建控制器类(
Controller
)-
@Slf4j
:Lombok
提供的注解-
在类中自动生成一个
SLF4J(Simple Logging Facade for Java)Logger
-
等同于
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(YourController.class);
-
-
@Controller
:将类识别为控制器,并且将其作为组件扫描的候选者 -
@RequestMapping
:指定Controller处理的请求类型-
Spring MVC
的请求映射注解注解 描述 @RequestMapping
通用的请求处理 @GetMapping
处理 HTTP GET
请求@PostMapping
处理 HTTP POST
请求@PutMapping
处理 HTTP PUT
请求@DeleteMapping
处理 HTTP DELETE
请求@PatchMapping
处理 HTTP PATCH
请求
-
-
Model
:负责在控制器和展现数据的视图之间传递数据。实际上,Model
属性中的数据将会复制到Servlet Response属性
中
-
- 设计视图
- 常用视图模版
JavaServer Pages(JSP)
-
Thymeleaf
- 增加一些额外元素属性的HTML,这些属性能够指导模版如何渲染request数据
-
th:text
:执行替换过程,将${}中的某个请求属性替换到指定位置 -
th:each
:迭代一个元素集合,为集合中的每个条目渲染HTML th:field
th:errors
th:if
FreeMarker
Mustache
Groovy
- 视图库一般与特定的
Web
框架解耦- 无法感知
Spring
模型的抽象,因此无法与控制器放到Model
中的数据协同工作 - 它们可以与
Servlet
的request属性
协作- 在
Spring
将请求转移到视图之前,他会将模型数据复制到request属性
中,这样视图模版就能访问到它们了
- 在
- 无法感知
- 常用视图模版
- 校验表单输入
-
在处理代码中加入检验规则(例如
if/then代码块
) -
Spring
支持Java的Bean校验API(Bean Validation API
,也称为JSR-303
)- 更容易地声明检验规则,不必在应用程序代码中显示编写声明逻辑
-
Validation API
以及Validation API的Hibernate实现
验证注解 验证的数据类型 说明 @AssertFalse
Boolean
,boolean
验证注解的元素值是 false
@AssertTrue
Boolean
,boolean
验证注解的元素值是 true
@NotNull
任意类型 验证注解的元素值不是 null
@Null
任意类型 验证注解的元素值是 null
@Min(value=值)
BigDecimal
,BigInteger
,
byte
,short
,int
,long
,
等任何Number
或CharSequence
(存储的是数字)子类型验证注解的元素值大于等于 @Min
指定的value
值@Max(value=值)
和 @Min
要求一样验证注解的元素值小于等于 @Max
指定的value
值@DecimalMin(value=值)
和 @Min
要求一样验证注解的元素值大于等于 @DecimalMin
指定的value
值@DecimalMax(value=值)
和 @Min
要求一样验证注解的元素值小于等于 @DecimalMax
指定的value
值@Digits(integer=
整数位数, fraction=
小数位数)
和 @Min
要求一样验证注解的元素值的整数位数和小数位数上限 @Size(min=
下限,max=上限)
字符串、 Collection
、Map
、数组等验证注解的元素值的在 min
和max
(包含)指定区间之内,如字符长度、集合大小@Past
java.util.Date
,java.util.Calendar;
Joda Time
类库的日期类型验证注解的元素值(日期类型)比当前时间早 @Future
与 @Past
要求一样验证注解的元素值(日期类型)比当前时间晚 @NotBlank
CharSequence
子类型验证注解的元素值不为空(不为 null
、去除首位空格后长度为0),不同于@NotEmpty
,@NotBlank
只应用于字符串且在比较时会去除字符串的首位空格@Length(min=
下限, max=上限)
CharSequence
子类型验证注解的元素值长度在 min
和max
区间内@NotEmpty
CharSequence
子类型、Collection
、Map
、
数组验证注解的元素值不为 null
且不为空(字符串长度不为0、集合大小不为0)@Range(min=
最小值, max=
最大值)
BigDecimal
,BigInteger
,CharSequence
,
byte
,short
,int
,long
等
原子类型和包装类型验证注解的元素值在最小值和最大值之间 @Email(regexp=
正则表达式,flag=
标志的模式)
CharSequence
子类型
(如String
)验证注解的元素值是 Email
,也可以通过regexp
和flag
指定自定义的email
格式@Pattern(regexp=
正则表达式,flag=
标志的模式)
String
,任何CharSequence
的子类型验证注解的元素值与指定的正则表达式匹配 @Valid
任何非原子类型 指定递归验证关联的对象如用户对象中有个地址对象属性,如果想在验证用户对象时一起验证地址对象的话,在地址对象上加 @Valid
注解即可级联验证
-
使用视图控制器
- 只将请求转发到视图而不做其他事情的控制器
- 实现
WebMvcConfigurer接口
- 提供了所有方法的默认实现,只需要覆盖所需要的方法即可
-
addViewControllers()
:使用它注册一个或多个视图控制器
选择视图模版库
- 如果使用
JSP
,需要将应用构建成WAR文件
并部署到传统的Servlet容器
中 - 关闭模版缓存
- 在
application.properties
中添加spring.thymeleaf.cache=false
- 在
网友评论