開發(fā)Web應(yīng)用

開發(fā)Web應(yīng)用

展現(xiàn)信息

  • MVC模型
    • Controller:獲取和處理數(shù)據(jù)
    • View:將數(shù)據(jù)渲染到HTML中并在瀏覽器中展現(xiàn)
    • Model
  • 構(gòu)建領(lǐng)域類
    • 應(yīng)用的領(lǐng)域指的是它要解決的主題范圍
    • Lombok
      • lombok項(xiàng)目的產(chǎn)生就是為了省去我們手動(dòng)創(chuàng)建gettersetter方法等等一些基本組件代碼的麻煩晦攒,它能夠在我們編譯源碼的時(shí)候自動(dòng)幫我們生成gettersetter方法
      • 常用注解
        • @Setter 注解在類或字段,注解在類時(shí)為所有字段生成setter方法,注解在字段上時(shí)只為該字段生成setter方法蘑拯。
        • @Getter 使用方法同上乙濒,區(qū)別在于生成的是getter方法嘱腥。
        • @ToString 注解在類殿雪,添加toString方法钧栖。
        • @EqualsAndHashCode 注解在類嘿悬,生成hashCodeequals方法实柠。
        • @NoArgsConstructor 注解在類,生成無參的構(gòu)造方法善涨。
        • @RequiredArgsConstructor 注解在類窒盐,為類中需要特殊處理的字段生成構(gòu)造方法,比如final和被@NonNull注解的字段钢拧。
        • @AllArgsConstructor 注解在類蟹漓,生成包含類中所有字段的構(gòu)造方法。
        • @Data 注解在類源内,為類的所有字段注解@ToString葡粒、@EqualsAndHashCode@Getter的便捷方法膜钓,同時(shí)為所有非final字段注解@Setter嗽交。
      • 使用
        • 依賴安裝

          <dependency>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <optional>true</optional>
          </dependency>
          
        • IDEA插件的安裝(搜索Lombok plugin),重啟

        • IDEA設(shè)置中編譯器欄下啟用annotation processors

      • @Data可以很好地處理字段的泛型參數(shù)颂斜。
        • 為了在為具有泛型的類構(gòu)造對(duì)象時(shí)減少樣板夫壁,可以使用staticConstructor參數(shù)來生成私有構(gòu)造函數(shù),以及返回新實(shí)例的靜態(tài)方法沃疮。
        • 通過這樣聲明:
          • @Data(staticConstructor =“of”)class Foo {private T x;}
          • 可以通過寫入來創(chuàng)建Foo的新實(shí)例:Foo.of(5); 而不必寫:new Foo(5);
  • 創(chuàng)建控制器類(Controller
    • @Slf4j:Lombok提供的注解

      • 在類中自動(dòng)生成一個(gè)SLF4J(Simple Logging Facade for Java)Logger

      • 等同于

        private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(YourController.class);
        
    • @Controller:將類識(shí)別為控制器盒让,并且將其作為組件掃描的候選者

    • @RequestMapping:指定Controller處理的請(qǐng)求類型

      • Spring MVC的請(qǐng)求映射注解

        注解 描述
        @RequestMapping 通用的請(qǐng)求處理
        @GetMapping 處理HTTP GET請(qǐng)求
        @PostMapping 處理HTTP POST請(qǐng)求
        @PutMapping 處理HTTP PUT請(qǐng)求
        @DeleteMapping 處理HTTP DELETE請(qǐng)求
        @PatchMapping 處理HTTP PATCH請(qǐng)求
    • Model:負(fù)責(zé)在控制器和展現(xiàn)數(shù)據(jù)的視圖之間傳遞數(shù)據(jù)。實(shí)際上司蔬,Model屬性中的數(shù)據(jù)將會(huì)復(fù)制到Servlet Response屬性

  • 設(shè)計(jì)視圖
    • 常用視圖模版
      • JavaServer Pages(JSP)
      • Thymeleaf
        • 增加一些額外元素屬性的HTML糯彬,這些屬性能夠指導(dǎo)模版如何渲染request數(shù)據(jù)
        • th:text:執(zhí)行替換過程,將${}中的某個(gè)請(qǐng)求屬性替換到指定位置
        • th:each:迭代一個(gè)元素集合葱她,為集合中的每個(gè)條目渲染HTML
        • th:field
        • th:errors
        • th:if
      • FreeMarker
      • Mustache
      • Groovy
    • 視圖庫一般與特定的Web框架解耦
      • 無法感知Spring模型的抽象撩扒,因此無法與控制器放到Model中的數(shù)據(jù)協(xié)同工作
      • 它們可以與Servletrequest屬性協(xié)作
        • Spring將請(qǐng)求轉(zhuǎn)移到視圖之前,他會(huì)將模型數(shù)據(jù)復(fù)制到request屬性中,這樣視圖模版就能訪問到它們了
  • 校驗(yàn)表單輸入
    • 在處理代碼中加入檢驗(yàn)規(guī)則(例如if/then代碼塊

    • Spring支持Java的Bean校驗(yàn)APIBean Validation API搓谆,也稱為JSR-303

      • 更容易地聲明檢驗(yàn)規(guī)則炒辉,不必在應(yīng)用程序代碼中顯示編寫聲明邏輯
    • Validation API以及Validation API的Hibernate實(shí)現(xiàn)

      驗(yàn)證注解 驗(yàn)證的數(shù)據(jù)類型 說明
      @AssertFalse Boolean,boolean 驗(yàn)證注解的元素值是false
      @AssertTrue Boolean,boolean 驗(yàn)證注解的元素值是true
      @NotNull 任意類型 驗(yàn)證注解的元素值不是null
      @Null 任意類型 驗(yàn)證注解的元素值是null
      @Min(value=值) BigDecimalBigInteger,
      byte,short, int, long泉手,
      等任何NumberCharSequence
      (存儲(chǔ)的是數(shù)字)子類型
      驗(yàn)證注解的元素值大于等于@Min指定的value
      @Max(value=值) @Min要求一樣 驗(yàn)證注解的元素值小于等于@Max指定的value
      @DecimalMin(value=值) @Min要求一樣 驗(yàn)證注解的元素值大于等于@DecimalMin指定的value
      @DecimalMax(value=值) @Min要求一樣 驗(yàn)證注解的元素值小于等于@DecimalMax指定的value
      @Digits(integer=
      整數(shù)位數(shù), fraction=
      小數(shù)位數(shù))
      @Min要求一樣 驗(yàn)證注解的元素值的整數(shù)位數(shù)和小數(shù)位數(shù)上限
      @Size(min=
      下限,max=上限)
      字符串黔寇、Collection
      Map斩萌、數(shù)組等
      驗(yàn)證注解的元素值的在minmax(包含)指定區(qū)間之內(nèi)缝裤,如字符長度、集合大小
      @Past java.util.Date,
      java.util.Calendar;
      Joda Time類庫的日期類型
      驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早
      @Future @Past要求一樣 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間晚
      @NotBlank CharSequence子類型 驗(yàn)證注解的元素值不為空(不為null颊郎、去除首位空格后長度為0)憋飞,不同于@NotEmpty@NotBlank只應(yīng)用于字符串且在比較時(shí)會(huì)去除字符串的首位空格
      @Length(min=
      下限, max=上限)
      CharSequence子類型 驗(yàn)證注解的元素值長度在minmax區(qū)間內(nèi)
      @NotEmpty CharSequence子類型姆吭、
      Collection榛做、Map
      數(shù)組
      驗(yàn)證注解的元素值不為null且不為空(字符串長度不為0内狸、集合大小不為0)
      @Range(min=
      最小值, max=
      最大值)
      BigDecimal,BigInteger,
      CharSequence,
      byte, short, int, long
      原子類型和包裝類型
      驗(yàn)證注解的元素值在最小值和最大值之間
      @Email(regexp=
      正則表達(dá)式,flag=
      標(biāo)志的模式)
      CharSequence子類型
      (如String
      驗(yàn)證注解的元素值是Email检眯,也可以通過regexpflag指定自定義的email格式
      @Pattern(regexp=
      正則表達(dá)式,flag=
      標(biāo)志的模式)
      String,任何
      CharSequence的子類型
      驗(yàn)證注解的元素值與指定的正則表達(dá)式匹配
      @Valid 任何非原子類型 指定遞歸驗(yàn)證關(guān)聯(lián)的對(duì)象如用戶對(duì)象中有個(gè)地址對(duì)象屬性昆淡,如果想在驗(yàn)證用戶對(duì)象時(shí)一起驗(yàn)證地址對(duì)象的話锰瘸,在地址對(duì)象上加@Valid注解即可級(jí)聯(lián)驗(yàn)證

使用視圖控制器

  • 只將請(qǐng)求轉(zhuǎn)發(fā)到視圖而不做其他事情的控制器
  • 實(shí)現(xiàn)WebMvcConfigurer接口
    • 提供了所有方法的默認(rèn)實(shí)現(xiàn),只需要覆蓋所需要的方法即可
    • addViewControllers():使用它注冊一個(gè)或多個(gè)視圖控制器

選擇視圖模版庫

  • 如果使用JSP昂灵,需要將應(yīng)用構(gòu)建成WAR文件并部署到傳統(tǒng)的Servlet容器
  • 關(guān)閉模版緩存
    • application.properties中添加
      • spring.thymeleaf.cache=false

Reference

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末避凝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子倔既,更是在濱河造成了極大的恐慌恕曲,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渤涌,死亡現(xiàn)場離奇詭異佩谣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)实蓬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門茸俭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人安皱,你說我怎么就攤上這事调鬓。” “怎么了酌伊?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵腾窝,是天一觀的道長。 經(jīng)常有香客問我,道長虹脯,這世上最難降的妖魔是什么驴娃? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮循集,結(jié)果婚禮上唇敞,老公的妹妹穿的比我還像新娘。我一直安慰自己咒彤,他們只是感情好疆柔,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镶柱,像睡著了一般旷档。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奸例,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天彬犯,我揣著相機(jī)與錄音向楼,去河邊找鬼查吊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛湖蜕,可吹牛的內(nèi)容都是我干的逻卖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼昭抒,長吁一口氣:“原來是場噩夢啊……” “哼评也!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起灭返,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤盗迟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后熙含,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體罚缕,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年怎静,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了邮弹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚓聘,死狀恐怖腌乡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夜牡,我是刑警寧澤与纽,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響急迂,放射性物質(zhì)發(fā)生泄漏硝岗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一袋毙、第九天 我趴在偏房一處隱蔽的房頂上張望型檀。 院中可真熱鬧,春花似錦听盖、人聲如沸胀溺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仓坞。三九已至,卻和暖如春腰吟,著一層夾襖步出監(jiān)牢的瞬間无埃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工毛雇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嫉称,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓灵疮,卻偏偏與公主長得像织阅,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子震捣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345