SpringMVC學習---第二課-創(chuàng)新互聯(lián)

SpringMVC學習---第二課
  • SpirngMVC注解式開發(fā)
    • 注解
    • 對請求提交方式的定義
    • 五種數(shù)據(jù)的提交方式
    • 請求參數(shù)中文亂碼問題的解決
    • 處理器方法的返回值
    • SpringMVC的四種跳轉方式
    • SpringMVC支持的默認參數(shù)類型
  • SpringMVC的攔截器
    • 攔截器說明
    • 攔截器的應用場景
    • 攔截器執(zhí)行原理

在鎮(zhèn)遠等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設計、成都外貿網(wǎng)站建設 網(wǎng)站設計制作按需定制設計,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,成都品牌網(wǎng)站建設,全網(wǎng)整合營銷推廣,成都外貿網(wǎng)站制作,鎮(zhèn)遠網(wǎng)站建設費用合理。SpirngMVC注解式開發(fā) 注解

通過***@RequestMapping*** 注解可以定義處理器對于請求的映射規(guī)則。該注解可以注解在方法上,也可以注解在類上,但意義是不同的。value 屬性值常以“/”開始。@RequestMapping 的 value 屬性用于定義所匹配請求的 URI。

當@RequestMapping注解在類上時,說明是有著相同的公共請求路徑

當@RequestMapping注解出現(xiàn)在方法上時,說明是對每個方法請求的路徑

以下代碼發(fā)送的請求分別是:/項目名/zar/hello 和 /項目名/zar/two

@Controller //這個是聲明類是Controller,將類加入springmvc管理
@RequestMapping("/zar")  //聲明相同的公共路徑
public class HelloSpringMvc {//相當于一個控制器處理的方法
@RequestMapping("/hello")
public String one() {return "main";
}
@RequestMapping("/two")
public String two() {return "main";
}

一個@Controller 所注解的類中,可以定義多個處理器方法。當然,不同的處理器方法所匹配的 URI 是不同的。

對請求提交方式的定義

對于@RequestMapping,其有一個屬性 method,用于對被注解方法所處理請求的提交

方式進行限制,即只有滿足該 method 屬性指定的提交方式的請求,才會執(zhí)行該被注解方法。

Method 屬性的取值為 RequestMethod 枚舉常量。
常用的為 RequestMethod.GET 與RequestMethod.POST,分別表示提交方式的匹配規(guī)則為 GET 與 POST 提交。

@RequestMapping(value = "/hello",method = RequestMethod.POST)
public String one() {return "main";
}

瀏覽器的常用請求方式有
在這里插入圖片描述

只要指定了處理器方法匹配的請求提交方式為 POST,則相當于指定了請求發(fā)送的方式:要么使用表單請求,要么使用 AJAX 請求。其它請求方式被禁用。

若不指定 method 屬性,則無論是 GET 還是 POST 提交方式,均可匹配。即對于請求的提交方式無要求。

五種數(shù)據(jù)的提交方式
  1. 單個數(shù)據(jù)注入

在方法中聲明一個和表單提交的參數(shù)名稱相同的參數(shù),由框架按照名稱直接注入。

在這里插入圖片描述

  1. 對象封裝注入

在方法中聲明一個自定義的實體類參數(shù),框架調用實體類中相應的setter方法注入屬性值,只要保證實體類中成員變量的名稱與提交請求的name屬性值一致即可。

在這里插入圖片描述

  1. 動態(tài)占位符提交(只限于超鏈接)

使用框架提供的一個注解@PathVariable,將請求url中的值作為參數(shù)進行提取,只能是超鏈接。

在這里插入圖片描述

  1. 請求參數(shù)名稱與形參名稱不一致

請求與形參中的名字不對應,可以使用
@RequestParam(value=“name1”,required=true)String namea來進行參數(shù)名稱綁定。
在這里插入圖片描述

