日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java中注解动态传参_SpringMVC之注解、传参、返回值及拦截器

發(fā)布時(shí)間:2025/3/13 javascript 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中注解动态传参_SpringMVC之注解、传参、返回值及拦截器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 注解式開發(fā)之a(chǎn)nnotation-driven解釋

(1) mvc注解驅(qū)動(dòng)在哪個(gè)文件中配置?

Springmvc.xml

(2) 配置mvc注解驅(qū)動(dòng)使用哪個(gè)標(biāo)簽?

2. 注解式開發(fā)之視圖解析器

(1) 視圖解析器起到什么作用?

視圖解析器可以根據(jù)服務(wù)方法的返回值,自動(dòng)的拼接最終的viewName數(shù)據(jù).

(2) 視圖解析器如何使用?

3. 處理器方法常用參數(shù)

(1) 處理器方法的常用參數(shù)有哪些?

HttpServletRequest

HttpServletResponse

HttpSession

用于承載數(shù)據(jù)的Model、Map、ModelMap

請求中所攜帶的請求參數(shù)

(2) SpringMVC控制層常用的承載數(shù)據(jù)的對象有哪些?

Model、Map、ModelMap

4. 參數(shù)接收之逐個(gè)接收

(1) 在后端控制器中如何接收前臺(tái)參數(shù)?

注意:逐個(gè)接收時(shí),JSP頁面中的name值和后臺(tái)控制器中方法的形參名稱必須一致才可以。如果兩者不一致可以在形參前加注解@RequestPara(“請求參數(shù)名”)來指定該參數(shù)對應(yīng)的是哪個(gè)請求參數(shù)。

將jsp頁面中數(shù)據(jù)post提交給目標(biāo)方法的相對路徑

用戶名:

年齡:

在后端控制器目標(biāo)方法中將網(wǎng)頁提交的數(shù)據(jù)作為參數(shù)傳入,并通過ModelAndView對象添加對象,然后通過setViewName方法跳轉(zhuǎn)到其他頁面。

@RequestMapping("/hello")

public ModelAndView hello(String username,int age) {

ModelAndView modelAndView = new ModelAndView();

modelAndView.addObject("username", username);

modelAndView.addObject("age", age);

modelAndView.setViewName("welcome");

return modelAndView;

}

(2) 在后端控制器中接收前臺(tái)“age”參數(shù),是否需要手動(dòng)轉(zhuǎn)換成int類型,為什么?

不需要,后端控制器自動(dòng)幫我們做了類型轉(zhuǎn)換。

5. 參數(shù)接收之對象整體接收

(1) 簡述以對象形式整體接收參數(shù)的步驟?

1-創(chuàng)建實(shí)體類

2-在后臺(tái)控制器的方法中傳入實(shí)體類對象作為參數(shù)。JSP頁面的請求數(shù)據(jù)都封存在了實(shí)體類對象中,根據(jù)對象的屬性來操作請求數(shù)據(jù)。

(2) 以對象形式整體接收參數(shù)有什么要求?

實(shí)體類的屬性名一定要和請求頁面中標(biāo)簽的name屬性值保持一致。

6. 參數(shù)接收之?dāng)?shù)組或集合接收參數(shù)

(1) 請簡述用數(shù)組或集合接收參數(shù)的步驟?

在數(shù)據(jù)提交頁面,多條數(shù)據(jù)輸入的name屬性值要保持一致:

Sing

Dance

Rap

Basketball

在后臺(tái)控制器中,方法參數(shù)中以數(shù)組或者集合的方式接收請求數(shù)據(jù):

@RequestMapping("/hello")

public void hello(String[] interest) {

for (String string : interest) {

System.out.println(string);

}

}

//集合接收參數(shù)

@RequestMapping("/hello")

public void hello1(@RequestParam List interest) {

for (String string : interest) {

System.out.println(string);

}

}

(2) 請描述數(shù)組和集合接收參數(shù)的區(qū)別?

使用結(jié)合接收請求參數(shù)需要借助@RequestParam來調(diào)整參數(shù)的格式,否則瀏覽器不能識(shí)別會(huì)報(bào)500錯(cuò)誤。而集合方式則不用。

7. 參數(shù)接收之域?qū)傩詤?shù)接收及restful風(fēng)格傳參

(1) 域?qū)傩詤?shù)的接收需要注意什么?

域?qū)傩詤?shù)接收頁面name的值命名規(guī)范是 屬性對象名.屬性對象的屬性名

例如:伙伴名稱:

(2) 什么是restful風(fēng)格傳參?

