开发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:fieldth:errorsth:if
FreeMarkerMustacheGroovy
- 视图库一般与特定的
Web框架解耦- 无法感知
Spring模型的抽象,因此无法与控制器放到Model中的数据协同工作 - 它们可以与
Servlet的request属性协作- 在
Spring将请求转移到视图之前,他会将模型数据复制到request属性中,这样视图模版就能访问到它们了
- 在
- 无法感知
- 常用视图模版
- 校验表单输入
-
在处理代码中加入检验规则(例如
if/then代码块) -
Spring支持Java的Bean校验API(Bean Validation API,也称为JSR-303)- 更容易地声明检验规则,不必在应用程序代码中显示编写声明逻辑
-
Validation API以及Validation API的Hibernate实现验证注解 验证的数据类型 说明 @AssertFalseBoolean,boolean验证注解的元素值是 false@AssertTrueBoolean,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(包含)指定区间之内,如字符长度、集合大小@Pastjava.util.Date,java.util.Calendar;Joda Time类库的日期类型验证注解的元素值(日期类型)比当前时间早 @Future与 @Past要求一样验证注解的元素值(日期类型)比当前时间晚 @NotBlankCharSequence子类型验证注解的元素值不为空(不为 null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的首位空格@Length(min=下限, max=上限)CharSequence子类型验证注解的元素值长度在 min和max区间内@NotEmptyCharSequence子类型、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
- 在










网友评论