通過***@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ù)的提交方式在方法中聲明一個和表單提交的參數(shù)名稱相同的參數(shù),由框架按照名稱直接注入。
在方法中聲明一個自定義的實體類參數(shù),框架調用實體類中相應的setter方法注入屬性值,只要保證實體類中成員變量的名稱與提交請求的name屬性值一致即可。
使用框架提供的一個注解@PathVariable,將請求url中的值作為參數(shù)進行提取,只能是超鏈接。
請求與形參中的名字不對應,可以使用
@RequestParam(value=“name1”,required=true)String namea來進行參數(shù)名稱綁定。
在方法參數(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í)行是按照其注冊順序進行的。
encode org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceRequestEncoding true forceResponseEncoding true encode /*
處理器方法的返回值若處理器方法處理完后,需要跳轉到其它資源,且又要在跳轉的資源間傳遞數(shù)據(jù),此時處理器方法返回 ModelAndView 比較好。
若該處理器方法只是進行跳轉而不傳遞數(shù)據(jù),或只是傳遞數(shù)據(jù)而并不向任何資源跳轉(如對頁面的 Ajax 異步響應),則不需要返回這個
處理器方法返回的字符串可以指定邏輯視圖名,通過視圖解析器解析可以將其轉換為物理視圖地址。
配置視圖解析器
對于處理器方法返回 void 的應用場景,應用在AJAX 響應處理。若處理器對請求處理后,無需跳轉到其它任何資源,此時可以讓處理器方法返回 void。
處理器方法也可以返回 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.core jackson-databind 2.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 中的 Interceptor 攔截器,它的主要作用是攔截指定的用戶請求,并進行相應的預處理與后處理。
其攔截的時間點在“處理器映射器根據(jù)用戶提交的請求映射出了所要執(zhí)行的處理器類,并且也找到了要執(zhí)行該處理器類的處理器適配器,在處理器適配器執(zhí)行處理器之前”。
當然,在處理器映射器映射出所要執(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)