將參數(shù)以路徑的方式傳入,這種方式就叫做restful傳參。

比如:

后端控制器:

//后端控制器

@Controller //該注解代表當(dāng)前類交給spring容器管理

@Scope("prototype") //設(shè)置bean的作用域,默認(rèn)是singleton單態(tài)模式。

@RequestMapping("/springmvc") //該注解起到限定范圍的作用

public class MyController {

//restful風(fēng)格傳參

@RequestMapping("/{name}/{age}/hello")

public void hello1(@PathVariable String name,@PathVariable int age) {

System.out.println(name+age);

}

}

訪問時(shí)路徑:

http://localhost:8080/springmvc-09-receiveParameter-restful/springmvc/Lucas/12/hello

獲取參數(shù)。控制臺(tái)輸出Lucas12

8. 參數(shù)接收之接收json

(1) 如何在后端控制器中接收前臺(tái)傳過來的Json字符串?

在后端控制器的方法參數(shù)前使用@RequestBody來獲取請求體中的參數(shù)

例如:

//接收前臺(tái)JSON字符串

@RequestMapping("/hello")

public void hello1(@RequestBody User user) {

System.out.println(user);

}

(2) 如何將頁面中的Json對象轉(zhuǎn)換成Json字符串?

JSON.stringify(data1)

9. 獲取請求頭中信息@RequestHeader

(1) 請求頭中有哪些常用信息?

Host:主機(jī)信息

Cookie:cookie的jsessionid

(2) @RequestHeader該注解放到什么位置?

放在后臺(tái)控制器方法的參數(shù)之前。

10. 處理器方法返回值類型String

(1) 處理器方法何時(shí)使用String作為返回值類型?

只跳轉(zhuǎn)到視圖資源,不附帶數(shù)據(jù)的情況下,可以使用String作為返回值類型。

(2) 如果處理器方法返回值類型為String,默認(rèn)情況訪問該方法會(huì)如何跳轉(zhuǎn)?

根據(jù)返回的字符串再結(jié)合springmvc.xml文件中配置的視圖解析器完成跳轉(zhuǎn)頁面的路徑解析,然后跳轉(zhuǎn)到指定路徑的頁面。

如果返回的數(shù)據(jù)亂碼,可以在方法注解@RequestMapping中添加produces屬性來解決。

例如:@RequestMapping(value="/hello",produces="text/html;charset=utf-8")

11. 處理器方法無返回值void

(1) 如果處理器方法無返回值,那么能否進(jìn)行資源跳轉(zhuǎn)及傳遞數(shù)據(jù),如何實(shí)現(xiàn)?

可以。通過ajax來實(shí)現(xiàn)。同時(shí)可以借助HttpServletResponse對象來存儲(chǔ)數(shù)據(jù)。

(2) 何時(shí)處理器方法無返回值較合適?

頁面局部刷新的時(shí)候無返回值比較合適。因?yàn)榉祷刈址喈?dāng)于頁面跳轉(zhuǎn),整個(gè)頁面刷新,而局部刷新會(huì)節(jié)省資源,效率更高,用戶體驗(yàn)也更高。

12. 處理器方法返回值類型Object

(1) 如何將處理器方法返回值返回到前臺(tái)?

@ResponseBody //將當(dāng)前方法的返回值放到響應(yīng)體中,并且轉(zhuǎn)換成json格式,調(diào)用的是jackson包里面的方法。

13. 請求轉(zhuǎn)發(fā)與重定向

(1) 請描述請求轉(zhuǎn)發(fā)與重定向區(qū)別?

請求轉(zhuǎn)發(fā):服務(wù)器內(nèi)部的資源跳轉(zhuǎn),瀏覽器地址欄不變,是一次請求。

重定向:服務(wù)器在第一次請求進(jìn)行重定向后會(huì)返回給瀏覽器訪問另一個(gè)資源的響應(yīng),瀏覽器重新發(fā)送請求。地址欄會(huì)改變。是兩次不同的請求。如果要進(jìn)行數(shù)據(jù)的傳遞需要依賴session對象。

(2) 在javaEE中請求轉(zhuǎn)發(fā)和重定向是如何實(shí)現(xiàn)的?

modelAndView.setViewName("welcome");和返回字符串路徑的方式都是默認(rèn)請求轉(zhuǎn)發(fā)。

modelAndView.setViewName("redirect:/jsp/welcome.jsp");這種方式是重定向。重定向的視圖頁面需要借助param對象來獲取地址欄的請求參數(shù)。

