通過(guò)***@RequestMapping*** 注解可以定義處理器對(duì)于請(qǐng)求的映射規(guī)則。該注解可以注解在方法上,也可以注解在類上,但意義是不同的。value 屬性值常以“/”開(kāi)始。@RequestMapping 的 value 屬性用于定義所匹配請(qǐng)求的 URI。
當(dāng)@RequestMapping注解在類上時(shí),說(shuō)明是有著相同的公共請(qǐng)求路徑
當(dāng)@RequestMapping注解出現(xiàn)在方法上時(shí),說(shuō)明是對(duì)每個(gè)方法請(qǐng)求的路徑
以下代碼發(fā)送的請(qǐng)求分別是:/項(xiàng)目名/zar/hello 和 /項(xiàng)目名/zar/two
@Controller //這個(gè)是聲明類是Controller,將類加入springmvc管理
@RequestMapping("/zar") //聲明相同的公共路徑
public class HelloSpringMvc {//相當(dāng)于一個(gè)控制器處理的方法
@RequestMapping("/hello")
public String one() {return "main";
}
@RequestMapping("/two")
public String two() {return "main";
}
一個(gè)@Controller 所注解的類中,可以定義多個(gè)處理器方法。當(dāng)然,不同的處理器方法所匹配的 URI 是不同的。
對(duì)請(qǐng)求提交方式的定義對(duì)于@RequestMapping,其有一個(gè)屬性 method,用于對(duì)被注解方法所處理請(qǐng)求的提交
方式進(jìn)行限制,即只有滿足該 method 屬性指定的提交方式的請(qǐng)求,才會(huì)執(zhí)行該被注解方法。
Method 屬性的取值為 RequestMethod 枚舉常量。
常用的為 RequestMethod.GET 與RequestMethod.POST,分別表示提交方式的匹配規(guī)則為 GET 與 POST 提交。
@RequestMapping(value = "/hello",method = RequestMethod.POST)
public String one() {return "main";
}
瀏覽器的常用請(qǐng)求方式有
只要指定了處理器方法匹配的請(qǐng)求提交方式為 POST,則相當(dāng)于指定了請(qǐng)求發(fā)送的方式:要么使用表單請(qǐng)求,要么使用 AJAX 請(qǐng)求。其它請(qǐng)求方式被禁用。
若不指定 method 屬性,則無(wú)論是 GET 還是 POST 提交方式,均可匹配。即對(duì)于請(qǐng)求的提交方式無(wú)要求。
五種數(shù)據(jù)的提交方式在方法中聲明一個(gè)和表單提交的參數(shù)名稱相同的參數(shù),由框架按照名稱直接注入。
在方法中聲明一個(gè)自定義的實(shí)體類參數(shù),框架調(diào)用實(shí)體類中相應(yīng)的setter方法注入屬性值,只要保證實(shí)體類中成員變量的名稱與提交請(qǐng)求的name屬性值一致即可。
使用框架提供的一個(gè)注解@PathVariable,將請(qǐng)求url中的值作為參數(shù)進(jìn)行提取,只能是超鏈接。
請(qǐng)求與形參中的名字不對(duì)應(yīng),可以使用
@RequestParam(value=“name1”,required=true)String namea來(lái)進(jìn)行參數(shù)名稱綁定。
在方法參數(shù)中聲明一個(gè)request對(duì)象,使用request的getParameter()獲取表單提交的數(shù)據(jù),這樣得到的數(shù)據(jù)還要手工進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。
public String five(HttpServletRequest request){int age=new Integer(request.getParameter("stuage"));
String name=request.getParameter("stuname");
System.out.println(age+"*********"+name);
return "main";
}
請(qǐng)求參數(shù)中文亂碼問(wèn)題的解決對(duì)于前面所接收的請(qǐng)求參數(shù),若含有中文,則會(huì)出現(xiàn)中文亂碼問(wèn)題。
Spring 對(duì)于請(qǐng)求參數(shù)中的中文亂碼問(wèn)題,給出了專門的字符集過(guò)濾器: CharacterEncodingFilter 類。
在 web.xml 中注冊(cè)字符集過(guò)濾器,即可解決 Spring 的請(qǐng)求參數(shù)的中文亂碼問(wèn)題。不過(guò),最好將該過(guò)濾器注冊(cè)在其它過(guò)濾器之前。因?yàn)檫^(guò)濾器的執(zhí)行是按照其注冊(cè)順序進(jìn)行的。
encode org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceRequestEncoding true forceResponseEncoding true encode /*
處理器方法的返回值若處理器方法處理完后,需要跳轉(zhuǎn)到其它資源,且又要在跳轉(zhuǎn)的資源間傳遞數(shù)據(jù),此時(shí)處理器方法返回 ModelAndView 比較好。
若該處理器方法只是進(jìn)行跳轉(zhuǎn)而不傳遞數(shù)據(jù),或只是傳遞數(shù)據(jù)而并不向任何資源跳轉(zhuǎn)(如對(duì)頁(yè)面的 Ajax 異步響應(yīng)),則不需要返回這個(gè)
處理器方法返回的字符串可以指定邏輯視圖名,通過(guò)視圖解析器解析可以將其轉(zhuǎn)換為物理視圖地址。
配置視圖解析器
對(duì)于處理器方法返回 void 的應(yīng)用場(chǎng)景,應(yīng)用在AJAX 響應(yīng)處理。若處理器對(duì)請(qǐng)求處理后,無(wú)需跳轉(zhuǎn)到其它任何資源,此時(shí)可以讓處理器方法返回 void。
處理器方法也可以返回 Object 對(duì)象。這個(gè) Object 可以是 Integer,自定義對(duì)象,Map,List 等。但返回的對(duì)象不是作為邏輯視圖出現(xiàn)的,而是作為直接在頁(yè)面顯示的數(shù)據(jù)出現(xiàn)的。返回對(duì)象,需要使用**@ResponseBody 注解**,將轉(zhuǎn)換后的 JSON 數(shù)據(jù)放入到響應(yīng)體中。
Ajax請(qǐng)求多用于Object返回值類型。
由于轉(zhuǎn)換器底層使用了Jackson 轉(zhuǎn)換方式將對(duì)象轉(zhuǎn)換為JSON 數(shù)據(jù),所以需要添加Jackson的相關(guān)依賴。
com.fasterxml.jackson.core jackson-databind 2.9.8
SpringMVC的四種跳轉(zhuǎn)方式默認(rèn)的跳轉(zhuǎn)是請(qǐng)求轉(zhuǎn)發(fā),直接跳轉(zhuǎn)到j(luò)sp頁(yè)面展示
還可以使用框架提供的關(guān)鍵字redirect:,進(jìn)行一個(gè)重定向操作 ,包括重定向頁(yè)面和重定向action,
使用框架提供的關(guān)鍵字forward:,進(jìn)行服務(wù)器內(nèi)部轉(zhuǎn)發(fā)操作,包括轉(zhuǎn)發(fā)頁(yè)面和轉(zhuǎn)發(fā)action。
當(dāng)使用redirect:和forward:關(guān)鍵字時(shí),視圖解析器中前綴后綴的拼接就無(wú)效了。
測(cè)試四種跳轉(zhuǎn)方式,前端代碼
請(qǐng)求轉(zhuǎn)發(fā)頁(yè)面(默認(rèn))
請(qǐng)求轉(zhuǎn)發(fā)action
重定向頁(yè)面
重定向action
測(cè)試四種跳轉(zhuǎn)方式后端代碼
@Controller
public class JumpAction {@RequestMapping("/one")
public String one(){System.out.println("請(qǐng)求轉(zhuǎn)發(fā)頁(yè)面(默認(rèn))");
//以前的訪問(wèn)方式 //request.getRequestDispatcher("/admin/main.jsp").forward(request,response);
//地址欄的變化: http://localhost:8080/one.action
//return "main"; //默認(rèn)的訪問(wèn)方式是自動(dòng)拼接前綴和后綴進(jìn)行跳轉(zhuǎn)
return "forward:/fore/user.jsp";
//只要使用了forward:就可以屏蔽前綴和后綴的拼接,自己手工構(gòu)建返回的全部路徑+.jsp
}
@RequestMapping("/two")
public String two(){System.out.println("請(qǐng)求轉(zhuǎn)發(fā)action");
//觀察地址欄的變化: http://localhost:8080/two.action
return "forward:/other.action";
//不使用forward:,就會(huì)是這樣的路徑 /admin/other.action/.jsp
}
@RequestMapping("/three")
public String three(){System.out.println("重定向頁(yè)面");
//觀察地址欄的變化 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支持的默認(rèn)參數(shù)類型1. HttpServletRequest 對(duì)象
2. HttpServletResponse 對(duì)象
3. HttpSession 對(duì)象
4. Model/ModelMap 對(duì)象
5. Map
SpringMVC 中的 Interceptor 攔截器,它的主要作用是攔截指定的用戶請(qǐng)求,并進(jìn)行相應(yīng)的預(yù)處理與后處理。
其攔截的時(shí)間點(diǎn)在“處理器映射器根據(jù)用戶提交的請(qǐng)求映射出了所要執(zhí)行的處理器類,并且也找到了要執(zhí)行該處理器類的處理器適配器,在處理器適配器執(zhí)行處理器之前”。
當(dāng)然,在處理器映射器映射出所要執(zhí)行的處理器類時(shí),已經(jīng)將攔截器與處理器組合為了一個(gè)處理器執(zhí)行鏈,并返回給了中央調(diào)度器。
preHandle():在請(qǐng)求被處理之前進(jìn)行操作
該方法在處理器方法執(zhí)行之前執(zhí)行。其返回值為 boolean,若為 true,則緊接著會(huì)執(zhí)行處理器方法,且會(huì)將 afterCompletion()方法放入到一個(gè)專門的方法棧中等待執(zhí)行。
postHandle():在請(qǐng)求被處理之后,但結(jié)果還沒(méi)有渲染前進(jìn)行操作,可以改變響應(yīng)結(jié)果
該方法在處理器方法執(zhí)行之后執(zhí)行。處理器方法若最終未被執(zhí)行,則該方法不會(huì)執(zhí)行。由于該方法是在處理器方法執(zhí)行完后執(zhí)行,且該方法參數(shù)中包含 ModelAndView,所以該方法可以修改處理器方法的處理結(jié)果數(shù)據(jù),且可以修改跳轉(zhuǎn)方向。
afterCompletion:所有的請(qǐng)求響應(yīng)結(jié)束后執(zhí)行善后工作,清理對(duì)象,關(guān)閉資源
當(dāng)preHandle()方法返回 true 時(shí),會(huì)將該方法放到專門的方法棧中,等到對(duì)請(qǐng)求進(jìn)行響應(yīng)的所有工作完成之后才執(zhí)行該方法。即該方法是在中央調(diào)度器渲染(數(shù)據(jù)填充)了響應(yīng)頁(yè)面之后執(zhí)行的,此時(shí)對(duì) ModelAndView 再操作也對(duì)響應(yīng)無(wú)濟(jì)于事。afterCompletion 最后執(zhí)行的方法,清除資源,例如在 Controller 方法中加入數(shù)據(jù)等。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:SpringMVC學(xué)習(xí)---第二課-創(chuàng)新互聯(lián)
分享鏈接:http://jinyejixie.com/article48/dhodhp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、App開(kāi)發(fā)、虛擬主機(jī)、響應(yīng)式網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容