  1. 使用HttpRequestServlet對象提取

在方法參數(shù)中聲明一個request對象,使用request的getParameter()獲取表單提交的數(shù)據(jù),這樣得到的數(shù)據(jù)還要手工進行數(shù)據(jù)類型的轉換。

public String five(HttpServletRequest request){int age=new Integer(request.getParameter("stuage"));
String name=request.getParameter("stuname");
System.out.println(age+"*********"+name);
    return "main";
}
請求參數(shù)中文亂碼問題的解決

對于前面所接收的請求參數(shù),若含有中文,則會出現(xiàn)中文亂碼問題。

Spring 對于請求參數(shù)中的中文亂碼問題,給出了專門的字符集過濾器: CharacterEncodingFilter 類。

在 web.xml 中注冊字符集過濾器,即可解決 Spring 的請求參數(shù)的中文亂碼問題。不過,最好將該過濾器注冊在其它過濾器之前。因為過濾器的執(zhí)行是按照其注冊順序進行的。

encodeorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8forceRequestEncodingtrueforceResponseEncodingtrueencode/*
處理器方法的返回值
  1. 第一種:ModelAndView

若處理器方法處理完后,需要跳轉到其它資源,且又要在跳轉的資源間傳遞數(shù)據(jù),此時處理器方法返回 ModelAndView 比較好。
若該處理器方法只是進行跳轉而不傳遞數(shù)據(jù),或只是傳遞數(shù)據(jù)而并不向任何資源跳轉(如對頁面的 Ajax 異步響應),則不需要返回這個

  1. 第二種:String

處理器方法返回的字符串可以指定邏輯視圖名,通過視圖解析器解析可以將其轉換為物理視圖地址。

配置視圖解析器
在這里插入圖片描述

  1. 第三種:無返回值void

對于處理器方法返回 void 的應用場景,應用在AJAX 響應處理。若處理器對請求處理后,無需跳轉到其它任何資源,此時可以讓處理器方法返回 void。

  1. 第四種:返回對象類型

處理器方法也可以返回 Object 對象。這個 Object 可以是 Integer,自定義對象,Map,List 等。但返回的對象不是作為邏輯視圖出現(xiàn)的,而是作為直接在頁面顯示的數(shù)據(jù)出現(xiàn)的。返回對象,需要使用**@ResponseBody 注解**,將轉換后的 JSON 數(shù)據(jù)放入到響應體中。
Ajax請求多用于Object返回值類型。
由于轉換器底層使用了Jackson 轉換方式將對象轉換為JSON 數(shù)據(jù),所以需要添加Jackson的相關依賴。

com.fasterxml.jackson.corejackson-databind2.9.8
SpringMVC的四種跳轉方式

默認的跳轉是請求轉發(fā),直接跳轉到jsp頁面展示

還可以使用框架提供的關鍵字redirect:,進行一個重定向操作 ,包括重定向頁面和重定向action,

使用框架提供的關鍵字forward:,進行服務器內部轉發(fā)操作,包括轉發(fā)頁面和轉發(fā)action。

當使用redirect:和forward:關鍵字時,視圖解析器中前綴后綴的拼接就無效了。

測試四種跳轉方式,前端代碼

請求轉發(fā)頁面(默認)
請求轉發(fā)action
重定向頁面
重定向action

測試四種跳轉方式后端代碼

@Controller
public class JumpAction {@RequestMapping("/one")
    public String one(){System.out.println("請求轉發(fā)頁面(默認)");
        //以前的訪問方式        //request.getRequestDispatcher("/admin/main.jsp").forward(request,response);
        //地址欄的變化:  http://localhost:8080/one.action
        //return "main"; //默認的訪問方式是自動拼接前綴和后綴進行跳轉
        return "forward:/fore/user.jsp";
		//只要使用了forward:就可以屏蔽前綴和后綴的拼接,自己手工構建返回的全部路徑+.jsp
    }


    @RequestMapping("/two")
    public String two(){System.out.println("請求轉發(fā)action");
        //觀察地址欄的變化:  http://localhost:8080/two.action
        return "forward:/other.action";   
        //不使用forward:,就會是這樣的路徑  /admin/other.action/.jsp
    }

    @RequestMapping("/three")
    public String three(){System.out.println("重定向頁面");
        //觀察地址欄的變化  http://localhost:8080/admin/main.jsp
        return "redirect:/admin/main.jsp";
        //只要使用了redirect:就可以屏蔽前綴和后綴的拼接
    }


    @RequestMapping("/four")
    public String four(){System.out.println("重定向action");
        //觀察地址欄的變化  http://localhost:8080/other.action
        return "redirect:/other.action";
        //只要使用了redirect:就可以屏蔽前綴和后綴的拼接
    }
}
SpringMVC支持的默認參數(shù)類型

1. HttpServletRequest 對象
2. HttpServletResponse 對象
3. HttpSession 對象
4. Model/ModelMap 對象 
5. Map對象

SpringMVC的攔截器 攔截器說明

SpringMVC 中的 Interceptor 攔截器,它的主要作用是攔截指定的用戶請求,并進行相應的預處理與后處理。
其攔截的時間點在“處理器映射器根據(jù)用戶提交的請求映射出了所要執(zhí)行的處理器類,并且也找到了要執(zhí)行該處理器類的處理器適配器,在處理器適配器執(zhí)行處理器之前”。
當然,在處理器映射器映射出所要執(zhí)行的處理器類時,已經將攔截器與處理器組合為了一個處理器執(zhí)行鏈,并返回給了中央調度器。

攔截器的應用場景
  1. 日志記錄:記錄請求信息的日志
  2. 權限檢查,如登錄檢查
  3. 性能檢測:檢測方法的執(zhí)行時間
攔截器執(zhí)行原理

preHandle():在請求被處理之前進行操作

該方法在處理器方法執(zhí)行之前執(zhí)行。其返回值為 boolean,若為 true,則緊接著會執(zhí)行處理器方法,且會將 afterCompletion()方法放入到一個專門的方法棧中等待執(zhí)行。

postHandle():在請求被處理之后,但結果還沒有渲染前進行操作,可以改變響應結果

該方法在處理器方法執(zhí)行之后執(zhí)行。處理器方法若最終未被執(zhí)行,則該方法不會執(zhí)行。由于該方法是在處理器方法執(zhí)行完后執(zhí)行,且該方法參數(shù)中包含 ModelAndView,所以該方法可以修改處理器方法的處理結果數(shù)據(jù),且可以修改跳轉方向。

afterCompletion:所有的請求響應結束后執(zhí)行善后工作,清理對象,關閉資源

當preHandle()方法返回 true 時,會將該方法放到專門的方法棧中,等到對請求進行響應的所有工作完成之后才執(zhí)行該方法。即該方法是在中央調度器渲染(數(shù)據(jù)填充)了響應頁面之后執(zhí)行的,此時對 ModelAndView 再操作也對響應無濟于事。afterCompletion 最后執(zhí)行的方法,清除資源,例如在 Controller 方法中加入數(shù)據(jù)等。

在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:SpringMVC學習---第二課-創(chuàng)新互聯(lián)
分享鏈接:http://muchs.cn/article48/dhodhp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、App開發(fā)、虛擬主機、響應式網(wǎng)站、手機網(wǎng)站建設標簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)