開始學SpringMVC之註解

来源:https://www.cnblogs.com/hsiang/archive/2019/08/15/11355444.html
-Advertisement-
Play Games

本文主要講解SpringMVC的註解方面的應用,屬於SpringMVC的入門級內容,僅供學習分享使用,如有不足之處,還請指正。 ...


概述

SpringMVC不僅提供了Xml的配置方式,還提供了註解的方式來聲明一個Controller,本文屬於SpringMVC的入門級內容,僅供學習分享使用,如有不足之處,還請指正。

SpringMVC註解方式的優點

  • XML配置起來有時候冗長,此時註解可能是更好的選擇。
  • 註解最大的好處就是簡化了XML配置;其實大部分註解一定確定後很少會改變,在一些中小項目中使用註解反而提供了開發效率。
  • 註解相對於XML的另一個好處是類型安全的,XML只能在運行期才能發現問題。
  • 採用註解的方式,一個類可以有多個Action。

SpringMVC支持註解步驟

1. 配置dispatcher-servlet.xml文件

如下所示,主要配置註解的掃描,和支持MVC註解兩項內容

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4 xmlns:context="http://www.springframework.org/schema/context"
 5 xmlns:mvc="http://www.springframework.org/schema/mvc"
 6 xsi:schemaLocation="http://www.springframework.org/schema/beans
 7  http://www.springframework.org/schema/beans/spring-beans.xsd
 8  http://www.springframework.org/schema/context
 9  http://www.springframework.org/schema/context/spring-context.xsd
10  http://www.springframework.org/schema/mvc
11  http://www.springframework.org/schema/mvc/spring-mvc.xsd">
12       <!-- 配置註解的掃描 -->
13      <context:component-scan base-package="com.hex.second"></context:component-scan>
14      <!-- 支持MVC的註解 -->
15      <mvc:annotation-driven ></mvc:annotation-driven>
16      <!-- 靜態資源的支持 -->
17      <mvc:default-servlet-handler/>
18 </beans>

2. 新建一個類增加方法,併在方法上添加註解

如下所示,通過@Controller表示一個類,通過@RequestMapping("/Hello")標識一個訪問請求處理方法

 1 @Controller
 2 //@RequestMapping("/HC")
 3 public class HelloController {
 4     
 5     /**
 6      * 通過註解的方式聲明Controller,不帶參數
 7      * @return
 8      */
 9     @RequestMapping("/Hello")
10     public ModelAndView HelloMvc(){
11         ModelAndView mav=new ModelAndView();
12         mav.addObject("msg", "HelloWorld,HelloSpringMVC!!!");
13         mav.setViewName("WEB-INF/jsps/HelloWorld.jsp");
14         return mav;
15     }
16 }

3. 新增一個Jsp頁面接收並顯示內容

如下所示:通過${msg} 接收後臺傳遞過來的參數

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>第一次接觸SpringMVC</title>
 8 </head>
 9 <body>
10     <h1>歡迎信息</h1>
11     <h1>${msg}</h1>
12 </body>
13 </html>

4. 訪問

打開瀏覽器,輸入網址即可訪問,如下所示:

 

SpringMVC接收頁面傳遞數據的方式(前端-->後端)

1. 通過方法的參數的方式

如下所示:SpringMVC能夠自動將頁面傳遞的數據和函數的參數匹配起來;

如果是日期格式的數據,需要進行格式化

 1     /**
 2      * 以參數的方式傳遞獲取頁面傳遞過來的值
 3      * @param name
 4      * @param age
 5      * @param date 日期格式,由客戶端傳遞參數到服務端時,需要進行日期格式化,否則會報錯
 6      * 註解如下:@DateTimeFormat(pattern="yyyy-MM-dd")
 7      * @return
 8      */
 9     @RequestMapping("/Hello2")
10     public ModelAndView HelloMvc2(String name,int age,@DateTimeFormat(pattern="yyyy-MM-dd")Date date){
11         System.out.println("name:"+name);
12         System.out.println("age:"+age);
13         System.out.println("date"+date);
14         ModelAndView mav=new ModelAndView();
15         mav.addObject("name", name);
16         mav.addObject("age", age);
17         mav.addObject("date", date);
18         mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp");
19         return mav;
20     }

2. 通過對象的方式進行數據的傳遞

如下所示,先定義一個User類,來接收頁面傳遞的數據,SpringMVC能自動進行匹配

 1     /**
 2      * 通過對象的方式接收參數,SpringMVC可以自動匹配參數到對象的屬性中
 3      * 方便擴展
 4      * @param user
 5      * @return
 6      */
 7     @RequestMapping("/Hello3")
 8     public ModelAndView HelloMvc3(User user){
 9         System.out.println("name:"+user.getName());
10         System.out.println("age:"+user.getAge());
11         System.out.println("date"+user.getDate());
12         ModelAndView mav=new ModelAndView();
13         mav.addObject("name", user.getName());
14         mav.addObject("age", user.getAge());
15         mav.addObject("date", user.getDate());
16         mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp");
17         return mav;
18     }

Jsp頁面接收如下所示:以key.property的方式獲取內容

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Hello world</title>
 8 </head>
 9 <body>
10 <h1>歡迎信息</h1>
11     <h1>ID:${user.id}</h1>
12     <h1>姓名:${user.name}</h1>
13     <h1>年齡:${user.age}</h1>
14     <h1>時間:${user.date}</h1>
15 </body>
16 </html>

