日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

javascript

SpringMVC 刷课笔记

發(fā)布時(shí)間:2023/12/14 javascript 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC 刷课笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SpringMVC 筆記

一、Hello SpringMVC

原理圖(我們只需要做虛線部分,實(shí)現(xiàn)的Spring幫我們做了)

簡要分析執(zhí)行流程

  • DispatcherServlet表示前置控制器,是整個(gè)SpringMVC的控制中心。用戶發(fā)出請(qǐng)求,DispatcherServlet接收請(qǐng)求并攔截請(qǐng)求。
    • 我們假設(shè)請(qǐng)求的url為 : http://localhost:8080/SpringMVC/hello
    • 如上url拆分成三部分:
    • http://localhost:8080服務(wù)器域名.
    • SpringMVC部署在服務(wù)器上的web站點(diǎn).
    • hello表示控制器
    • 通過分析,如上url表示為:請(qǐng)求位于服務(wù)器localhost:8080上的SpringMVC站點(diǎn)的hello控制器。
  • HandlerMapping為處理器映射。 DispatcherServlet調(diào)用HandlerMapping, HandlerMapping根據(jù)請(qǐng)求url查找Handler。
  • HandlerExecution表示具體的Handler,其主要作用是根據(jù)url查找控制器,如上url被查找控制器為: hello。
  • HandlerExecution將解析后的信息傳遞給DispatcherServlet,如解析控制器映射等。
  • HandlerAdapter表示處理器適配器,其按照特定的規(guī)則去執(zhí)行Handler。
  • Handler讓具體的Controller執(zhí)行。
  • Controller將具體的執(zhí)行信息返回給HandlerAdapter ,如ModelAndView。
  • HandlerAdapter將視圖邏輯名或模型傳遞給DispatcherServlet。
  • DispatcherServlet調(diào)用視圖解析器(ViewResolver)來解析HandlerAdapter傳遞的邏輯視圖名。
  • 視圖解析器將解析的邏輯視圖名傳給DispatcherServlet。
  • DispatcherServlet根據(jù)視圖解析器解析的視圖結(jié)果,調(diào)用具體的視圖。
  • 最終視圖呈現(xiàn)給用戶。
  • 項(xiàng)目目錄

    1、 注冊(cè):DispatcherServlet 這是SpringMVC的核心,請(qǐng)求分發(fā)器,前端控制器
    web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!-- 1.注冊(cè):DispatcherServlet 這是SpringMVC的核心,請(qǐng)求分發(fā)器,前端控制器 --><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 關(guān)聯(lián)一個(gè)SpringMVC的配置文件:【servlet-name】-servlet.xml (Spring配置文件) --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:SpringMVC-Servlet.xml</param-value></init-param><!-- 啟動(dòng)級(jí)別-1 --><load-on-startup>1</load-on-startup></servlet><!-- / 匹配所有的請(qǐng)求:(不包括.jsp) --><!-- /* 匹配所有的請(qǐng)求:(包括.jsp) --><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

    2、 配置 SpringMVC-Servlet.xml 文件

    • 添加處理器映射
    • 配置處理器適配器
    • 添加視圖解析器
    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 添加處理器映射 --><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /><!-- 處理器適配器 --><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /><!-- 添加視圖解析器 模板引擎: Thymeleaf Freemarker... --><!-- 視圖解析器:DispatcherServlet 給它的 ModelAndView1. 獲取 ModelAndView 中的數(shù)據(jù)2. 解析 ModelAndView 的視圖名字3. 拼接視圖名字,找到對(duì)應(yīng)的視圖 /WEB_INF/jsp/xxx.jsp4. 將數(shù)據(jù)渲染到這個(gè)視圖上--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver" ><!-- 前綴 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后綴 --><property name="suffix" value=".jsp" /></bean> </beans>

    3、編寫 Controller

    import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;// 注意:這里先導(dǎo)入Controller接口 public class HelloController implements Controller {public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {// ModelAndView 模型和視圖ModelAndView mv = new ModelAndView();// 封裝對(duì)象 放在ModelAndView中,Modelmv.addObject("msg", "HelloSpringMVC");// 封裝要跳轉(zhuǎn)的視圖,放在ModelAndView中mv.setViewName("hello"); // : /WEB_INF/jsp/hello.jspreturn mv;} }

    4、 注冊(cè)到Spring容器中(SpringMVC-Servlet.xml 文件 )

    <!-- Handler --><!-- BeanNameUrlHandlerMapping: bean --><bean id="/hello" class="com.example.controller.HelloController" />

    5、 啟動(dòng) Tomcat 測試

    IDEA啟動(dòng)Tomcat服務(wù)器,代碼無誤,但訪問出現(xiàn) 404 錯(cuò)誤

  • 查看控制臺(tái)輸出,看是否確實(shí)jar包
  • 如果jar保存在,就在IDEA的項(xiàng)目發(fā)布中,添加lib依賴
  • 重啟Tomcat

  • 快速生成:

    二、使用注解開發(fā)

    1、 注冊(cè):DispatcherServlet 這是SpringMVC的核心,請(qǐng)求分發(fā)器,前端控制器 (與上文一樣)
    2、 編寫spring配置文件(SpringMVC-Servlet.xml)

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd "><!-- 自動(dòng)掃描包,讓指定包下的注解生效,由 IOC 容器統(tǒng)一管理 --><context:component-scan base-package="com.example.controller" /><!-- 讓 Spring MVC 不處理靜態(tài)資源文件 : .css .js .html .mp3 .mp4 --><mvc:default-servlet-handler /><!--支持mvc注解驅(qū)動(dòng)在Spring中一般采用 @RequestMapping 注解來完成映射關(guān)系要是 @RequestMapping 注解生效必須向上下文注冊(cè) DefaultAnnotationHandlerMapping和一個(gè) AnnotationMethodHandlerAdapter 實(shí)例這兩個(gè)實(shí)例分別在類級(jí)別和方法級(jí)別處理而 annotation-driven 配置幫助我們自動(dòng)完成上述兩個(gè)實(shí)例的注入--><mvc:annotation-driven /><!-- 添加視圖解析器 模板引擎: Thymeleaf Freemarker... --><!-- 視圖解析器:DispatcherServlet 給它的 ModelAndView1. 獲取 ModelAndView 中的數(shù)據(jù)2. 解析 ModelAndView 的視圖名字3. 拼接視圖名字,找到對(duì)應(yīng)的視圖 /WEB_INF/jsp/xxx.jsp4. 將數(shù)據(jù)渲染到這個(gè)視圖上--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver" ><!-- 前綴 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后綴 --><property name="suffix" value=".jsp" /></bean></beans>

    3、 編寫Controller類

    import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping;@Controller public class HelloController {// 真實(shí)訪問的地址 項(xiàng)目名/HelloController/hello@RequestMapping("/hello")public String hello(Model model){// 封裝數(shù)據(jù)model.addAttribute("msg", "Hello, SpringMVC Annotation!");// 會(huì)被視圖解析器處理;return "hello"; // /WEB-INF/jsp/hello.jsp} }

    4、編寫jsp

    5、啟動(dòng) Tomcat 測試

    總結(jié):

    Spring MVC 必須配置三大件:
    處理器映射器、

    <!-- 添加處理器映射 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

    處理器適配器、

    <!-- 處理器適配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

    (通常我們只需要配置視圖解析器,處理器映射器和處理器適配器只需要開啟注解驅(qū)動(dòng)即可,如下:)

    <!--支持mvc注解驅(qū)動(dòng)在Spring中一般采用 @RequestMapping 注解來完成映射關(guān)系要是 @RequestMapping 注解生效必須向上下文注冊(cè) DefaultAnnotationHandlerMapping和一個(gè) AnnotationMethodHandlerAdapter 實(shí)例這兩個(gè)實(shí)例分別在類級(jí)別和方法級(jí)別處理而 annotation-driven 配置幫助我們自動(dòng)完成上述兩個(gè)實(shí)例的注入--><mvc:annotation-driven />

    視圖解析器

    <!-- 視圖解析器:DispatcherServlet 給它的 ModelAndView1. 獲取 ModelAndView 中的數(shù)據(jù)2. 解析 ModelAndView 的視圖名字3. 拼接視圖名字,找到對(duì)應(yīng)的視圖 /WEB_INF/jsp/xxx.jsp4. 將數(shù)據(jù)渲染到這個(gè)視圖上--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver" ><!-- 前綴 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后綴 --><property name="suffix" value=".jsp" /></bean>

    Controller

    @Controller
    用在類上代表這個(gè)類被Spring管理; 被這個(gè)注解的類中的所有方法,如果返回值是 String ,并且有具體的頁面可以跳轉(zhuǎn)就會(huì)被視圖解析器解析

    RequestMapping

    @RequestMapping
    注解用于映射控制器類或者一個(gè)特定處理程序的方法,可用于類和方法上。用于類上表示所有響應(yīng)請(qǐng)求的方法都是改地址作為父路徑。
    @RequestMapping(method = RequestMethod.xxx)
    method屬性是對(duì)請(qǐng)求的method屬性的限定。指定必須通過xxx方法訪問。

    RestFul風(fēng)格

    RestFul就是一個(gè)資源定位及其資源操作的風(fēng)格,基于這個(gè)風(fēng)格設(shè)計(jì)可以更加簡潔,更有層次感,更易于實(shí)現(xiàn)緩存機(jī)制。
    請(qǐng)求地址可以一樣,但是請(qǐng)求功能可以不同。

    @PathVariable

    URL -> /{變量名}

    使用@PathVariable(“變量名”)指定變量名(如果變量名和參數(shù)名一致也可以不指定),從而將URL中的值綁定到參數(shù)上。

    @RequestMapping("/xxx/{a}/{xxx}") public String test(@PathVariable int a,@PathVariable("xxx") int b){}

    可以使用注解@(method名)Mapping來約束我們請(qǐng)求的類型,則不用定義@RequestMapping中的method屬性。如@GetMapping、@PostMapping、@DeleteMapping…

    @GetMapping、@PostMapping 配置的地址都是:

    http://localhost:8080/SpringMVC_04_controller/add/a/b

    但是按照提交的方式會(huì)走 @GetMapping 或 @PostMapping 標(biāo)記的方法
    標(biāo)記@GetMapping注解的方法只用處理GET提交請(qǐng)求、通過@PostMapping注解的方法只能處理POST提交的請(qǐng)求…

    重定向和轉(zhuǎn)發(fā)

    • ModelAndView
      設(shè)置ModelAndView對(duì)象,根據(jù)view,跳轉(zhuǎn)到指定頁面。
      頁面 : {視圖解析器前綴} + viewName + {視圖解析器后綴}

    通過SpringMVC 來實(shí)現(xiàn)那轉(zhuǎn)發(fā)和重定向 - 無視圖解析器
    測試前,需要將視圖解析器的配置注釋掉。

    轉(zhuǎn)發(fā):

    return "/index.jsp"; return "forward:/index.jsp";

    重定向

    return "redirect:/index.jsp";

    通過SpringMVC 來實(shí)現(xiàn)那轉(zhuǎn)發(fā)和重定向 - 有視圖解析器
    重定向,不需要視圖解析器,本質(zhì)就是重新請(qǐng)求一個(gè)新地方,所以注意路徑問題。
    可以重定向到另外一個(gè)請(qǐng)求實(shí)現(xiàn)。

    轉(zhuǎn)發(fā):

    return "test";

    重定向

    return "redirect:/index.jsp"; // return "redirect:hello.do"; // hello.do 為另一個(gè)請(qǐng)求

    (路徑問題?)

    接收請(qǐng)求參數(shù)以及數(shù)據(jù)回顯

    • 請(qǐng)求參數(shù)
    @Controller @RequestMapping("/user") public class UserController {// ?name=xxx@GetMapping("/t1")public String test1(@RequestParam("username") String name, Model model){// 1.接收前端的參數(shù)System.out.println("參數(shù):" + name);// 2.將返回結(jié)果傳遞給前端 : Modelmodel.addAttribute("msg", name);// 3.視圖跳轉(zhuǎn)return "test";}// 前端接收一個(gè)對(duì)象 id name age/*1. 接收前端用戶傳遞的參數(shù),判斷參數(shù)的名字,假設(shè)名字直接在方法上,可以直接使用2. 假設(shè)傳遞的是一個(gè)User對(duì)象,匹配User的字段名,如果名字一致則匹配,如果名字不一致則匹配不到為默認(rèn)初始值http://localhost:8080/SpringMVC_04_controller/user/t2?name=miaobao&id=1&age=10*/@GetMapping("/t2")public String test2(User user){System.out.println(user);return "test";}}

    一般從前端傳遞的參數(shù)使用注解@RequestParam(“前端傳遞參數(shù)名”) 進(jìn)行參數(shù)的命名,方便區(qū)分這是從前端傳遞的參數(shù)

    • 數(shù)據(jù)回顯
      • 第一種 ModelAndView
    class test{@RequestMapping("/hello")public String hello(Model model){// ModelAndView 模型和視圖ModelAndView mv = new ModelAndView();// 封裝對(duì)象 放在ModelAndView中,Modelmv.addObject("msg", "HelloSpringMVC");// 封裝要跳轉(zhuǎn)的視圖,放在ModelAndView中mv.setViewName("hello");return mv;} }
    • 第二種 ModelMap
    class test{@RequestMapping("/hello")public String hello(ModelMap map){// 封裝數(shù)據(jù)map.addAttribute("msg", "Hello, SpringMVC Annotation!");// 會(huì)被視圖解析器處理;return "hello";} }
    • 第三種 Model (大部分情況下使用)
    class test{@RequestMapping("/hello")public String hello(Model model){// 封裝數(shù)據(jù)model.addAttribute("msg", "Hello, SpringMVC Annotation!");// 會(huì)被視圖解析器處理;return "hello";} }

    Model:只有幾個(gè)適用于存儲(chǔ)數(shù)據(jù)的方法,簡化新手對(duì)Model 對(duì)象的操作和理解
    ModelMap: 繼承了LinkMap,除了自身的一些方法外,同樣繼承LinkMap的方法和特性
    ModelAndView: 可以存儲(chǔ)數(shù)據(jù)的同時(shí),可以進(jìn)行設(shè)置返回的邏輯視圖,進(jìn)行控制視圖層的跳轉(zhuǎn)

    亂碼問題

    以前亂碼問題是通過過濾器解決,而SpringMVC給我們提供了一個(gè)過濾器,可以在 web.xml 中配置

    <filter><filter-name>encoding</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>encoding</filter-name><url-pattern>/*</url-pattern> </filter-mapping>

    JSON

    JSON(JavaScript Object Notation, JS 對(duì)象簡譜) 是一種輕量級(jí)的數(shù)據(jù)交換格式。
    采用獨(dú)立于編程語言的 文本格式 來存儲(chǔ)表示數(shù)據(jù)
    有效提供網(wǎng)絡(luò)傳輸效率

    前后端分離時(shí)代:
    后端部署后端,提供接口,提供數(shù)據(jù) <<-- JSON -->> 前端獨(dú)立部署,負(fù)責(zé)渲染后端的數(shù)據(jù)

    JavaScript代碼示例

    // 編寫一個(gè)JavaScript對(duì)象 let user = {name: "面包",age: 18,sex: "男" }; console.log("user對(duì)象:", user);// 將 js 對(duì)象轉(zhuǎn)化為 json 對(duì)象 let json = JSON.stringify(user); console.log("json對(duì)象:", json);// 將 json 對(duì)象轉(zhuǎn)化為 js 對(duì)象 let obj = JSON.parse(json); console.log("obj對(duì)象:", obj);
    • Jackson

    導(dǎo)入依賴

    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.2</version> </dependency>

    1、@ResponseBody // 他就不會(huì)走視圖解析器,會(huì)直接返回一個(gè)字符串

    注解的作用是將controller的方法返回的對(duì)象通過適當(dāng)?shù)霓D(zhuǎn)換器轉(zhuǎn)換為指定的格式之后,寫入到response對(duì)象的body區(qū),通常用來返回JSON數(shù)據(jù)或者是XML數(shù)據(jù)。

    注意:在使用此注解之后不會(huì)再走視圖處理器,而是直接將數(shù)據(jù)寫入到輸入流中,他的效果等同于通過response對(duì)象輸出指定格式的數(shù)據(jù)。

    @ResponseBody是作用在方法上的,@ResponseBody 表示該方法的返回結(jié)果直接寫入 HTTP response body 中,一般在異步獲取數(shù)據(jù)時(shí)使用【也就是AJAX】。

    注意:在使用 @RequestMapping后,返回值通常解析為跳轉(zhuǎn)路徑,但是加上 @ResponseBody 后返回結(jié)果不會(huì)被解析為跳轉(zhuǎn)路徑,而是直接寫入 HTTP response body 中。 比如異步獲取 json 數(shù)據(jù),加上 @ResponseBody 后,會(huì)直接返回 json 數(shù)據(jù)。@RequestBody 將 HTTP 請(qǐng)求正文插入方法中,使用適合的 HttpMessageConverter 將請(qǐng)求體寫入某個(gè)對(duì)象。

      @RequestMapping("/login")@ResponseBodypublic User login(User user){return user;}/* 等價(jià)于 */@RequestMapping("/login")public void login(User user, HttpServletResponse response){response.getWriter.write(JSONObject.fromObject(user).toString());}

    2、@RequestBody

    后端@RequestBody注解對(duì)應(yīng)的類在將HTTP的輸入流(含請(qǐng)求體)裝配到目標(biāo)類(即:@RequestBody后面的類)時(shí),會(huì)根據(jù)json字符串中的key來匹配對(duì)應(yīng)實(shí)體類的屬性,
    如果匹配一致且json中的該key對(duì)應(yīng)的值符合(或可轉(zhuǎn)換為)實(shí)體類的對(duì)應(yīng)屬性的類型要求時(shí),會(huì)調(diào)用實(shí)體類的setter方法將值賦給該屬性。

    3、@RestController

    @RestController = @Controller + @ResponseBody組成
    返回json數(shù)據(jù)不需要在方法前面加@ResponseBody注解了,
    但使用@RestController這個(gè)注解,就不能返回jsp,html頁面,視圖解析器無法解析jsp,html頁面
    標(biāo)注在類上,下面的所有方法只會(huì)返回接口的數(shù)據(jù)(前后端分離使用)

    測試

    public class User {private String name;private int age;private String sex;// getter and setter } @Controller public class UserController {@RequestMapping("/json1")@ResponseBody // 他就不會(huì)走視圖解析器,會(huì)直接返回一個(gè)字符串public String json1() throws JsonProcessingException {// jackson : ObjectMapperObjectMapper mapper = new ObjectMapper();User user = new User("面包1", 3, "男");String s = mapper.writeValueAsString(user);return s;}}

    發(fā)現(xiàn)有亂碼問題,我們需要設(shè)置一下他的編碼格式為utf-8,以及返回的類型
    通過 @RequestMapping 的 produces 屬性來實(shí)現(xiàn),

    @RequestMapping(value = "/json1", produces = "application/json;charset=utf-8")
    亂碼問題統(tǒng)一解決

    上一種方式比較復(fù)雜,可以使用Spring配置統(tǒng)一指定,這樣就不用每次都去處理

    可以在SpringMVC配置文件中添加一段消息 StringHttpMassageConverter 轉(zhuǎn)換配置

    <!-- JSON 亂碼 --> <mvc:annotation-driven><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter" ><constructor-arg value="UTF-8" /></bean><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" ><property name="objectMapper"><bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"><property name="failOnEmptyBeans" value="false" /></bean></property></bean></mvc:message-converters> </mvc:annotation-driven>

    測試以及將JSON封裝成工具類

    @RestController public class UserController {@RequestMapping("json2")public String json2() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();List<User> users = new ArrayList<User>();for (int i = 1; i < 5; i++) {User user = new User("面包"+i+"號(hào)", i, "男");users.add(user);}String str = mapper.writeValueAsString(users);return str;}@RequestMapping("json3")public String json3() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();// 不使用時(shí)間戳的方式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);// 自定義時(shí)間日期格式方式SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");// 指定日期格式mapper.setDateFormat(dateFormat);Date date = new Date();// ObjectMapper : 時(shí)間解析后的默認(rèn)格式為Timestamp(時(shí)間戳)return mapper.writeValueAsString(date);}@RequestMapping("json4")public String json4() throws JsonProcessingException {Date date = new Date();String df = "YYYY-MM-dd HH:mm:ss";return JsonUtils.getJson(date, df);}} public class JsonUtils {public static String getJson(Object object){return getJson(object, "YYYY-MM-dd HH:mm:ss");}public static String getJson(Object object, String dataFormat){ObjectMapper mapper = new ObjectMapper();// 不使用時(shí)間戳的方式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);// 自定義時(shí)間日期格式方式SimpleDateFormat sdf = new SimpleDateFormat(dataFormat);// 指定日期格式mapper.setDateFormat(sdf);try {return mapper.writeValueAsString(object);} catch (JsonProcessingException e) {e.printStackTrace();}return null;} }
    • FastJson (阿里開源)

    導(dǎo)入依賴

    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.73</version> </dependency>

    FastJson 三個(gè)主要的類

    • JSONObject 代表 JSON 對(duì)象

      • JSONObject 實(shí)現(xiàn)了 Map 接口,猜想 JSONObject 底層操作是由 Map 實(shí)現(xiàn)的。
      • JSONObject 對(duì)應(yīng) json對(duì)象,通過各種形式的get()方法可以獲取json對(duì)象中的數(shù)據(jù),也可以利用諸如size(),isEmpty()
        等方法獲取 “鍵:值” 對(duì)的個(gè)數(shù)和判斷是否為空,其本質(zhì)是調(diào)用Map接口并調(diào)用接口中的方法實(shí)現(xiàn)。
    • JSONArray 代表 JSON 數(shù)組

    • JSON 代表 JSONObject 和 JSONArray 的轉(zhuǎn)變

    代碼示例

    @RestController @RequestMapping("/fastJson") public class UserController2 {@RequestMapping("/json1")public String test1(){List<User> userList = new ArrayList<User>();User user = null;for (int i = 1; i < 5; i++) {user = new User("面包"+i+"號(hào)", i, "男");userList.add(user);}// Java 裝對(duì)象 轉(zhuǎn) JSON 字符串String str1 = JSON.toJSONString(userList);System.out.println("JSON.toJSONString(userList) ==> " + str1);String str2 = JSON.toJSONString(user);System.out.println("JSON.toJSONString(user) ==> " + str2);// JSON 字符串 轉(zhuǎn) Java 對(duì)象User json_to_user = JSON.parseObject(str2, User.class);System.out.println("JSON.parseObject(str2, User.class) ==> " + json_to_user);// Java 對(duì)象 轉(zhuǎn) JSON 對(duì)象JSONObject jsonObject = (JSONObject) JSON.toJSON(user);System.out.println("(JSONObject) JSON.toJSON(user) ==> " + jsonObject.toJSONString());return str1 + str2 + json_to_user.toString() + jsonObject.toJSONString();}}

    AJAX

    Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),是指一種創(chuàng)建交互式、快速動(dòng)態(tài)網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù),無需重新加載整個(gè)網(wǎng)頁的情況下,能夠更新部分網(wǎng)頁的技術(shù)。

    通過在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,Ajax 可以使網(wǎng)頁實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁的情況下,對(duì)網(wǎng)頁的某部分進(jìn)行更新。

    測試

    @RestController public class AjaxController {@RequestMapping("/t1")public String test(){return "Hello";}@RequestMapping("/a")public void a(String name, HttpServletResponse response) throws IOException {System.out.println("a:param => " + name);if ("mianbao".equals(name)){response.getWriter().print("true");}else{response.getWriter().print("false");}}@RequestMapping("/a2")public List<User> a2(){List<User> userList = new ArrayList<User>();userList.add(new User("面包1", 1, "男"));userList.add(new User("面包2", 2, "女"));userList.add(new User("面包3", 3, "男"));return userList;}} <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>$Title$</title><script src="${pageContext.request.contextPath}/static/js/jquery-3.4.1/jquery-3.4.1.js"></script><script type="text/javascript">function a() {$.post({url: "${pageContext.request.contextPath}/a",data: {"name": $("#username").val()},success: function (res) {alert(res);}});}</script> </head> <body><%-- 失去焦點(diǎn)的時(shí)候,發(fā)起一個(gè)請(qǐng)求到后端 --%>用戶名:<input type="text" id="username" onblur="a()" /> </body> </html> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title><script src="${pageContext.request.contextPath}/static/js/jquery-3.4.1/jquery-3.4.1.js"></script><script type="text/javascript">$(function () {$("#btn").click(function (e) {$.post("${pageContext.request.contextPath}/a2", function (res) {console.log(res);let html = "";for (let i = 0; i < res.length; i++) {html += "<tr>" +"<td>" + res[i].name + "</td>" +"<td>" + res[i].age + "</td>" +"<td>" + res[i].sex + "</td>" +"</tr>"}$("#content").html(html);});})});</script> </head> <body><input type="button" value="加載數(shù)據(jù)" id="btn" > <table><tr><td>姓名</td><td>年齡</td><td>性別</td></tr><tbody id="content"><%-- 數(shù)據(jù): 后臺(tái) --%></tbody> </table></body> </html>

    Ajax 驗(yàn)證用戶名體驗(yàn)

    @RequestMapping("/a3")public String a3(String name, String pwd){String msg = "";if (name != null){if ("admin".equals(name)){msg = "ok";}else{msg = "用戶名有誤";}}if (pwd != null){if ("admin".equals(pwd)){msg = "ok";}else{msg = "密碼名有誤";}}return msg;} <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>登錄</title><script src="${pageContext.request.contextPath}/static/js/jquery-3.4.1/jquery-3.4.1.js"></script><script type="text/javascript">function a1() {$.post({url: "${pageContext.request.contextPath}/a3",data: {"name": $("#name").val()},success: function (res) {console.log(res);if (res.toString() === "ok"){$("#nameInfo").css("color", "green");}else{$("#nameInfo").css("color", "red");}$("#nameInfo").html(res);}});}function a2() {$.post({url: "${pageContext.request.contextPath}/a3",data: {"pwd": $("#password").val()},success: function (res) {console.log(res);if (res.toString() === "ok"){$("#pwdInfo").css("color", "green");}else{$("#pwdInfo").css("color", "red");}$("#pwdInfo").html(res);}});}</script></head> <body><p>用戶名: <input type="text" id="name" onblur="a1()"><span id="nameInfo"></span> </p> <p>密碼: <input type="password" id="password" onblur="a2()"><span id="pwdInfo"></span> </p></body> </html>

    攔截器

    攔截器(Interceptor),主要完成請(qǐng)求參數(shù)的解析、將頁面表單參數(shù)賦給值棧中相應(yīng)屬性、執(zhí)行功能檢驗(yàn)、程序異常調(diào)試等工作。

    Spring MVC 中的攔截器就類似于 Servlet開發(fā)中的過濾器Filter,用于處理器進(jìn)行預(yù)處理和后處理。開發(fā)者可以自己定義攔截器來實(shí)現(xiàn)特定的功能。

    過濾器和攔截器的區(qū)別: 攔截器是 AOP 思想的具體應(yīng)用。

    • 攔截器是 SpringMVC 框架自己的,只有使用了 SpringMVC 框架的工程才能使用。
    • 攔截器只會(huì)攔截訪問的控制方法,如果訪問的是 jsp/html/css/js/image 是不進(jìn)行攔截的。

    自定義攔截器

    想要實(shí)現(xiàn)攔截器,必須實(shí)現(xiàn) HandlerInterceptor 接口.

    編寫攔截器類:

    public class MyInterceptor implements HandlerInterceptor {// 在請(qǐng)求處理的方法之前執(zhí)行// 如果返回 true 執(zhí)行下一個(gè)攔截器// 如果返回 false 就不執(zhí)行下一個(gè)攔截器public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("===================處理前======================");return true;}// 在請(qǐng)求處理方法執(zhí)行之后執(zhí)行 (日志)public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("===================處理后======================");}// 在 DispatcherServlet 處理后執(zhí)行, 做清理工作public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("===================清理======================");} }

    Spring 配置文件配置攔截器:

    <!-- 攔截器配置 --> <mvc:interceptors><mvc:interceptor><!-- /** -> 包括這個(gè)請(qǐng)求下面的所有請(qǐng)求 --><mvc:mapping path="/**"/><bean class="com.example.interceptor.MyInterceptor" /></mvc:interceptor> </mvc:interceptors>

    實(shí)現(xiàn)登錄攔截器…

    SpringMVC 文件上傳和下載

    SpringMVC 上下文中默認(rèn)沒有裝配 MultipartResolver, 因此默認(rèn)情況下不能處理文件上傳工作。
    如果需要使用 Spring 的文件上傳功能,則需要在上下文中配置 MultipartResolver。

    前端表單需求: 為了能夠上傳文件,必須將表單的 method 設(shè)置為 POST 方式,并將 enctype 設(shè)置為
    multipart/form-data。只有在這樣的情況下,瀏覽器才會(huì)將用戶選擇的文件以二進(jìn)制數(shù)據(jù)發(fā)送給服務(wù)器。

    <form action="" method="post" enctype="multipart/form-data"><input type="file" name="file"><input type="submit" value="上傳"> </form>

    一、導(dǎo)入.jar 包

    文件上傳的jar包:commons-fileupload.jar 和 commons-io.jar 包:

    <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope> </dependency>

    二、配置bean: MultipartResolver

    【!!!注意: 這個(gè) bean 的 id 必須為:multipartResolver, 否則上傳文件會(huì)報(bào) 400 錯(cuò)誤】

    <!-- 文件上傳的配置 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 請(qǐng)求的編碼格式,必須和 JSP 的 pageEncoding 屬性一致,以便正確讀取表單的內(nèi)容,默認(rèn)為 ISO-8859-1 --><property name="defaultEncoding" value="utf-8" /><!-- 文件上傳的大小限制,單位為字節(jié),(10485760=10M) --><property name="maxUploadSize" value="10485760" /><property name="maxInMemorySize" value="40960" /> </bean>

    CommonsMultipartResolver 常用方法:
    String getOriginalFilename() : 獲取上傳文件原名
    InputStream getInputStream() : 獲取文件流
    void transferTo(File dest) : 將上傳文件保存到一個(gè)目錄中

    文件上傳

    編寫前端頁面
    <form action="" method="post" enctype="multipart/form-data"><input type="file" name="file"><input type="submit" value="上傳"></form>
    編寫Controller
    • 方式一
    // @RequestParam("file") 將 name=file 控件得到的文件封裝成 CommonsMultipartFile 對(duì)象 // 批量上傳 CommonsMultipartFile 則為數(shù)組即可 @RequestMapping("/upload") public String fileUpload(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException {// 獲取文件名 : file.getOriginalFilename()String uploadFileName = file.getOriginalFilename();// 如果文件名為空,則返回首頁if ("".equals(uploadFileName)){return "redirect:index.jsp";}System.out.println("上傳文件名: " + uploadFileName);// 上傳路徑保存設(shè)置String path = request.getServletContext().getRealPath("/upload");// 如果不存這個(gè)路徑則創(chuàng)建愛File realPath = new File(path);if (!realPath.exists()){realPath.mkdir();}System.out.println("文件保存路徑為: " + realPath);// 獲取文件輸入流InputStream is = file.getInputStream();// 文件輸出流OutputStream os = new FileOutputStream(new File(realPath, uploadFileName));// 讀取寫出int len = 0;byte[] buffer = new byte[1024];while ((len=is.read(buffer)) != -1){os.write(buffer, 0, len);os.flush();}os.close();is.close();return "redirect:index.jsp"; }
    • 方式二
    /*采用 file.TransTo 來保存上傳的文件*/ @RequestMapping("/upload2") public String fileUpload2(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException {// 上傳路徑保存設(shè)置String path = request.getServletContext().getRealPath("/upload");// 如果不存這個(gè)路徑則創(chuàng)建愛File realPath = new File(path);if (!realPath.exists()){realPath.mkdir();}System.out.println("文件保存路徑為: " + realPath);// 通過 CommonsMultipartFile 的方法直接寫文件file.transferTo(new File(realPath + "/" + file.getOriginalFilename()));return "redirect:index.jsp"; }
    測試

    文件下載

  • 設(shè)置 response 響應(yīng)頭
  • 讀取文件 -> InputStream
  • 寫出文件 -> OutputStream
  • 執(zhí)行操作
  • 關(guān)閉流 (先開后關(guān))
  • 代碼實(shí)現(xiàn):

    @RequestMapping("/downloa")public String download(HttpServletRequest request, HttpServletResponse response) throws IOException {// 要下載的圖片地址String path = request.getServletContext().getRealPath("/upload");String fileName = "test.jpg";// 1. 設(shè)置 response 響應(yīng)頭response.reset(); // 設(shè)置頁面不緩存,清空 bufferresponse.setCharacterEncoding("UTF-8"); // 字符編碼response.setContentType("multipart/form-data"); // 以二進(jìn)制的方式傳輸數(shù)據(jù)// 設(shè)置響應(yīng)頭response.setHeader("content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));File file = new File(path, fileName);// 2. 讀取文件 -> InputStreamInputStream is = new FileInputStream(file);// 3. 寫出文件 -> OutputStreamOutputStream out = response.getOutputStream();int len = 0;byte[] buffer = new byte[1024];// 4. 執(zhí)行寫出操作while ((len = is.read(buffer)) != -1){out.write(buffer, 0, len);out.flush();}// 5. 關(guān)閉流out.close();is.close();return null;}

    總結(jié)

    以上是生活随笔為你收集整理的SpringMVC 刷课笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    在线观看国产成人av片 | 精品久久久久久综合 | 美女久久久久久久 | 欧美久久久久久久久中文字幕 | 欧美精品一区二区蜜臀亚洲 | 亚洲国产精选 | 国产黄色精品在线 | 国产一区二区三精品久久久无广告 | 成人在线观看资源 | 激情五月激情综合网 | 国模一区二区三区四区 | 在线观看视频中文字幕 | 天堂在线成人 | 久久久久久久99精品免费观看 | 麻豆视频在线免费观看 | 视频在线观看99 | 久久精品国产亚洲a | 亚洲成人av在线播放 | 成人av资源网 | 91九色视频在线播放 | 高清av网| 国产中文自拍 | 久久精品视频在线观看免费 | 国产美女精品视频 | 久久99偷拍视频 | 国产中文字幕久久 | 久久久久久高潮国产精品视 | 国产精品一区二区视频 | a久久久久 | 97久久久免费福利网址 | bbbbb女女女女女bbbbb国产 | 亚州精品天堂中文字幕 | 91中文在线视频 | 久久婷婷一区二区三区 | 久久国产免费视频 | 日本三级全黄少妇三2023 | 久久99久久99免费视频 | www.一区二区三区 | 国产美女视频 | 精品在线免费视频 | 亚洲欧美国产日韩在线观看 | 成人亚洲综合 | 婷婷在线免费观看 | 日本99干网 | 三级av在线| 色99视频 | 国产在线一区观看 | 久久av福利| 福利一区二区 | .国产精品成人自产拍在线观看6 | 久久久久亚洲精品成人网小说 | 久久久综合九色合综国产精品 | av网站大全免费 | 亚洲五月婷婷 | 中文字幕中文字幕在线中文字幕三区 | 久久亚洲婷婷 | 国产老熟| 免费高清av在线看 | 亚洲国产美女精品久久久久∴ | 久久久成人精品 | 在线观看免费高清视频大全追剧 | 精品国产乱码 | a黄色一级片| 精品国产视频一区 | 草久电影| 日韩精品一区二区三区三炮视频 | 国产a国产 | 亚洲国产精品成人综合 | 91超级碰 | 成人在线免费看 | 毛片一级免费一级 | 久久狠狠一本精品综合网 | 国产在线毛片 | 色吧av色av| 欧洲一区二区在线观看 | 亚洲国产精品久久久久婷婷884 | 西西人体www444 | 手机成人av在线 | 91在线视频观看免费 | 久久视频6 | 色偷偷网站视频 | 色婷婷激情 | 精品国产乱码久久久久久1区二区 | 91在线播放视频 | 婷婷去俺也去六月色 | 91av手机在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | 中国成人一区 | 亚洲涩涩涩 | 一级片观看 | 成人黄大片视频在线观看 | 国产成人高清在线 | 97精品国产一二三产区 | 又长又大又黑又粗欧美 | 亚洲另类xxxx | 亚洲aaa级 | 久久五月情影视 | 亚洲黄色一级电影 | 国产麻豆精品在线观看 | 最新精品视频在线 | 97超碰中文字幕 | 狠狠狠操| 丝袜美腿av| 99久久久久免费精品国产 | 中文字幕日韩国产 | 久久久www成人免费精品张筱雨 | 最近能播放的中文字幕 | 国产精品片 | 四虎国产精 | 丁香五婷| 日韩在线三级 | 一级做a爱片性色毛片www | 成年人在线免费看片 | 99久久精品免费一区 | 精品国产电影 | 国产剧情一区在线 | 天天操夜 | 国产精品手机在线观看 | 欧美一级欧美一级 | 久久不卡国产精品一区二区 | 欧美成人在线网站 | 亚洲伊人av | 国产精品美女久久久久久久 | 亚洲三级在线播放 | 日本三级在线观看中文字 | 91九色视频观看 | 久久成人国产精品免费软件 | 1000部国产精品成人观看 | 国产黄色网 | 色夜影院 | 国产精品美女www爽爽爽视频 | 黄色日批网站 | 亚洲成人av电影在线 | 日韩城人在线 | 日韩在线观看网址 | 97免费在线观看视频 | 久久av中文字幕片 | 中文字幕免费成人 | 日韩精品久久久 | 久久毛片网站 | 免费能看的黄色片 | 亚洲.www| 日韩免费久久 | 国产精品美女久久久久久久久久久 | 人操人 | 午夜精品一区二区三区在线视频 | 国产中文在线视频 | 久草免费在线观看 | 热99在线| 在线 高清 中文字幕 | 在线免费观看视频你懂的 | 国产手机在线 | 久草www | 日韩草比| 2022国产精品视频 | 国产成人精品三级 | 视频在线一区二区三区 | 国产精品麻豆免费版 | 国产精品麻豆91 | 日韩欧美不卡 | 视频在线一区二区三区 | 国产精品毛片完整版 | 精品在线你懂的 | 久久婷婷精品视频 | 中文一区二区三区在线观看 | 久久久受www免费人成 | 日韩欧美视频一区二区三区 | 久草视频在线免费 | 热久久国产精品 | 91精品黄色 | 欧美一级专区免费大片 | 黄网站污 | 日日爱999 | 国产精品一区二区久久精品爱涩 | 日韩中文字幕视频在线观看 | 最近中文字幕在线 | 国产精品久久久久aaaa九色 | 白丝av在线 | 日本性久久 | 国产黄色片久久久 | 久久精品女人毛片国产 | h文在线观看免费 | 91在线免费公开视频 | 在线免费黄色av | 国产福利一区二区三区视频 | 粉嫩av一区二区三区四区在线观看 | 欧美精品成人在线 | 欧美激情综合五月色丁香小说 | 中文网丁香综合网 | 国产精品白浆视频 | 久久毛片高清国产 | 激情av在线播放 | 午夜精品一区二区三区在线 | 久久久免费观看完整版 | 中文字幕日本在线 | 视频在线在亚洲 | 9在线观看免费高清完整版在线观看明 | 可以免费观看的av片 | 久久精品久久精品 | 亚洲一区网 | 色射爱 | 国产日韩在线播放 | 国产成人1区 | 日本不卡123 | 波多野结依在线观看 | 国产精品国产三级国产不产一地 | 黄色在线观看免费 | 欧美一区二区三区免费观看 | 亚洲国产精品成人精品 | 欧美美女一级片 | 超碰在线人 | 成人一级免费电影 | 瑞典xxxx性hd极品 | 国产一卡二卡在线 | 国产精品精品久久久久久 | 亚洲一级电影 | 国产成人免费在线 | 亚洲日本欧美在线 | 中文字幕影片免费在线观看 | 青草草在线视频 | 91久久精品一区二区三区 | 久在线观看 | 亚洲国产成人精品电影在线观看 | 啪啪免费视频网站 | 国产精品一区二区三区在线看 | 天天射天天干天天插 | 中文字幕亚洲在线观看 | 国产精品一区专区欧美日韩 | 永久中文字幕 | 国产精品久久久久久吹潮天美传媒 | 一级一级一片免费 | 日韩欧美一区二区三区视频 | 日韩成人精品在线观看 | 丁香六月在线观看 | 三级黄色欧美 | 国产精品美 | 香蕉视频网站在线观看 | 中文字幕a∨在线乱码免费看 | 中国成人一区 | 成人一区二区三区在线观看 | 成人97视频 | 欧美精品免费在线观看 | 久久亚洲综合色 | 欧美激情综合五月色丁香 | 日韩视频免费在线 | 国产精品久久久久久久久久久久午夜 | 欧美中文字幕第一页 | 少妇bbb好爽| 国产精品第十页 | 亚洲欧洲精品在线 | 黄色精品一区二区 | 日韩专区在线观看 | 爱干视频 | 中文字幕在线播放视频 | 在线免费看黄网站 | 久久国产精品一二三区 | 亚洲一区尤物 | av日韩精品 | 日批视频 | 免费一级特黄录像 | www操操操 | 99r精品视频在线观看 | 天天操天天操天天干 | 五月天六月丁香 | 一区二区三区电影 | 久久精品精品 | 超碰97中文| 白丝av在线 | 久久五月天综合 | 免费久久久久久 | 国产最新福利 | 人人插人人插 | 欧美另类xxxx | 日韩免费av在线 | 国产综合福利在线 | 婷婷在线看 | 超碰在线公开 | 国产色女人 | 五月婷在线观看 | 亚洲九九精品 | 免费看黄的 | 久久亚洲影院 | 成年人电影免费在线观看 | 色香蕉在线 | 久久精品波多野结衣 | 伊人开心激情 | 成人av中文字幕在线观看 | 色老板在线 | 日韩理论电影在线 | 99国产一区 | 国产午夜精品一区二区三区 | 在线日韩中文字幕 | 一级片免费在线 | 9999在线| 一区二区三区精品在线视频 | 特级aaa毛片| 亚欧日韩av | 在线影院 国内精品 | 国产视频一区在线 | 波多野结衣精品视频 | 亚洲最新在线 | 日韩av免费在线电影 | 黄色小网站在线观看 | 丁香六月婷| 色综合天天综合网国产成人网 | 色妞色视频一区二区三区四区 | 2018好看的中文在线观看 | 欧美日韩免费看 | 99久免费精品视频在线观看 | 美女在线观看网站 | 91视频在线播放视频 | 国产小视频你懂的在线 | 人人干在线 | 国产精品美乳一区二区免费 | 天天综合网 天天 | 欧美极度另类性三渗透 | 亚洲国产欧美在线看片xxoo | 亚洲一区日韩在线 | 一区 二区电影免费在线观看 | 亚洲日本黄色 | 99中文字幕视频 | 免费观看黄色av | 免费日韩电影 | 欧美日韩国产色综合一二三四 | 婷婷国产在线观看 | 国产 日韩 欧美 在线 | 中文字幕在线观看的网站 | 免费看一级特黄a大片 | 午夜影视剧场 | 丁香花在线视频观看免费 | 韩日色视频| 日本精a在线观看 | 日日爱av| 久久婷婷精品 | 国产综合精品一区二区三区 | 天天插综合网 | 国内精品久久久久久久97牛牛 | 在线黄色av | www视频在线观看 | 色婷婷狠狠 | 久久久久久久久久久久久9999 | 天天色天天操综合 | 亚洲免费公开视频 | 国产精品久久嫩一区二区免费 | aaa黄色毛片 | 人人视频网站 | 国产精品久久久久av | 99久久精品国产系列 | 久久1电影院 | 91麻豆精品国产91久久久久久 | 久久视频精品 | 日韩美在线观看 | 亚洲国产激情 | 国内一区二区视频 | 公与妇乱理三级xxx 在线观看视频在线观看 | 国产精品a成v人在线播放 | 国产手机在线观看视频 | 国产精品自在欧美一区 | 99久久日韩精品视频免费在线观看 | 久久久黄视频 | 五月天激情视频在线观看 | 欧洲成人免费 | 亚洲日本va在线观看 | 日韩肉感妇bbwbbwbbw | 亚洲精品影视 | 天天躁日日 | 国内视频一区二区 | 黄色三级av | 久草在线免费看视频 | 国产原创中文在线 | 国产综合视频在线观看 | 伊人干综合 | av免费网站 | 日本三级不卡视频 | 天天综合网~永久入口 | 久久超 | 久久精品a | 天堂av最新网址 | 精品国产精品久久 | 国产小视频免费观看 | 天天干夜夜擦 | 日韩精品高清不卡 | 日韩中文在线观看 | 青春草免费在线视频 | 丁香婷婷自拍 | 亚洲乱码精品久久久久 | 亚洲精品乱码久久久久久蜜桃不爽 | 亚洲成av人电影 | 日韩电影一区二区在线 | 婷婷九月激情 | 日日干日日 | 国产精品免费观看久久 | 色网站在线观看 | 色婷婷狠狠五月综合天色拍 | 不卡中文字幕在线 | 免费福利影院 | 97在线精品视频 | 久久伊人精品一区二区三区 | 99久久精品国产一区二区成人 | 98福利在线 | 欧美激情第一区 | 中国一区二区视频 | 在线观看国产一区二区 | 午夜电影一区 | 欧美专区日韩专区 | 国产一级黄色av | 久久夜色精品国产欧美乱极品 | 国产精品一区在线观看你懂的 | 天天狠狠 | 久草在线电影网 | 国内免费的中文字幕 | 五月婷婷在线观看视频 | 国产精品国产三级国产aⅴ无密码 | 国产精品福利一区 | 亚洲aⅴ乱码精品成人区 | 国产在线观看中文字幕 | 草久视频在线观看 | 视频在线日韩 | 黄色日视频 | 四虎国产免费 | 国产精品一区二区在线观看 | 欧美性网站| 欧美激情精品久久久久久变态 | 国产精品成人av在线 | 欧美精品久久久久久久久久久 | 91看片淫黄大片一级在线观看 | 亚洲激情六月 | 国产亚洲精品v | 亚洲一二三在线 | 亚洲自拍偷拍色图 | 欧美婷婷色 | a级一a一级在线观看 | 亚洲综合色视频 | 天天操网 | 天堂在线免费视频 | 精品二区久久 | 99久久激情视频 | 视频在线亚洲 | 中文字幕亚洲五码 | 国产黄在线| 日韩中文字幕视频在线 | 亚洲精品美女在线观看播放 | 国产五码一区 | 91大神一区二区三区 | 在线观看中文字幕网站 | 久久黄色片 | 丁香视频免费观看 | av高清一区二区三区 | 久久精品国产精品亚洲 | 久久艹精品| 黄色av成人在线观看 | 五月天丁香视频 | 亚洲天天看 | 精品久久视频 | 黄色福利视频网站 | 一级片免费在线 | 一区二区在线影院 | 99久久精 | 在线看国产一区 | 国产一区二区综合 | 亚洲综合黄色 | 中文字幕永久免费 | 高清av免费一区中文字幕 | 黄色av免费看 | 免费看片黄色 | 黄色国产大片 | 丁香五婷 | 在线不卡中文字幕播放 | 亚洲激情精品 | 中文字幕影片免费在线观看 | av福利超碰网站 | 热久久电影| 在线观看免费日韩 | 在线综合 亚洲 欧美在线视频 | 狠狠干狠狠色 | 免费在线中文字幕 | 人人爽人人爽人人片av | 成人黄色资源 | 久久人人做| 在线观看va | 国产福利91精品张津瑜 | av网站地址| a午夜电影 | 激情开心 | 日韩av不卡在线播放 | 日本公妇色中文字幕 | 亚洲国产午夜视频 | 国产999精品久久久久久绿帽 | 又爽又黄又无遮挡网站动态图 | 欧亚日韩精品一区二区在线 | 五月精品| 91亚洲精品久久久蜜桃借种 | 国产伦理一区二区三区 | 99视频久久 | 开心综合网 | 色诱亚洲精品久久久久久 | 黄色在线看网站 | 国内精品久久久久久久久久久久 | 在线观看黄色免费视频 | 99久久精品免费看国产免费软件 | 日韩精品一区不卡 | 欧美精品在线观看一区 | 久久这里只有精品久久 | 黄在线免费看 | 久久亚洲影视 | 91麻豆精品国产91久久久久 | 亚洲一二视频 | 99免费精品| 久久久精品视频成人 | 亚洲精品美女视频 | 99在线观看视频网站 | 91一区啪爱嗯打偷拍欧美 | 欧美小视频在线观看 | 国产91区| 国产精品一区二区久久精品爱微奶 | 国产黄色在线 | 91精品国产综合久久福利不卡 | 欧美国产日韩一区二区三区 | 精品一区二区在线免费观看 | 亚洲国产丝袜在线观看 | 国产日产欧美在线观看 | 91久久丝袜国产露脸动漫 | 国产少妇在线观看 | 天天操天天干天天爽 | 色噜噜色噜噜 | 亚洲伊人色 | 久久精品黄 | av丁香 | 免费日韩 精品中文字幕视频在线 | 激情欧美一区二区免费视频 | 中文一区在线观看 | 91九色视频在线 | 热久久免费视频 | 四虎在线观看网址 | 久久久九九 | 久久综合久久综合这里只有精品 | 在线视频日韩欧美 | 成年人三级网站 | 四虎国产精品永久在线国在线 | 五月天综合色激情 | 久久综合中文字幕 | 97超碰在线久草超碰在线观看 | 4hu视频 | 成人不用播放器 | 国产一级片网站 | 亚洲综合小说 | 国产精品va在线观看入 | 免费成人黄色av | 亚洲在线免费视频 | 黄色一级免费网站 | 亚洲精品白浆高清久久久久久 | 亚洲h色精品 | 色综合久久久久综合 | 欧美激情一区不卡 | 黄色视屏av | 久久婷婷久久 | 国产午夜在线观看视频 | 国产一区二区播放 | 日韩av一区二区三区四区 | 久久免费精彩视频 | 黄色成人av在线 | 91传媒在线看 | 激情欧美日韩一区二区 | 精品美女国产在线 | 黄色精品网站 | 日韩videos | 亚洲欧美日韩在线一区二区 | 国产精品免费视频观看 | 天天人人综合 | 视频精品一区二区三区 | 在线播放 日韩专区 | 日韩免费在线一区 | www夜夜操com| 日产av在线播放 | 国产aaa毛片 | 国产福利一区二区三区视频 | 国产做a爱一级久久 | 不卡av在线免费观看 | 久久婷综合 | 香蕉久久久久 | 久久久国产精品久久久 | 免费看一及片 | 天天干天天怕 | 欧美污污网站 | 欧美日韩有码 | 中文字幕日韩一区二区三区不卡 | 亚洲高清91 | 免费精品视频在线观看 | 国产精品第二页 | 国产精品亚洲片夜色在线 | 国产精品18久久久久久久 | 国产一区二区在线观看视频 | 又黄又爽又色无遮挡免费 | 干综合网 | 免费一级特黄录像 | 国产视频999| 亚洲国产一区av | 91大神精品视频在线观看 | 国产精品国产亚洲精品看不卡15 | 深爱五月激情网 | 欧美性极品xxxx做受 | 中文字幕免| 少妇av片| 有码中文在线 | 精品国产欧美一区二区三区不卡 | 久久久免费观看完整版 | 日韩高清在线观看 | 免费h精品视频在线播放 | 黄色大全免费观看 | 久久久久免费精品视频 | 美女网站色在线观看 | 91久久奴性调教 | 国产成人精品综合久久久 | 成人网在线免费视频 | 日本护士撒尿xxxx18 | 亚洲天堂精品视频 | 日韩成人在线免费观看 | 天天插综合网 | 久草综合在线观看 | 欧美韩国日本在线 | 亚洲一区二区高潮无套美女 | 人人看看人人 | 天天色天天爱天天射综合 | 日韩国产高清在线 | 久久综合给合久久狠狠色 | 日韩精品最新在线观看 | 久久久久成人精品 | 国色天香av | 国产高清av | 一区二区三区韩国免费中文网站 | av网站在线观看免费 | 国产精品一区二区三区在线播放 | 国产免费观看视频 | 国产精品3 | 色综合久久88色综合天天免费 | 亚洲欧美偷拍另类 | 久久丁香网 | 97天天综合网 | 欧美精彩视频在线观看 | 日韩资源在线 | 亚洲综合色激情五月 | 国产一区二区三区午夜 | 久久开心激情 | 99精品福利 | 欧美日韩视频在线播放 | 欧美日韩国产二区三区 | 91在线看黄 | 狠狠躁夜夜a产精品视频 | 久av在线 | 成人在线黄色电影 | 国产探花视频在线播放 | 992tv在线成人免费观看 | 在线视频亚洲 | 久久99久国产精品黄毛片入口 | 国产黑丝一区二区三区 | 久久久久在线视频 | 丁香 婷婷 激情 | 在线不卡视频 | 日韩久久一区二区 | 日韩理论在线播放 | 日本成人免费在线观看 | 久久免费看片 | 成人a视频在线观看 | 在线观看日韩 | 国产一级二级在线播放 | 日日爱网站 | 国产精品网红直播 | 久久久久女人精品毛片 | 国产精品xxxx18a99 | 五月天久久激情 | japanese黑人亚洲人4k | 亚洲砖区区免费 | 夜夜夜精品 | 久久久久久久久久久电影 | 中文字幕观看在线 | 玖玖在线免费视频 | 精品久久久久久久久久久院品网 | 五月天综合网站 | 激情久久久久久久久久久久久久久久 | 亚洲黄色免费观看 | 久色伊人| 色资源在线观看 | 久久久久人人 | 欧美日韩二区在线 | 一级成人免费视频 | 国产香蕉视频在线播放 | 国产欧美日韩一区 | 国产精品自产拍在线观看 | 成人在线免费小视频 | 久久国产精品一国产精品 | 四虎影视精品成人 | 久久久999| 国产一区二区视频在线播放 | 精品久久综合 | 综合天天 | 日韩簧片在线观看 | 偷拍精偷拍精品欧洲亚洲网站 | 在线精品在线 | 视频在线亚洲 | 黄色片免费在线 | 91最新中文字幕 | 久久99视频 | 色噜噜日韩精品一区二区三区视频 | 久久久受www免费人成 | 日韩免费一二三区 | 国产 色 | 青青河边草免费直播 | 久久九九视频 | 在线成人免费电影 | 91精品国自产在线观看欧美 | 中文字幕 国产视频 | 亚洲欧洲在线视频 | 国产精品一区二区在线观看 | 婷婷开心久久网 | 91免费观看国产 | 99精品一级欧美片免费播放 | 丰满少妇麻豆av | 久久久综合精品 | 色婷婷免费 | 久久99九九99精品 | 亚洲精品乱码久久久久久蜜桃91 | 00av视频 | 超碰97久久 | 成人免费精品 | 有码视频在线观看 | 天天爱天天草 | 五月婷婷在线视频 | 亚洲国产中文字幕在线视频综合 | 天天综合色网 | 国产91精品一区二区麻豆网站 | 主播av在线| 天天干.com| 欧洲精品视频一区二区 | 亚洲精品在线资源 | 日女人电影 | 成人三级视频 | 亚洲精品在线视频网站 | 日韩区在线观看 | 亚洲国内精品视频 | 日韩动态视频 | 国产精品黄色 | 黄色高清视频在线观看 | 成人av免费在线观看 | 最新色站 | 日韩最新在线 | 欧美电影黄色 | 久久一精品| 国产午夜精品久久久久久久久久 | 中文字幕在线免费 | 国产精品久久一卡二卡 | 日本久久综合网 | 久久国产亚洲 | 色噜噜日韩精品一区二区三区视频 | 色99中文字幕 | 中文字幕在线观看你懂的 | 在线观看国产 | 久久精品国产一区二区三区 | 国产视频欧美视频 | 91激情视频在线 | 日日操狠狠干 | 久久久久激情视频 | 欧美午夜a | 精品久久一区二区三区 | 伊人小视频 | 中文国产在线观看 | 国产中文字幕三区 | 在线播放精品一区二区三区 | 欧美一区二区在线免费看 | 国际精品网 | 最新日韩视频在线观看 | 五月婷婷,六月丁香 | 国产尤物一区二区三区 | 国产成人一区二区精品非洲 | 2021av在线 | 久久99国产精品久久99 | 免费看久久 | 亚洲在线免费视频 | 婷婷视频导航 | 精品国偷自产国产一区 | 国内丰满少妇猛烈精品播放 | 久久成人麻豆午夜电影 | 天天爽天天摸 | 国产韩国精品一区二区三区 | 精品一区二区影视 | 色视频成人在线观看免 | 最近中文字幕免费av | 91视频在线观看免费 | 久草在线视频精品 | 中文字幕字幕中文 | 成人免费大片黄在线播放 | 97免费视频在线播放 | 亚洲精品动漫久久久久 | wwwwww黄| www操操操 | 99精品国产福利在线观看免费 | 超碰97人人爱| 又污又黄的网站 | 色婷婷激情综合 | 精品国产黄色片 | 在线黄色av电影 | 97超碰免费在线 | 91看片在线免费观看 | 久久久久久久久久久国产精品 | 97视频在线观看视频免费视频 | 国产人成在线观看 | 一区二区视频在线播放 | 色婷婷电影网 | av看片网 | 欧美综合在线视频 | 伊人久久五月天 | 黄色片视频在线观看 | 国产成人精品久久二区二区 | 国产精品美乳一区二区免费 | 三级大片网站 | 婷婷免费在线视频 | 91超在线 | 国产亚洲精品久久久久久 | 久久免费99精品久久久久久 | a黄色大片 | 深爱激情av| 黄色av免费看 | 在线亚洲高清视频 | 国产精品一区二区三区观看 | 特级毛片在线免费观看 | 激情欧美一区二区三区 | 日韩av一卡二卡三卡 | 久久曰视频 | 美女黄网站视频免费 | 日韩av在线免费播放 | 久久婷婷色综合 | 人人爽久久久噜噜噜电影 | 成人av免费在线观看 | 国产成人一级电影 | 国产精品久久久久免费 | 亚洲精品裸体 | 国产黄免费看 | 国产精品麻豆视频 | 国产理论片在线观看 | 色婷婷97 | 欧美精品第一 | 成人影音av | 91福利视频免费 | 日韩一区二区免费在线观看 | 91精品黄色| 久久激情久久 | 中文字幕av全部资源www中文字幕在线观看 | 国产不卡精品 | 天天操天天射天天插 | 亚洲精品国偷拍自产在线观看 | 91在线区| 久久不卡国产精品一区二区 | 一区中文字幕在线观看 | 久久精品国产免费看久久精品 | 午夜 免费| 免费视频一区 | 在线观看中文字幕一区二区 | 国产精品欧美 | 激情视频久久 | 免费久久久久久久 | 久热这里有精品 | 久久爱导航 | 欧美日韩视频一区二区 | 九九综合九九 | 波多野结衣电影一区二区三区 | 青青河边草手机免费 | 亚洲久草在线 | 91精品久久久久久综合乱菊 | 好看的国产精品视频 | 美女网站在线看 | av电影在线免费观看 | 久久99久久99久久 | 欧美国产高清 | 九九导航 | 特级xxxxx欧美 | 丁香婷婷激情国产高清秒播 | 国产精品一区二区果冻传媒 | 探花国产在线 | 亚洲三级av | 免费亚洲电影 | 久久99精品国产麻豆婷婷 | 在线免费性生活片 | 91色吧| 精品久久久久国产 | 香蕉在线影院 | 午夜精品久久久久久久久久久久久久 | 日韩久久午夜一级啪啪 | 欧美另类性 | 色综合久久中文综合久久牛 | 91资源在线视频 | 四虎www | 国产原创在线 | 91精品视频一区 | 精品视频免费久久久看 | 精品亚洲欧美无人区乱码 | 亚洲免费av一区二区 | 99久久精品无码一区二区毛片 | 蜜臀aⅴ国产精品久久久国产 | 精品99久久 | 久久久久久久网 | 精品伊人久久久 | 国产成人精品一区二区三区在线 | 成年人免费在线观看网站 | 四虎成人精品永久免费av | av天天草| 久久国产精品小视频 | 色国产视频 | 色偷偷88888欧美精品久久 | 久草在线在线视频 | 午夜视频在线观看一区二区三区 | 国产亚洲精品久久久久久无几年桃 | 69欧美视频 | 六月婷色| 久久激情视频 久久 | 伊人伊成久久人综合网小说 | 五月婷婷天堂 | 黄色91在线观看 | 亚洲精品在线视频网站 | 国产成人久久77777精品 | 国产国产人免费人成免费视频 | 久草干| 天天鲁天天干天天射 | 国产美女视频网站 | 日韩色区| 色综合a | 免费看色视频 | 国产精品一区在线播放 | 激情狠狠干 | 亚洲国产黄色片 | 亚洲专区欧美 | 亚洲日本中文字幕在线观看 | 综合网欧美 | 国产一二三区av | 欧美亚洲久久 | 欧美黄污视频 | 欧美日韩久久不卡 | 欧美成人免费在线 | 日韩av不卡在线观看 | 98福利在线 | 久久久久久久99精品免费观看 | 日本视频精品 | 五月婷婷色 | 国产日韩精品一区二区三区 | 91桃色视频| 91九色pron| 国模一区二区三区四区 | 日韩精品一区二区三区高清免费 | 国产精品wwwwww | 久久精品视频网 | 色综合久久五月 | 久草在线综合网 | 久久女同性恋中文字幕 | 日韩v在线| 成人a在线观看高清电影 | 在线韩国电影免费观影完整版 | 91精品久| 欧美国产精品久久久久久免费 | 97电影网站| 中文字幕在线视频一区二区三区 | 99视频精品免费观看, | 国产一级在线免费观看 | 青春草免费视频 | 精品国产自在精品国产精野外直播 | 国产成人久久久久 | 中文字幕视频 | 国产高清视频免费在线观看 | 岛国一区在线 | 成在线播放 | 在线观看麻豆av | 欧美老女人xx | 成人app在线播放 | 亚洲精品456在线播放乱码 | 欧美日韩69 | 国产精品福利在线播放 | 免费看一级特黄a大片 | 91在线产啪 | 草久热 | 久久黄色成人 | 国产一二区视频 | 激情久久伊人 | 久久久精品午夜 | 欧日韩在线 | 亚洲欧洲精品一区二区精品久久久 | 久久天堂影院 | 粉嫩av一区二区三区免费 | 午夜精品久久久久久久99水蜜桃 | 久久免费毛片 | 亚洲激情影院 | 91高清视频 | 国产精品国产三级在线专区 | 中文字幕在线观看视频网站 | 国产精品一区二区av日韩在线 | 69国产精品视频 | 五月激情丁香婷婷 | a级一a一级在线观看 | 国产精品资源在线观看 | 在线激情av电影 | 国产a国产 | 久草视频中文在线 |