14. 文件上傳

(1) 文件上傳時(shí),表單中添加了什么屬性,具體值是什么?

enctype="multipart/form-data"

(2) 使用springMVC進(jìn)行文件上傳時(shí),接收文件的參數(shù)類型是什么?

MultipartFile

15. 文件下載

(1) 該視頻中后端控制器方法的返回值類型是什么?

ResponseEntity

(2) 文件下載時(shí)后端控制器中涉及哪些步驟?

@RequestMapping("/fileDownload")

public ResponseEntity download() throws IOException{

//下載指定文件

File file = new File("d:/忘了他.jpg");

FileInputStream fis = new FileInputStream(file);

//創(chuàng)建字節(jié)數(shù)組,并且設(shè)置數(shù)組大小為預(yù)估的文件字節(jié)數(shù)

byte[] body = new byte[fis.available()];

//將輸入流中字符存儲(chǔ)到緩存數(shù)組中

fis.read(body);

//獲取下載顯示的文件名,并解決中文亂碼問題

String name = file.getName();

String downloadFileName = new String(name.getBytes("utf-8"),"ISO-8859-1");

//設(shè)置http響應(yīng)頭信息,并且通知瀏覽器以附件的形式進(jìn)行下載。

HttpHeaders httpHeaders = new HttpHeaders();

httpHeaders.add("Content-Disposition", "attachment;filename="+downloadFileName);

//設(shè)置Http響應(yīng)狀態(tài)信息

HttpStatus status = HttpStatus.OK;

ResponseEntity responseEntity = new ResponseEntity<>(body, httpHeaders, status);

return responseEntity;

}

16. 自定義攔截器

(1) 如何自定義攔截器?

//自定義攔截器

public class FirstInterceptor implements HandlerInterceptor{

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception exception)

throws Exception {

//該方法執(zhí)行時(shí)機(jī),所有工作處理完成之后,響應(yīng)給瀏覽器客戶端之前執(zhí)行

}

@Override

public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)

throws Exception {

//該方法執(zhí)行時(shí)機(jī),處理器方法執(zhí)行之后執(zhí)行

}

@Override

public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {

//該方法執(zhí)行時(shí)機(jī),處理器方法執(zhí)行之前執(zhí)行

System.out.println("攔截器preHandle方法執(zhí)行");

return false;

}

}

(2) 如何注冊攔截器?

17. 自定義攔截器-添加攔截器后執(zhí)行流程(對應(yīng)31-32視頻)

(1) 自定義攔截器實(shí)現(xiàn)HandlerInterceptor接口需要實(shí)現(xiàn)哪些方法,這些方法分別是何時(shí)執(zhí)行?

preHandle:該方法執(zhí)行時(shí)機(jī),處理器方法執(zhí)行之前執(zhí)行;

postHandle:該方法執(zhí)行時(shí)機(jī),處理器方法執(zhí)行之后執(zhí)行;

afterCompletion:該方法執(zhí)行時(shí)機(jī),所有工作處理完成之后,響應(yīng)給瀏覽器客戶端之前執(zhí)行

(2) 程序中有多個(gè)攔截器,那么程序的執(zhí)行流程是怎樣的?

按照springmvc.xml中的配置先后順序依次執(zhí)行各個(gè)攔截器的preHandle方法。然后再逆序執(zhí)行各個(gè)攔截器的postHandle方法。等所有工作處理完成之后,響應(yīng)給瀏覽器客戶端之前再逆序執(zhí)行各個(gè)攔截器的afterCompletion方法。

18. Spring與SpringMVC父子容器關(guān)系解釋

(1) 簡述Spring與SpringMVC的關(guān)系?

在Spring整體框架的核心概念中,容器是核心思想,就是用來管理Bean的整個(gè)生命周期的,而在一個(gè)項(xiàng)目中,容器不一定只有一個(gè),Spring中可以包括多個(gè)容器,而且容器有上下層關(guān)系,目前最常見的一種場景就是在一個(gè)項(xiàng)目中引入Spring和SpringMVC這兩個(gè)框架,那么它其實(shí)就是兩個(gè)容器,Spring是父容器,SpringMVC是其子容器,并且在Spring父容器中注冊的Bean對于SpringMVC容器中是可見的,而在SpringMVC容器中注冊的Bean對于Spring父容器中是不可見的,也就是子容器可以看見父容器中的注冊的Bean,反之就不行。

總結(jié)

以上是生活随笔為你收集整理的java中注解动态传参_SpringMVC之注解、传参、返回值及拦截器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。