3. 通過內置對象的方式進行數據的傳遞

 1     /**
 2      * 通過內置對象HttpServletRequest來獲取參數
 3      * @param req
 4      * @param resp
 5      * @return
 6      */
 7     @RequestMapping("/Hello4")
 8     public ModelAndView HelloMvc4(HttpServletRequest req,HttpServletResponse resp){
 9         System.out.println("name:"+req.getParameter("name"));
10         System.out.println("age:"+req.getParameter("age"));
11         System.out.println("date"+req.getParameter("date"));
12         //往頁面傳遞參數的一種
13         ModelAndView mav=new ModelAndView();
14         mav.addObject("name", req.getParameter("name"));
15         mav.addObject("age", req.getParameter("age"));
16         mav.addObject("date", req.getParameter("date"));
17         mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp");
18         return mav;
19     }

SpringMVC頁面接收參數的方式(後端-->前端)

1. 採用ModelAndView進行傳值

如下所示:可以通過鍵值對的方式增加參數

 1 /**
 2      * 往頁面傳遞參數
 3      * @return
 4      */
 5     @RequestMapping("/Hello5")
 6     public ModelAndView HelloMvc5(){
 7         //往頁面傳遞參數的一種
 8         ModelAndView mav=new ModelAndView();
 9         mav.addObject("name", "張三");
10         mav.addObject("age", 20);
11         mav.addObject("date",new Date());
12         mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp");
13         return mav;
14     }

2. 通過Model的方式傳遞參數

如下所示:Model作為一個參數,可以直接新增鍵值對,返回一個字元串,表示頁面的路徑

 1     /**
 2      * 從後端往前端跳轉,使用Model的方式傳參
 3      * @return
 4      */
 5     @RequestMapping("/Hello6")
 6     public String HelloMvc6(Model model){
 7         //往頁面傳遞參數的一種
 8         model.addAttribute("name", "張三");
 9         model.addAttribute("age", 16);
10         model.addAttribute("date", new Date());
11         return "WEB-INF/jsps/HelloWorld2.jsp";
12     }

3. 通過對象的方式傳遞參數

如下所示:將對象通過屬性的方式進行傳遞,也需要一個key值作為標識

 1     /**
 2      * 採用對象的方式傳參到前臺
 3      * @param model
 4      * @return
 5      */
 6     @RequestMapping("/Hello7")
 7     public String HelloMvc7(Model model){
 8         //往頁面傳遞參數的一種
 9         User user=new User(1L,"李四",20,new Date());
10         model.addAttribute("user", user);
11         //model.addAttribute(user);//不建議用這種,會有一個預設的key,是類名的首字母小寫,和對象名無關
12         return "WEB-INF/jsps/HelloWorld3.jsp";
13     } 

4. 通過內置對象傳遞參數

如下所示:內置對象HttpServletRequest傳遞參數併進行跳轉

 1     /**
 2      * 通過內置對象往頁面傳參並跳轉,不常用
 3      * @param req
 4      * @param resp
 5      * @throws ServletException
 6      * @throws IOException
 7      */
 8     @RequestMapping("/Hello8")
 9     public void HelloMvc8(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException{
10         //往頁面傳遞參數的一種
11         req.setAttribute("name", "劉玲");
12         req.setAttribute("age", 22);
13         req.getRequestDispatcher("WEB-INF/jsps/HelloWorld2.jsp").forward(req, resp);
14     }

備註

 曾以為我是那崖畔的一枝花,後來才知道,不過是人海一粒沙。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文共:3495字,預估閱讀時間:9分鐘 前言 上到職場幹將下到職場萌新,都會接觸到包裝簡歷這個詞語。當你簡歷投到心儀的公司,公司內負責求職的工作人員是如何甄別簡歷的包裝程度的?Coody老師根據自己的經驗寫下了這篇文章,誰都不是天才,包裝無可厚非,切勿對號入座! 正文 在互聯網極速膨脹的社會背景下 ...
  • 一個可以沉迷於技術的程式猿,wx加入加入技術群:fsx641385712 ...
  • 一個可以沉迷於技術的程式猿,wx加入加入技術群:fsx641385712 ...
  • 一個可以沉迷於技術的程式猿,wx加入加入技術群:fsx641385712 ...
  • 11.312 盒子模型 HTML文檔中的每個元素都被比喻成矩形盒子, 盒子模型通過四個邊界來描述:margin(外邊距),border(邊框),padding(內填充),content(內容區域),如果把一個盒子比喻成一個壁掛相片,那麼 1、css顯示模式:塊級、行內、行內塊級 在HTML中HTML ...
  • 基本思路 貪心 既然要求最小代價,當用一定順序刪除時代價一定最小,不難發現,每次都刪去x,y中最小的,最後的總代價業一定最小! 因此就可以寫出下麵的簡單的代碼 代碼 是不是很簡單呢? ...
  • 呵呵,先貼一張圖: "洛谷題目頁面傳送門" & "CodeForces題目頁面傳送門" 給定字元串$a$,求它的每一個首碼,是否能被表示成$m+1$個字元串$A$和$m$個字元串$B$交錯相連的形式,即求$\forall i\in[1,n],\left[\exists A,\exists B,a_{ ...
  • 1、字元串 1.1、如何在Python中使用字元串 a、使用單引號(') 用單引號括起來表示字元串,例如: b、使用雙引號(") 雙引號中的字元串與單引號中的字元串用法完全相同,例如: c、使用三引號(''') 利用三引號,表示多行的字元串,可以在三引號中自由的使用單引號和雙引號,例如: 2、布爾類 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...