springmvc註解@Controller和@RequestMapping

来源:https://www.cnblogs.com/haizhilangzi/archive/2019/06/26/11026399.html
-Advertisement-
Play Games

Spring從2.5版本引入註解,從而讓開發者的工作變得非常的輕鬆 springmvc註解Controller org.springframework.stereotype.Controller註解類型用於指示Spring類的實例是一個控制器,使用該註解不需要繼承特定的類或實現特定的介面,相比較配置 ...


Spring從2.5版本引入註解,從而讓開發者的工作變得非常的輕鬆

springmvc註解Controller

org.springframework.stereotype.Controller註解類型用於指示Spring類的實例是一個控制器,使用該註解不需要繼承特定的類或實現特定的介面,相比較配置文件而言更加簡單。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {

    String value() default "";

}

RequestMapping註解

org.springframework.web.bind.annotation.RequestMapping註解用來指示Spring用哪一個類或者方法來處理請求動作,該註解可用於類或方法。當@RequestMapping註解在類上時候,所有的方法都將映射為相對於類級別的請求,表示該控制器處理的所有的請求都將被映射到value屬性指示的路徑下
源碼如下


package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.Callable;

import org.springframework.core.annotation.AliasFor;


@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {

    /**
     * 給映射地址一個別名
     */
    String name() default "";

    /**
     * 用於將指定的請求的實際地址映射到方法上
     */
    @AliasFor("path")
    String[] value() default {};

    @AliasFor("value")
    String[] path() default {};

    /**
     * 映射指定的請求的方法類型:
     * GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.
     */
    RequestMethod[] method() default {};

    /**
     * 指定request中必須包含某些參數值,才讓該方法處理
     */
    String[] params() default {};

    /**
     * 指定request中必須包含某些指定的header值,才讓該方法處理
     */
    String[] headers() default {};

    /**
     * 指定處理請求提交的內容(Content-Type),例如application/json、text/html等
     */
    String[] consumes() default {};

    /**
     * 指定返回的內容類型,返回的內容類型必須是request請求頭(Accept)中所包含的類型
     */
    String[] produces() default {};

}

Model和 ModelAndView

SpringMVC在內部使用一個org.springframework.ui.Model介面存儲模型數據,類似Map介面。SpringMVC在調用處理方法之前會創建一個隱含的模型對象,作為模型數據的存儲器。如果處理方法的參數為Model和ModelMap類型,則springMVC會將隱含模型的引用傳遞給這些參數。在處理方法內部,開發者就可以通過這個參數隊形訪問模型中的所有數據,也可以像模型中添加新的屬性數據。
UserController.java

package com.rookie.bigdata.controller;

import com.rookie.bigdata.domain.User;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * Created by dell on 2019/6/15.
 */
@Controller
public class UserController {

    private static final Log LOG = LogFactory.getLog(UserController.class);

    /**
     * @param loginname
     * @param password
     * @param model
     * @ModelAttribute修飾的方法會先於login調用,該方法用於接受前臺jsp頁面傳入的參數,該方法 public void userNodel(String loginname, String password, Model model)可以直接改為 public void userNodel(String loginname, String password, ModelMap modelMap)  
     */
    @ModelAttribute
    public void userNodel(String loginname, String password, Model model) {
        LOG.info("該方法執行啦");
        //用於存儲JSP頁面傳入的參數
        User user = new User();
        user.setLoginname(loginname);
        user.setPassword(password);
        //將user添加到Model中
        model.addAttribute("user", user);
    }

    @RequestMapping(value = "/login1")
    public String login(Model model) {
        //從Model中取出user對象
        User user = (User) model.asMap().get("user");
        System.out.println(user);
        //設置user對象的屬性
        user.setUsername("張三");
        return "result1";
    }


}

loginForm1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試Model</title>
</head>
<body>
<h3>測試Model</h3>
<form action="login1" method="post">
     <table>
         <tr>
            <td><label>登錄名: </label></td>
             <td><input type="text" id="loginname" name="loginname" ></td>
         </tr>
         <tr>
            <td><label>密碼: </label></td>
             <td><input type="password" id="password" name="password" ></td>
         </tr>
         <tr>
             <td><input id="submit" type="submit" value="登錄"></td>
         </tr>
     </table>
