开发Web应用

开发Web应用

展现信息

  • MVC模型
    • Controller:获取和处理数据
    • View:将数据渲染到HTML中并在浏览器中展现
    • Model
  • 构建领域类
    • 应用的领域指的是它要解决的主题范围
    • Lombok
      • lombok项目的产生就是为了省去我们手动创建gettersetter方法等等一些基本组件代码的麻烦,它能够在我们编译源码的时候自动帮我们生成gettersetter方法
      • 常用注解
        • @Setter 注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
        • @Getter 使用方法同上,区别在于生成的是getter方法。
        • @ToString 注解在类,添加toString方法。
        • @EqualsAndHashCode 注解在类,生成hashCodeequals方法。
        • @NoArgsConstructor 注解在类,生成无参的构造方法。
        • @RequiredArgsConstructor 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
        • @AllArgsConstructor 注解在类,生成包含类中所有字段的构造方法。
        • @Data 注解在类,为类的所有字段注解@ToString@EqualsAndHashCode@Getter的便捷方法,同时为所有非final字段注解@Setter
      • 使用
        • 依赖安装

          
              org.projectlombok
              lombok
              true
          
          
        • 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中的数据协同工作
      • 它们可以与Servletrequest属性协作
        • Spring将请求转移到视图之前,他会将模型数据复制到request属性中,这样视图模版就能访问到它们了
  • 校验表单输入
    • 在处理代码中加入检验规则(例如if/then代码块

    • Spring支持Java的Bean校验APIBean Validation API,也称为JSR-303

      • 更容易地声明检验规则,不必在应用程序代码中显示编写声明逻辑
    • Validation API以及Validation API的Hibernate实现

      验证注解 验证的数据类型 说明
      @AssertFalse Boolean,boolean 验证注解的元素值是false
      @AssertTrue Boolean,boolean 验证注解的元素值是true
      @NotNull 任意类型 验证注解的元素值不是null
      @Null 任意类型 验证注解的元素值是null
      @Min(value=值) BigDecimalBigInteger,
      byte,short, int, long
      等任何NumberCharSequence
      (存储的是数字)子类型
      验证注解的元素值大于等于@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、数组等
      验证注解的元素值的在minmax(包含)指定区间之内,如字符长度、集合大小
      @Past java.util.Date,
      java.util.Calendar;
      Joda Time类库的日期类型
      验证注解的元素值(日期类型)比当前时间早
      @Future @Past要求一样 验证注解的元素值(日期类型)比当前时间晚
      @NotBlank CharSequence子类型 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty@NotBlank只应用于字符串且在比较时会去除字符串的首位空格
      @Length(min=
      下限, max=上限)
      CharSequence子类型 验证注解的元素值长度在minmax区间
      @NotEmpty CharSequence子类型、
      CollectionMap
      数组
      验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
      @Range(min=
      最小值, max=
      最大值)
      BigDecimal,BigInteger,
      CharSequence,
      byte, short, int, long
      原子类型和包装类型
      验证注解的元素值在最小值和最大值之间
      @Email(regexp=
      正则表达式,flag=
      标志的模式)
      CharSequence子类型
      (如String
      验证注解的元素值是Email,也可以通过regexpflag指定自定义的email格式
      @Pattern(regexp=
      正则表达式,flag=
      标志的模式)
      String,任何
      CharSequence的子类型
      验证注解的元素值与指定的正则表达式匹配
      @Valid 任何非原子类型 指定递归验证关联的对象如用户对象中有个地址对象属性,如果想在验证用户对象时一起验证地址对象的话,在地址对象上加@Valid注解即可级联验证

使用视图控制器

  • 只将请求转发到视图而不做其他事情的控制器
  • 实现WebMvcConfigurer接口
    • 提供了所有方法的默认实现,只需要覆盖所需要的方法即可
    • addViewControllers():使用它注册一个或多个视图控制器

选择视图模版库

  • 如果使用JSP,需要将应用构建成WAR文件并部署到传统的Servlet容器
  • 关闭模版缓存
    • application.properties中添加
      • spring.thymeleaf.cache=false

Reference

  • Spring实战 第5版
  • 优雅的校验参数-javax.validation

你可能感兴趣的:(开发Web应用)