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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

spring (四) SpringMVC的请求和响应

發布時間:2023/12/10 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring (四) SpringMVC的请求和响应 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

前言

一、SpringMVC的數據響應

1.1 SpringMVC的數據響應方式

1.1.1頁面跳轉????????直接返回字符串

???1.1.2通過ModelAndView對象返回

1.2? 回寫數據

1.2.1直接返回字符串

1.2.2返回對象或集合

二、SpringMVC獲得請求數據

2.1 獲得請求參數?

2.2 獲得基本類型參數

2.3 獲得POJO類型參數?

2.4 獲得數組類型參數

2.5 獲得集合類型參數

2.6 請求數據亂碼問題

2.7 參數綁定注解@requestParam

2.8 獲得Restful風格的參數

?2.9 自定義類型轉換器

2.10 獲得Servlet相關API

2.11 獲得請求頭

2.12 文件上傳

2.13 單文件上傳步驟

2.15 多文件上傳實現


前言

數據準備

鏈接: https://pan.baidu.com/s/17ztrNlfgu3NP_u2-5d9g3w 提取碼: v05b

一、SpringMVC的數據響應

1.1 SpringMVC的數據響應方式

1.1.1頁面跳轉
????????直接返回字符串

  • 在文件中新建一個文件夾,將success.jsp 頁面放進去
  • 2.在sring-mvc.xml文件中添加

    <!-- 配置資源視圖解析器--> <bean id="viewResolve" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/jsp/"/><property name="suffix" value=".jsp"/> </bean>

    此處添加的配置含義是:

    當頁面放在jsp文件夾后,tomcat服務器中資源success.jsp頁面與默認的index.jsp不在同一個目錄下,因此在訪問的真實路徑中需要添加為/jsp/success.jsp

    但是這太麻煩了,而在。。。(我也不記得了)的父類源碼中提供了一種在xml中配置真實訪問路徑的方法,也就是上面這個配置文件,因此,在UserController文件中,只需要配置訪問的路徑名字就可以,不需要再寫success.jsp

    ??1.1.2通過ModelAndView對象返回

    ?success.jsp

    ?/user/quick2

    使用注入實現 :

    1.2? 回寫數據

    1.2.1直接返回字符串

    Web基礎階段,客戶端訪問服務器端,如果想直接回寫字符串作為響應體返回的話,只需要使用 response.getWriter().print(“hello world”) 即可,Controller中想直接回寫字符串,方法如下:

    1 通過SpringMVC框架注入response對象,使用response.getWriter().print(“hello world”) 回寫數 據,此時不需要視圖跳轉,業務方法返回值為void。

    @Controller @RequestMapping("/user") public class UserController {Date now = new Date();String strDateFormat = "yyyy-MM-dd HH:mm:ss";LocalDateTime localDateTime = now.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();String result = localDateTime.format(DateTimeFormatter.ofPattern(strDateFormat));@RequestMapping(value="/quick6")public void invoke6(HttpServletResponse response) throws IOException {response.setCharacterEncoding("GBK");response.getWriter().write("現在時間是:"+result);}

    此處異常先拋出,后面會詳細更更新

    但此處仍不滿足需求,解耦合,所以

    2 將需要回寫的字符串直接返回,但此時需要通過@ResponseBody注解告知SpringMVC框架,方法 返回的字符串不是跳轉是直接在http響應體中返回。

    @Controller @RequestMapping("/user") public class UserController {Date now = new Date();String strDateFormat = "yyyy-MM-dd HH:mm:ss";LocalDateTime localDateTime = now.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();String result = localDateTime.format(DateTimeFormatter.ofPattern(strDateFormat));@ResponseBody //此處不進行頁面跳轉,進行回寫數據@RequestMapping(value="/quick7")public String invoke7(){return result;}

    返回json格式

    • pom.xml文件導入json包
    <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.13.1</version> </dependency> <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.1</version> </dependency> <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.13.1</version> </dependency>

    • 模擬加入一個對象,在當前文件下加入,目錄domain? user

      @ResponseBody //此處不進行頁面跳轉,進行回寫數據@RequestMapping(value="/quick8")public String invoke8() throws JsonProcessingException, UnsupportedEncodingException {user user =new user();user.setName("lisi");user.setAge(25);ObjectMapper objectMapper = new ObjectMapper();String string = objectMapper.writeValueAsString(user);return string;}

    1.2.2返回對象或集合

    通過SpringMVC對對象或集合進行json字符串的轉換并回寫,為處理器適配器配置消息轉換參數, 指定使用jackson進行對象或集合的轉換,因此需要在spring-mvc.xml中進行如下配置:

    <!--配置處理器映射器--><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="messageConverters"> <list><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> </list></property></bean>

    有個簡便的方法

    在方法上添加@ResponseBody就可以返回json格式的字符串,但是這樣配置比較麻煩,配置的代碼比較多, 因此,我們可以使用mvc的注解驅動代替上述配置。

    <mvc:annotation-driven/>

    頭部注意引入:

    xmlns:mvc="http://www.springframework.org/schema/mvc" http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

    在 SpringMVC 的各個組件中,處理器映射器、處理器適配器、視圖解析器稱為 SpringMVC 的三大組件。 使用<mvc:annotation-driven>自動加載 RequestMappingHandlerMapping(處理映射器)和 RequestMappingHandlerAdapter( 處 理 適 配 器 ),可用在Spring-xml.xml配置文件中使用 <mvc:annotation-driven>替代注解處理器和適配器的配置。 同時使用<mvc:annotation-driven>默認底層就會集成jackson進行對象或集合的json格式字符串的轉換。?

    二、SpringMVC獲得請求數據

    2.1 獲得請求參數?

    客戶端請求參數的格式是:name=value&name=value... ...

    ? 基本類型參數

    ? POJO類型參數? 類似于javabean

    ? 數組類型參數

    ? 集合類型參數

    2.2 獲得基本類型參數

    Controller中的業務方法的參數名稱要與請求參數的name一致,參數值會自動映射匹配。

    例如:?

    鏈接:http://localhost:8080/user/quick9?username=zhangsan&age=18

    Controller:

    @ResponseBody //此處不進行頁面跳轉,進行回寫數據@RequestMapping(value="/quick9")public void invoke9(String username,String age){System.out.println(username);System.out.println(age);}

    ?

    2.3 獲得POJO類型參數?

    ?鏈接:http://localhost:8080/user/quick9/name=zhangsan&age=18

    @ResponseBody //此處不進行頁面跳轉,進行回寫數據@RequestMapping(value="/quick10")public void invoke10(user user){System.out.println(user.getName());System.out.println(user.getAge());}

    2.4 獲得數組類型參數

    @ResponseBody //此處不進行頁面跳轉,進行回寫數據@RequestMapping(value="/quick11")public void invoke11(String[] strs){System.out.println(Arrays.asList(strs));}

    Arrays.asList(strs) 將數組轉換為list輸出時可以看到結果

    2.5 獲得集合類型參數

    獲得集合參數時,要將集合參數包裝到一個POJO中才可以。

    • 首先創在一個集合:

    • 集合中封裝user對象?

    ?添加一個前端頁面,提交數據,因為存入list集合中時可以存在多個user對象,因此此處的寫法使用角標的方式判斷是第幾個user對象

    ?此處引、入集合后直接打印

    鏈接:/jsp/form.jsp

    結果:

    當使用ajax提交時,可以指定contentType為json形式,那么在方法參數位置使用@RequestBody可以 直接接收集合數據而無需使用POJO進行包裝。

    此處解釋ajax

    ?異步和同步:客戶端和服務器端相互通信的基礎上
    ?? ??? ??? ?* 客戶端必須等待服務器端的響應。在等待的期間客戶端不能做其他操作。
    ?? ??? ??? ?* 客戶端不需要等待服務器端的響應。在服務器處理請求的過程中,客戶端可以進行其他的操作。

    ?? ??? ??? ?Ajax 是一種在無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。 [1]?
    ?? ??? ??? ?通過在后臺與服務器進行少量數據交換,Ajax 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。
    ?? ??? ??? ?傳統的網頁(不使用 Ajax)如果需要更新內容,必須重載整個網頁頁面。

    ?? ??? ??? ?提升用戶的體驗

    創建一個新的頁面

    在 UserController中添加一個方法:

    ?此時運行時會發生報錯,原因是找不到js的引入文件,報錯如下:

    ?因此,需要在,spring-mvc.xml文件中添加一行代碼:

    ?原因是SpringMVC的前端控制器 DispatcherServlet的url-pattern配置的是/,代表對所有的資源都進行過濾操作,我們可以通過以下兩種 方式指定放行靜態資源:

    ? 在spring-mvc.xml配置文件中指定放行的資源

    <mvc:resources mapping="/js/**" location="/js/"/>

    ? 使用<mvc:default-servlet-handler/>標簽

    當mvc找不到映射方法時,原來的操作是停止,加上這句話的意思是如果映射不到則交由tomcat處理

    此時運行得到的結果是:

    如果此時您的代碼還是報錯找不到jquery.js文件,但是代碼邏輯沒有問題(上面的代碼帶有一個bug當做小練習),很有可能是版本導致的問題?

    2.6 請求數據亂碼問題

    當post請求時,數據會出現亂碼,可以設置一個過濾器來進行編碼的過濾。

    在web.xml文件中添加;

    <!-- 配置編碼--><filter><filter-name>CharacterEncoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>

    2.7 參數綁定注解@requestParam

    注解@RequestParam還有如下參數可以使用:
    ? value:與請求參數名稱 :解決請求參數與映射參數不一致
    ? required:此在指定的請求參數是否必須包括,默認是true,提交時如果沒有此參數則報錯

    ? defaultValue:當沒有指定請求參數時,則使用指定的默認值賦值

    @RequestMapping("/quick14") @ResponseBody public void quickMethod14(@RequestParam(value="name",required = false,defaultValue = "hahha") String username) throws IOException { System.out.println(username); }

    2.8 獲得Restful風格的參數

    Restful是一種軟件架構風格、設計風格,而不是標準,只是提供了一組設計原則和約束條件。主要用于客戶端和服務 器交互類的軟件,基于這個風格設計的軟件可以更簡潔,更有層次,更易于實現緩存機制等。

    Restful風格的請求是使用“url+請求方式”表示一次請求目的的,HTTP 協議里面四個表示操作方式的動詞如下: ? GET:用于獲取資源
    ? POST:用于新建資源
    ? PUT:用于更新資源

    ? DELETE:用于刪除資源

    例如:
    ? /user/1 GET: 得到id=1的 user

    ? /user/1 DELETE: 刪除 id = 1 的 user

    ? /user/1 PUT: 更新id=1的user

    ? /user POST: 新增 user

    鏈接:http://localhost:8080/user/quick19/zhangsan

    2.9 自定義類型轉換器

    ? SpringMVC 默認已經提供了一些常用的類型轉換器,例如客戶端提交的字符串轉換成int型進行參數設置。
    ? 但是不是所有的數據類型都提供了轉換器,沒有提供的就需要自定義轉換器,例如:日期類型的數據就需要自定義轉換器。

    自定義類型轉換器的開發步驟:
    1 定義轉換器類實現Converter接口
    2 在配置文件中聲明轉換器
    3 在<annotation-driven>中引用轉換器

    public class DateConverter implements Converter<String, Date> {@Overridepublic Date convert(String s) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");Date date = null;try {date = format.parse(s);} catch (ParseException e) {e.printStackTrace();}return date;} }

    ?spring-mvc.xml

    <mvc:annotation-driven conversion-service="converterService"/><!-- <mvc:default-servlet-handler/>--><bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><list><bean class="com.student.test.Converter.DateConverter"/></list></property></bean>

    ?在配置文件中添加:

    <mvc:annotation-driven conversion-service="converterService"/>

    測試鏈接:http://localhost:8080/user/quick14?date=2012-12-31

    2.10 獲得Servlet相關API

    SpringMVC支持使用原始ServletAPI對象作為控制器方法的參數進行注入,常用的對象如下:

    ? HttpServletRequest
    ? HttpServletResponse
    ? HttpSession

    前面有哦

    2.11 獲得請求頭

    1. 使用@RequestHeader可以獲得請求頭信息,相當于web階段學習的request.getHeader(name) @RequestHeader注解的屬性如下:
    ? value:請求頭的名稱
    ? required:是否必須攜帶此請求頭

    2. @CookieValue

    使用@CookieValue可以獲得指定Cookie的值 @CookieValue注解的屬性如下:
    ? value:指定cookie的名稱
    ? required:是否必須攜帶此cookie

    2.12 文件上傳

    1. 文件上傳客戶端三要素

    ? 表單項type=“file”
    ? 表單的提交方式是post
    ? 表單的enctype屬性是多部分表單形式,及enctype=“multipart/form-data”

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body> <form action="${pageContext.request.contentType}/user/quick19" method="post" enctype="multipart/form-data">名稱<input name="name" type="text">文件<input name="uploadFile" type="file"></form></body> </html>

    2.13 單文件上傳步驟

    1 導入fileupload和io坐標

    <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version> </dependency>

    2 配置文件上傳解析器

    spring-mvc.xml

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--上傳文件總大小--><property name="maxUploadSize" value="5242800"/> <!--上傳單個文件的大小--><property name="maxUploadSizePerFile" value="5242800"/><!--上傳文件的編碼類型--><property name="defaultEncoding" value="UTF-8"/></bean>


    3 編寫文件上傳代碼

    @ResponseBody@RequestMapping(value="/quick19")public void invoke19(String name, MultipartFile uploadFile){System.out.println(name);System.out.println(uploadFile);} //獲得文件名稱 String originalFilename = uploadFile.getOriginalFilename(); //保存文件 uploadFile.transferTo(new File("C:\\upload\\"+originalFilename));

    4.前端

    ?

    ?

    2.15 多文件上傳實現

    多文件上傳,只需要將頁面修改為多個文件上傳項,將方法參數MultipartFile類型修改為MultipartFile[]即可

    @ResponseBody@RequestMapping(value="/quick19")public void invoke19(String name, MultipartFile uploadFile,MultipartFile uploadFile1,MultipartFile uploadFile2){System.out.println(name);System.out.println(uploadFile);}

    ?

    如果獲取數組

    ?

    看到這里了,點個贊唄~~~~

    總結

    以上是生活随笔為你收集整理的spring (四) SpringMVC的请求和响应的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。