</form>
</body>
</html>

ModelAndView

控制器處理方法的返回值如果是ModelAndView,則其既包含模型數據信息,也包含視圖信息。
如下代碼跟上面的效果相同

package com.rookie.bigdata.controller;

import com.rookie.bigdata.domain.User;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

/**
 * Created by dell on 2019/6/15.
 */
@Controller
public class User1Controller {

    private static final Log LOG = LogFactory.getLog(User1Controller.class);

    /**
     * @param loginname
     * @param password
     * @param modelAndView
     */
    @ModelAttribute
    public void userNodel(String loginname, String password, ModelAndView modelAndView) {
        LOG.info("該方法執行啦");
        //用於存儲JSP頁面傳入的參數
        User user = new User();
        user.setLoginname(loginname);
        user.setPassword(password);
        //將user添加到Model中
        modelAndView.addObject("user", user);
    }

    @RequestMapping(value = "/login1")
    public ModelAndView login(ModelAndView modelAndView) {
        //從ModelAndView的Model中取出user對象
        User user = (User) modelAndView.getModel().get("user");
        System.out.println(user);
        //設置user對象的屬性
        user.setUsername("張三");
        modelAndView.setViewName("result1");
        return modelAndView;
    }
}

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

-Advertisement-
Play Games
更多相關文章
  • vue-cli輸入命令:npm run build 即可打包vue.js的項目 打包出來後項目中就會多了一個文件夾dist,下圖為我們打包過後的項目 我們直接運行打包後的文件夾中的index.html文件,會看到網頁一片空白,f12調試,全是css,js路徑引用錯誤的問題。 解決:到config文件 ...
  • // 利用遞歸實現數組的扁平化let ary = [1, [2, [3, [4, 5]]], 6]; let result = []; let fn = function(ary){ for(let i = 0 ; i < ary.length; i++){ let item = ary[i] if ...
  • Vue.js 的核心是一個響應的數據綁定系統,它允許我們在普通 HTML 模板中使用特殊的語法將 DOM “綁定”到底層數據。被綁定的DOM 將與數據保持同步,每當數據有改動,相應的DOM視圖也會更新。基於這種特性,通過vue.js動態綁定class就變得非常簡單。 ...
  • Vue.js 2.0引入Virtual DOM,比Vue.js 1.0的初始渲染速度提升了2-4倍,並大大降低了記憶體消耗。那麼,什麼是Virtual DOM?為什麼需要Virtual DOM?它是通過什麼方式去提升頁面渲染效率的呢?這是本文所要探討的問題。 ...
  • var 如果使用關鍵字 var 聲明一個變數,那麼這個變數就屬於當前的函數作用域,如果聲明是發生在任何函數外的頂層聲明,那麼這個變數就屬於全局作用域。 let 1、let 聲明的變數具有塊作用域的特征。 2、在同一個塊級作用域,不能重覆聲明變數。 function foo(){ let a = 1; ...
  • 201-206:都表示伺服器成功處理了請求的狀態代碼,說明網頁可以正常訪問。 200:(成功) 伺服器已成功處理了請求。通常,這表示伺服器提供了請求的網頁。 201:(已創建) 請求成功且伺服器已創建了新的資源。 202:(已接受) 伺服器已接受了請求,但尚未對其進行處理。 203:(非授權信息) ...
  • 1、安裝:在命令行執行 →npm install -g nrm ,進行全局安裝 2、查看可用的源:執行命令→nrm ls,如下所示, 帶*號的是當前使用的源 PS E:\code> nrm ls * npm https://registry.npmjs.org/ cnpm http://r.cnpm ...
  • EventLoop 在之前介紹Bootstrap的初始化以及啟動過程時,我們多次接觸了NioEventLoopGroup這個類,關於這個類的理解,還需要瞭解netty的線程模型。NioEventLoopGroup可以理解為一組線程,這些線程每一個都可以獨立地處理多個channel產生的io事件。 N ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...