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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

那些年关于JavaWeb的点点滴滴,你想看的这里全都有噢~

發(fā)布時(shí)間:2023/12/14 java 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 那些年关于JavaWeb的点点滴滴,你想看的这里全都有噢~ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JavaWeb知識(shí)匯總

  • 一、Servlet
  • 二、HTTP
    • 1. HTTP協(xié)議簡(jiǎn)介
    • 2.HTTPS
  • 三、Request
  • 四、Response
  • 五、ServletContext
  • 六、ServletConfig(了解)
  • 七、Cookie和Session
    • 1.會(huì)話技術(shù)
    • 2.Cookie
    • 3.Session
  • 八、JSP
  • 九、 EL &JSTL
    • 1. EL表達(dá)式
    • 2. JSTL
  • 十、Filter
  • 十一、Listener
  • 十二、 MVC和三層架構(gòu)
  • 十三、Ajax
  • 十四、JSON
    • 1.jackson
    • 2.Jsonlib

使用PC瀏覽,體驗(yàn)更加!!!!

一、Servlet

  • 概念:servlet是一個(gè)在Web服務(wù)器中運(yùn)行的小型Java程序。主要功能在于交互
    式地瀏覽和修改數(shù)據(jù),?成動(dòng)態(tài)Web內(nèi)容。

    A servlet is a small Java program that runs within a Web server

    • Servlet就是一個(gè)接口,定義了Java類(lèi)被瀏覽器訪問(wèn)到(tomcat識(shí)別)的規(guī)則。
    • 未來(lái)我們可以自定義一個(gè)類(lèi),實(shí)現(xiàn)Servlet接口,復(fù)寫(xiě)方法。
  • 快速入門(mén)

  • 創(chuàng)建JavaEE項(xiàng)目

  • 定義一個(gè)類(lèi),實(shí)現(xiàn)Servlet接口
    public class ServletDemo1 implements Servlet

  • 實(shí)現(xiàn)接口中的抽象方法

  • 配置Servlet
    在web.xml中配置:

    <!--配置Servlet --><servlet><servlet-name>demo1</servlet-name><!--全類(lèi)名--><servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class></servlet><servlet-mapping><servlet-name>demo1</servlet-name><!--資源路徑--><url-pattern>/demo1</url-pattern></servlet-mapping>
  • 執(zhí)行原理:

    1. 當(dāng)服務(wù)器接受到客戶端瀏覽器的請(qǐng)求后,會(huì)解析請(qǐng)求URL路徑,獲取訪問(wèn)的Servlet的資源路徑。 2. 查找web.xml文件,是否有對(duì)應(yīng)的<url-pattern>標(biāo)簽體內(nèi)容。 3. 如果有,則在找到對(duì)應(yīng)的<servlet-class>全類(lèi)名。 4. tomcat會(huì)將對(duì)應(yīng)的Servlet字節(jié)碼文件加載進(jìn)內(nèi)存,并且創(chuàng)建其對(duì)象。 5. 調(diào)用其方法。
  • Servlet生命周期

    1. 當(dāng)客戶端?次發(fā)送第?次請(qǐng)求后,由容器(web服務(wù)器(tomcat))去解析請(qǐng)求。 2. 根據(jù)請(qǐng)求找到對(duì)應(yīng)的servlet,判斷該類(lèi)的對(duì)象是否存在。 3. 不存在則創(chuàng)建servlet實(shí)例,調(diào)取init()?法 進(jìn)?初始化操作。 4. 初始化完成后調(diào)取service()?法,由service()判斷客戶端的請(qǐng)求?式。 5. 如果是get,則執(zhí)?doGet()。 6. 如果是post則執(zhí)?doPost()。 7. 處理?法完成后,作出相應(yīng)結(jié)果給客戶端.單次請(qǐng)求處理完畢。 8. 當(dāng)服務(wù)器關(guān)閉時(shí)調(diào)取destroy()?法進(jìn)?銷(xiāo)毀

    對(duì)于同一個(gè)Servlet,當(dāng)?戶發(fā)送第2~n次請(qǐng)求時(shí),不再執(zhí)?init(),?直接執(zhí)?service()?法,調(diào)取doGet()/doPost()?法。

  • Servlet中的生命周期方法1. 被創(chuàng)建:執(zhí)行init()方法,只執(zhí)行一次Servlet什么時(shí)候被創(chuàng)建?默認(rèn)情況下,第一次被訪問(wèn)時(shí),Servlet被創(chuàng)建。通過(guò)web.xml文件,可以配置Servlet的創(chuàng)建時(shí)機(jī)。在<servlet>標(biāo)簽下配置1. 第一次被訪問(wèn)時(shí),創(chuàng)建<load-on-startup>的值為負(fù)數(shù)。2. 在服務(wù)器啟動(dòng)時(shí),創(chuàng)建<load-on-startup>的值為0或正整數(shù),正數(shù)情況下,數(shù)值越?,加載該Servlet的優(yōu)先級(jí)越?。Servlet的init()方法,只執(zhí)行一次,說(shuō)明一個(gè)Servlet在內(nèi)存中只存在一個(gè)對(duì)象,Servlet是單例的多個(gè)用戶同時(shí)訪問(wèn)時(shí),可能存在線程安全問(wèn)題。解決:盡量不要在Servlet中定義成員變量。即使定義了成員變量,也不要對(duì)修改值2. 提供服務(wù):執(zhí)行service()方法,執(zhí)行多次每次訪問(wèn)Servlet時(shí),service()方法都會(huì)被調(diào)用一次。3. 被銷(xiāo)毀:執(zhí)行destroy()方法,只執(zhí)行一次Servlet被銷(xiāo)毀時(shí)執(zhí)行。服務(wù)器關(guān)閉時(shí),Servlet被銷(xiāo)毀只有服務(wù)器正常關(guān)閉時(shí),才會(huì)執(zhí)行destroy()方法。destroy()方法在Servlet被銷(xiāo)毀之前執(zhí)行,一般用于釋放資源* Servlet3.0:好處:支持注解配置。可以不需要web.xml了。步驟:1. 創(chuàng)建JavaEE項(xiàng)目,選擇Servlet的版本3.0以上,可以不創(chuàng)建web.xml2. 定義一個(gè)類(lèi),實(shí)現(xiàn)Servlet接口3. 復(fù)寫(xiě)方法4. 在類(lèi)上使用@WebServlet注解,進(jìn)行配置* @WebServlet("資源路徑")示例:@WebServlet(urlPatterns = {"/test"},initParams ={@WebInitParam(name = "code",value = "utf-8") },loadOnStartup = 1)public class TestServlet extends HttpServlet {}

關(guān)于@WebServlet的注解類(lèi)如下:

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface WebServlet {String name() default "";//相當(dāng)于<Servlet-name>String[] value() default {};//代表urlPatterns()屬性配置String[] urlPatterns() default {};//相當(dāng)于<url-pattern>int loadOnStartup() default -1;//相當(dāng)于<load-on-startup>WebInitParam[] initParams() default {};boolean asyncSupported() default false;String smallIcon() default "";String largeIcon() default "";String description() default "";String displayName() default "";}
  • Servlet體系結(jié)構(gòu) Servlet -- 接口|GenericServlet -- 抽象類(lèi)|HttpServlet -- 抽象類(lèi)* GenericServlet:將Servlet接口中其他的方法做了默認(rèn)空實(shí)現(xiàn),只將service()方法作為抽象* 將來(lái)定義Servlet類(lèi)時(shí),可以繼承GenericServlet,實(shí)現(xiàn)service()方法即可* HttpServlet:對(duì)service()方法做了詳細(xì)的實(shí)現(xiàn),不再需要我們寫(xiě)代碼判斷用戶的請(qǐng)求方式,對(duì)http協(xié)議的一種封裝,簡(jiǎn)化操作1. 定義類(lèi)繼承HttpServlet2. 復(fù)寫(xiě)doGet/doPost方法
  • Servlet相關(guān)配置1. urlpartten:Servlet訪問(wèn)路徑(資源路徑)1. 一個(gè)Servlet可以定義多個(gè)訪問(wèn)路徑 : @WebServlet({"/d4","/dd4","/ddd4"})2. 路徑定義規(guī)則:1. /xxx:路徑匹配2. /xxx/xxx:多層路徑,目錄結(jié)構(gòu)3. *.do:擴(kuò)展名匹配ps: /user/.do、/.do、test*.do都是非法的,啟動(dòng)時(shí)候會(huì)報(bào)錯(cuò)

二、HTTP

1. HTTP協(xié)議簡(jiǎn)介

  • 概念:超?本傳輸協(xié)議(英?:HyperText Transfer Protocol,縮寫(xiě):HTTP)是?種?于分布式、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)?層協(xié)議。HTTP是萬(wàn)維?的數(shù)據(jù)通信的基礎(chǔ)。定義了客戶端和服務(wù)器端通信時(shí),交互報(bào)文的格式

  • 特點(diǎn):
    1. 基于TCP/IP的高級(jí)協(xié)議
    2. 默認(rèn)端口號(hào):80
    3. 基于請(qǐng)求/響應(yīng)模型的:一次請(qǐng)求對(duì)應(yīng)一次響應(yīng)
    4. 在HTTP/1.0中默認(rèn)使?短連接。也就是說(shuō),客戶端和服務(wù)器每進(jìn)??次HTTP操作,就建??次連接,任務(wù)結(jié)束就中斷連接。
    5. 無(wú)狀態(tài)協(xié)議:HTTP協(xié)議自身不對(duì)請(qǐng)求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存。每次請(qǐng)求之間相互獨(dú)立,不能交互數(shù)據(jù)。
    6. HTTP/1.1起,默認(rèn)使??連接,?以保持連接特性。使??連接的HTTP協(xié)議,會(huì)在響應(yīng)頭加?這?
    代碼:

    Connection:keep-alive

    在使??連接的情況下,當(dāng)?個(gè)??打開(kāi)完成后,客戶端和服務(wù)器之間?于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,客戶端再次訪問(wèn)這個(gè)服務(wù)器時(shí),會(huì)繼續(xù)使?這?條已經(jīng)建?的連接。Keep-Alive不會(huì)永久保持連接,它有?個(gè)保持時(shí)間,可以在不同的服務(wù)器軟件(如Apache)中設(shè)定這個(gè)時(shí)間。實(shí)現(xiàn)?連接需要客戶端和服務(wù)端都?持?連接。

  • 請(qǐng)求消息(報(bào)文)格式: 客戶端發(fā)送給服務(wù)器端的數(shù)據(jù)

    1. 請(qǐng)求行請(qǐng)求方式 請(qǐng)求url 請(qǐng)求協(xié)議/版本GET http://localhost:8080/thumbupTest/index.jsp HTTP/1.1請(qǐng)求方式:HTTP協(xié)議有7中請(qǐng)求方式,常用的有2種GET:1. 請(qǐng)求參數(shù)在請(qǐng)求行中,在url后。2. 請(qǐng)求的url長(zhǎng)度有限制的3. 不太安全POST:1. 請(qǐng)求參數(shù)在請(qǐng)求體中2. 請(qǐng)求的url長(zhǎng)度沒(méi)有限制的3. 相對(duì)安全 2. 請(qǐng)求頭:客戶端瀏覽器告訴服務(wù)器一些信息請(qǐng)求頭名稱(chēng): 請(qǐng)求頭值常見(jiàn)的請(qǐng)求頭:1. User-Agent:瀏覽器告訴服務(wù)器,我訪問(wèn)你使用的瀏覽器版本信息* 可以在服務(wù)器端獲取該頭的信息,解決瀏覽器的兼容性問(wèn)題2. Referer:http://localhost/login.html告訴服務(wù)器,我(當(dāng)前請(qǐng)求)從哪里來(lái)?作用:1. 防盜鏈:通過(guò)條件判斷指定從某條URL跳轉(zhuǎn)過(guò)來(lái)到當(dāng)前頁(yè)面才正常顯示2. 統(tǒng)計(jì)工作:可以統(tǒng)計(jì)從某個(gè)URL跳轉(zhuǎn)到當(dāng)前頁(yè)面的用戶數(shù) 3. 請(qǐng)求空行空行,就是用于分割POST請(qǐng)求的請(qǐng)求頭,和請(qǐng)求體的。 4. 請(qǐng)求體(正文):封裝POST請(qǐng)求消息的請(qǐng)求參數(shù)的格式: username=zhangsan * 字符串格式(請(qǐng)求頭):POST /login.html HTTP/1.1Host: localhostUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateReferer: http://localhost/login.htmlConnection: keep-aliveUpgrade-Insecure-Requests: 1
  • 響應(yīng)消息(報(bào)文)格式: 服務(wù)器端發(fā)送給客戶端的數(shù)據(jù)

    數(shù)據(jù)格式: 1. 響應(yīng)行1. 組成:協(xié)議/版本 響應(yīng)狀態(tài)碼 狀態(tài)碼描述示例: HTTP/1.1 200 OK2. 響應(yīng)狀態(tài)碼:服務(wù)器告訴客戶端瀏覽器本次請(qǐng)求和響應(yīng)的一個(gè)狀態(tài)。1. 狀態(tài)碼都是3位數(shù)字 2. 分類(lèi):1. 1xx:服務(wù)器接收客戶端消息,但沒(méi)有接受完成,等待一段時(shí)間后,發(fā)送1xx多狀態(tài)碼2. 2xx:成功。代表:2003. 3xx:重定向。代表:302(重定向),304(訪問(wèn)緩存)4. 4xx:客戶端錯(cuò)誤。* 代表:* 404(請(qǐng)求路徑?jīng)]有對(duì)應(yīng)的資源) * 405:請(qǐng)求方式?jīng)]有對(duì)應(yīng)的doXxx方法5. 5xx:服務(wù)器端錯(cuò)誤。代表:500(服務(wù)器內(nèi)部出現(xiàn)異常) 2. 響應(yīng)頭:1. 格式:頭名稱(chēng): 值2. 常見(jiàn)的響應(yīng)頭:1. Content-Type:服務(wù)器告訴客戶端本次響應(yīng)體數(shù)據(jù)格式以及編碼格式2. Content-disposition:服務(wù)器告訴客戶端以什么格式打開(kāi)響應(yīng)體數(shù)據(jù)* 值:* in-line:默認(rèn)值,在當(dāng)前頁(yè)面內(nèi)打開(kāi)* attachment;filename=xxx:以附件形式打開(kāi)響應(yīng)體。文件下載需設(shè)置此響應(yīng)頭 3. 響應(yīng)空行 4. 響應(yīng)體:傳輸?shù)臄?shù)據(jù) 5. * 響應(yīng)字符串格式HTTP/1.1 200 OKContent-Type: text/html;charset=UTF-8Content-Length: 101Date: Wed, 06 Jun 2018 07:08:42 GMT<html><head><title>$Title$</title></head><body>hello , response</body></html>
  • 常見(jiàn)狀態(tài)碼

    狀態(tài)碼狀態(tài)碼描述含義
    100Continue只有?部分請(qǐng)求被服務(wù)器接收,但只要沒(méi)被服務(wù)器拒絕,客戶端就會(huì)延續(xù)這個(gè)請(qǐng)求
    101Switching Protocols服務(wù)器交換機(jī)協(xié)議
    200OK請(qǐng)求被確認(rèn)
    201Created請(qǐng)求時(shí)完整的,新的資源被創(chuàng)建
    202Accepted請(qǐng)求被接受,但未處理完
    300Multiple Choices?個(gè)超鏈接表,?戶可以選擇?個(gè)超鏈接并訪問(wèn),最??持5個(gè)超鏈接
    301Moved Permanently被請(qǐng)求的??已經(jīng)移動(dòng)到了新的URL下
    302Found被請(qǐng)求的??暫時(shí)性地移動(dòng)到了新的URL下
    303See Other被請(qǐng)求的??可以在?個(gè)不同的URL下找到
    400Bad Request服務(wù)器?法識(shí)別請(qǐng)求
    403Forbidden禁?訪問(wèn)所請(qǐng)求的??
    404Not Found服務(wù)器?法找到所請(qǐng)求的??
    405Method Not Allowed請(qǐng)求中所指定的?法不被允許
    500Internal Server Error請(qǐng)求不完整,服務(wù)器遇?了出乎意料的狀況
    501Not Implemented請(qǐng)求不完整,服務(wù)器不提供所需要的功能
    502Bad Gateway請(qǐng)求不完整,服務(wù)器從上游服務(wù)器接受了?個(gè)?效的響應(yīng)
    503Service Unavailable請(qǐng)求不完整,服務(wù)器暫時(shí)重啟或關(guān)閉
    504Gateway Timeout?關(guān)超時(shí)
    505HTTP Version Not Supported服務(wù)器不?持所指定的HTTP版本

2.HTTPS

HTTPS (全稱(chēng):Hyper Text Transfer Protocol over SecureSocket Layer), 是以安全為目標(biāo)的 HTTP 通道,在HTTP的基礎(chǔ)上通過(guò)傳輸加密和身份認(rèn)證保證了傳輸過(guò)程的安全性 。 HTTPS 在HTTP 的基礎(chǔ)下加入SSL,HTTPS 的安全基礎(chǔ)是SSL,因此加密的詳細(xì)內(nèi)容就需要SSL。 HTTPS 存在不同于 HTTP 的默認(rèn)端口及一個(gè)加密/身份驗(yàn)證層(在 HTTP與 TCP 之間)。 這個(gè)系統(tǒng)提供了身份驗(yàn)證與加密通訊方法。 它被廣泛用于萬(wàn)維網(wǎng)上安全敏感的通訊,例如交易支付等方面。
  • 詳情請(qǐng)看 HTTPS

三、Request

  • Request對(duì)象和Response對(duì)象的原理

    1.客戶端發(fā)送請(qǐng)求后,Tomcat服務(wù)器會(huì)根據(jù)請(qǐng)求URL中的資源路徑(Servlet訪問(wèn)路徑),創(chuàng)建對(duì)應(yīng)的Servlet對(duì)象。
    2. Tomcat服務(wù)器,會(huì)創(chuàng)建request和response對(duì)象,并將請(qǐng)求消息(請(qǐng)求報(bào)文)數(shù)據(jù)封裝到request對(duì)象中。
    3. Tomcat將request和response兩個(gè)對(duì)象傳遞給service()方法,并且調(diào)用service()方法。
    4. 后續(xù),程序員可以通過(guò)request對(duì)象獲取請(qǐng)求消息數(shù)據(jù),通過(guò)response對(duì)象設(shè)置響應(yīng)消息(響應(yīng)報(bào)文)數(shù)據(jù)。
    5. 服務(wù)器給瀏覽器作出響應(yīng)之前會(huì)從response對(duì)象中獲取程序員設(shè)置的響應(yīng)消息數(shù)據(jù)。

  • Request對(duì)象繼承體系結(jié)構(gòu)

    ServletRequest -- 接口| 繼承 HttpServletRequest -- 接口| 實(shí)現(xiàn) org.apache.catalina.connector.RequestFacade 類(lèi)(tomcat)public class RequestFacade implements HttpServletRequest
  • Request功能

    1. 獲取請(qǐng)求消息(報(bào)文)數(shù)據(jù)1. 獲取請(qǐng)求行數(shù)據(jù)* GET http://localhost:8080/day14/demo1?name=zhangsan HTTP/1.1* 方法:1. 獲取請(qǐng)求方式 :GET* String getMethod() 2. (*)獲取虛擬目錄:/day14* String getContextPath()3. 獲取Servlet路徑: /demo1* String getServletPath()4. 獲取get方式請(qǐng)求參數(shù):name=zhangsan* String getQueryString()5. (*)獲取請(qǐng)求URI:/day14/demo1* String getRequestURI(): /day14/demo1* StringBuffer getRequestURL() :http://localhost/day14/demo1* URL:統(tǒng)一資源定位符 : http://localhost/day14/demo1 例如:中華人民共和國(guó)* URI:統(tǒng)一資源標(biāo)識(shí)符 : /day14/demo1 例如:共和國(guó)6. 獲取協(xié)議及版本:HTTP/1.1* String getProtocol()7. 獲取客戶機(jī)的IP地址:* String getRemoteAddr() // 0:0:0:0:0:0:0:12. 獲取請(qǐng)求頭數(shù)據(jù)* 方法:* (*)String getHeader(String name):通過(guò)請(qǐng)求頭的名稱(chēng)獲取請(qǐng)求頭的值* Enumeration<String> getHeaderNames():獲取所有的請(qǐng)求頭名稱(chēng)3. 獲取請(qǐng)求體(正文)數(shù)據(jù):* 請(qǐng)求體:只有POST請(qǐng)求方式,才有請(qǐng)求體,在請(qǐng)求體(正文)中封裝了POST請(qǐng)求的請(qǐng)求參數(shù)* 步驟:1. 獲取流對(duì)象* BufferedReader getReader():獲取字符輸入流,只能操作字符數(shù)據(jù)* ServletInputStream getInputStream():獲取字節(jié)輸入流,可以操作所有類(lèi)型數(shù)據(jù)2. 再?gòu)牧鲗?duì)象中拿數(shù)據(jù) 2. 其他功能:1. 獲取請(qǐng)求參數(shù)通用方式:不論get還是post請(qǐng)求方式都可以使用下列方法來(lái)獲取請(qǐng)求參數(shù)1. String getParameter(String name):根據(jù)參數(shù)名稱(chēng)獲取參數(shù)值 username=zs&password=1232. String[] getParameterValues(String name):根據(jù)參數(shù)名稱(chēng)獲取參數(shù)值的數(shù)組 hobby=xx&hobby=game3. Enumeration<String> getParameterNames():獲取所有請(qǐng)求的參數(shù)名稱(chēng)4. Map<String,String[]> getParameterMap():獲取所有參數(shù)的map集合* 中文亂碼問(wèn)題:* get方式:tomcat 8 已經(jīng)將get方式亂碼問(wèn)題解決了* Tomcat 8以前:?式1: //針對(duì)于get提交時(shí)中?亂碼String s=new String(請(qǐng)求參數(shù).getBytes("ISO-8859-1"),"UTF-8");示例: String s=new String(request.getParameter("key").getBytes("ISO-8859-1"),"GBK");?式2:修改tomcat中配置?件://使?于get提交在Tomcat?錄結(jié)構(gòu)\conf\server.xml中設(shè)置字符集 URLEncoding<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />* post方式:會(huì)亂碼* 解決:在獲取參數(shù)前,設(shè)置request的編碼request.setCharacterEncoding("utf-8");2. 請(qǐng)求轉(zhuǎn)發(fā):一種在服務(wù)器內(nèi)部的資源跳轉(zhuǎn)方式1. 步驟:1. 通過(guò)request對(duì)象獲取請(qǐng)求轉(zhuǎn)發(fā)器對(duì)象:RequestDispatcher getRequestDispatcher(String path)2. 使用RequestDispatcher對(duì)象來(lái)進(jìn)行轉(zhuǎn)發(fā):forward(ServletRequest request, ServletResponse response) 2. 特點(diǎn):1. 瀏覽器地址欄路徑不發(fā)生變化2. 只能轉(zhuǎn)發(fā)到當(dāng)前服務(wù)器內(nèi)部資源中。3. 轉(zhuǎn)發(fā)是一次請(qǐng)求,可以使用request對(duì)象來(lái)共享數(shù)據(jù)3. 共享數(shù)據(jù):* 域?qū)ο?#xff1a;一個(gè)有作用范圍的對(duì)象,可以在范圍內(nèi)共享數(shù)據(jù)* request域:代表一次請(qǐng)求的范圍,一般用于請(qǐng)求轉(zhuǎn)發(fā)的多個(gè)資源中共享數(shù)據(jù)* 方法:1. void setAttribute(String name,Object obj):存儲(chǔ)數(shù)據(jù)2. Object getAttitude(String name):通過(guò)鍵獲取值3. void removeAttribute(String name):通過(guò)鍵移除鍵值對(duì)4. 獲取ServletContext:* ServletContext getServletContext()
  • GET和POST的區(qū)別

    1、GET請(qǐng)求:請(qǐng)求的數(shù)據(jù)會(huì)附加在URL之后,以?分割URL和傳輸數(shù)據(jù),多個(gè)參數(shù)?&連接。URL的編碼格式采?的是ASCII編碼,而不是uniclde,即是說(shuō)所有的非ASCII字符都要編碼之后再傳輸。POST請(qǐng)求:請(qǐng)求的數(shù)據(jù)放在請(qǐng)求消息(報(bào)文)的請(qǐng)求體(正文)中。因此,GET請(qǐng)求的數(shù)據(jù)會(huì)暴露在地址欄中,?POST請(qǐng)求則不會(huì)。 2、傳輸數(shù)據(jù)的大小在HTTP規(guī)范中,沒(méi)有對(duì)URL的?度和傳輸?shù)臄?shù)據(jù)??進(jìn)?限制。但是在實(shí)際開(kāi)發(fā)過(guò)程中,對(duì)于GET,特定的瀏覽器和服務(wù)器對(duì)URL的?度有限制。因此,在使?GET請(qǐng)求時(shí),傳輸數(shù)據(jù)會(huì)受到URL?度的限制。對(duì)于POST,由于不是URL傳值,理論上是不會(huì)受限制的,但是實(shí)際上各個(gè)服務(wù)器會(huì)規(guī)定對(duì)POST提交數(shù)據(jù)??進(jìn)?限制,Apache、IIS都有各?的配置。 3、安全性POST的安全性比GET的相對(duì)較?。

四、Response

  • 功能: 設(shè)置響應(yīng)消息

    1. 設(shè)置響應(yīng)行1. 格式:HTTP/1.1 200 ok2. 設(shè)置狀態(tài)碼:setStatus(int sc) 2. 設(shè)置響應(yīng)頭:setHeader(String name, String value) 添加響應(yīng)頭:void addHeader(String name, String value) //兩者作用一致 3. 設(shè)置響應(yīng)體:* 使用步驟:1. 獲取輸出流* 字符輸出流:PrintWriter getWriter()* 字節(jié)輸出流:ServletOutputStream getOutputStream()2. 使用輸出流,將數(shù)據(jù)輸出到客戶端瀏覽器
  • 案例

    1. 完成重定向* 重定向:資源跳轉(zhuǎn)的方式* 代碼實(shí)現(xiàn)://1. 設(shè)置狀態(tài)碼為302response.setStatus(302);//2.設(shè)置響應(yīng)頭locationresponse.setHeader("location","/day15/responseDemo2");//簡(jiǎn)單的重定向方法response.sendRedirect("/day15/responseDemo2");* forward 和 redirect 區(qū)別* 重定向的特點(diǎn):redirect1. 地址欄發(fā)生變化2. 重定向可以訪問(wèn)其他站點(diǎn)(服務(wù)器)的資源3. 重定向是兩次請(qǐng)求。不能使用request對(duì)象來(lái)共享數(shù)據(jù)* 轉(zhuǎn)發(fā)的特點(diǎn):forward1. 轉(zhuǎn)發(fā)地址欄路徑不變2. 轉(zhuǎn)發(fā)只能訪問(wèn)當(dāng)前服務(wù)器下的資源3. 轉(zhuǎn)發(fā)是一次請(qǐng)求,可以使用request對(duì)象來(lái)共享數(shù)據(jù)2. 服務(wù)器輸出字符數(shù)據(jù)到瀏覽器* 步驟:1. 獲取字符輸出流2. 輸出數(shù)據(jù)* 注意:* 亂碼問(wèn)題:1. PrintWriter pw = response.getWriter();獲取的流的默認(rèn)編碼是ISO-8859-12. 設(shè)置該流的默認(rèn)編碼 response.setHeader("content-type","text/htm;charset=utf-8")告訴瀏覽器響應(yīng)體所使用的編碼//簡(jiǎn)單的形式,設(shè)置編碼,是在獲取流之前設(shè)置response.setContentType("text/html;charset=utf-8");3. 服務(wù)器輸出字節(jié)數(shù)據(jù)到瀏覽器* 步驟:1. 獲取字節(jié)輸出流 ServletOutputStream getOutputStream()2. 輸出數(shù)據(jù)
  • 路徑寫(xiě)法

    1. 路徑分類(lèi)1. 相對(duì)路徑:通過(guò)相對(duì)路徑不可以確定唯一資源* 如:./index.html 或者 servletDemo1* 不以/開(kāi)頭、以.開(kāi)頭路徑* 規(guī)則:找到當(dāng)前資源和目標(biāo)資源之間的相對(duì)位置關(guān)系* ./:當(dāng)前目錄* ../:后退一級(jí)目錄2. 絕對(duì)路徑:通過(guò)絕對(duì)路徑可以確定唯一資源* 如:http://localhost/day15/responseDemo2 /day15/responseDemo2* 以/開(kāi)頭的路徑* 規(guī)則:判斷定義的路徑是給誰(shuí)用的?判斷請(qǐng)求將來(lái)從哪兒發(fā)出* 給客戶端瀏覽器使用:需要加虛擬目錄(項(xiàng)目的訪問(wèn)路徑)* 建議虛擬目錄動(dòng)態(tài)獲取:request.getContextPath()*如 <a> , <form> 標(biāo)簽重定向到某個(gè)頁(yè)面* 給服務(wù)器使用:不需要加虛擬目錄,使用相對(duì)路徑即可* 轉(zhuǎn)發(fā)路徑

五、ServletContext

  • 概念:ServletContext是javax.servlet包內(nèi)定義的接口,Web容器會(huì)為每個(gè)Web程序構(gòu)造一個(gè)實(shí)現(xiàn)該接口的對(duì)象實(shí)例,代表整個(gè)web應(yīng)用,Servlet可以和web容器(服務(wù)器)進(jìn)行交互
  • 獲取:
  • 通過(guò)request對(duì)象獲取
    request.getServletContext();
  • 通過(guò)HttpServlet獲取
    this.getServletContext();
  • 功能:
  • 獲取MIME類(lèi)型:
    • MIME類(lèi)型:在互聯(lián)網(wǎng)通信過(guò)程中定義的一種文件數(shù)據(jù)類(lèi)型

      • 格式: 大類(lèi)型/小類(lèi)型 text/html image/jpeg
    • 獲取:String getMimeType(String file)

  • 域?qū)ο?#xff1a;共享數(shù)據(jù)
  • void setAttribute(String name,Object value)

  • Object getAttribute(String name)

  • void removeAttribute(String name)

    // ServletContext對(duì)象范圍:所有用戶所有請(qǐng)求的數(shù)據(jù)

  • 獲取文件的真實(shí)(服務(wù)器)路徑
  • 方法:String getRealPath(String path)
    String b = context.getRealPath("/b.txt");//web目錄下資源訪問(wèn)
    System.out.println(b);

    String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目錄下的資源訪問(wèn)
    System.out.println(c );

    String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目錄下的資源訪問(wèn)
    System.out.println(a);

  • 六、ServletConfig(了解)

    • 概述

      ServletConfig是用來(lái)獲得Servlet相關(guān)的配置的對(duì)象

    • 獲取

      通過(guò)當(dāng)前Servlet實(shí)例來(lái)獲取
      ServletConfig config = this.getServletConfig();

    • 功能
    • 獲取ServletContext對(duì)象
      * ServletContext getServletContext();
    • 獲取當(dāng)前Servlet的初始化參數(shù)
      * String getInitParameter(String name)
    • 獲取當(dāng)前Servlet的所有初始化參數(shù)的名稱(chēng)
      * Enumeration getInitParameterNames()
    • 獲取當(dāng)前Servlet實(shí)例的名稱(chēng)
      * String getServletName()
    • Servlet初始化參數(shù)
  • 針對(duì)某個(gè)Servlet的初始化參數(shù)

    實(shí)現(xiàn)?式: (1) web.xml中先定義初始化參數(shù)<servlet><servlet-name></servlet-name><servlet-class></servlet-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></servlet> (2) 注解方式實(shí)現(xiàn) initParams@WebServlet(urlPatterns = {"/test"},initParams ={@WebInitParam(name = "code",value = "utf-8") })public class TestServlet extends HttpServlet {}*獲取: String encode = this.getServletConfig().getInitParameter("encoding");

    2.對(duì)于當(dāng)前web程序中所有的Servlet都有效的初始化參數(shù)

    (1)定義<context-param><param-name>forAll</param-name><param-value>utf-8</param-value></context-param> (2)獲取 this.getServletConfig().getServletContext().getInitParameter("forAll");
  • 七、Cookie和Session

    1.會(huì)話技術(shù)

  • 會(huì)話:會(huì)話跟蹤是Web程序中常?的技術(shù),?來(lái)跟蹤?戶的整個(gè)會(huì)話。保持對(duì)?戶會(huì)話期間的數(shù)據(jù)管理。常?的會(huì)話跟蹤技術(shù)是Cookie與Session。一次會(huì)話中包含多次請(qǐng)求和響應(yīng)。

    一次會(huì)話:瀏覽器第一次給服務(wù)器資源發(fā)送請(qǐng)求,會(huì)話建立,直到有一方斷開(kāi)為止

  • 功能:在一次會(huì)話的范圍內(nèi)的多次請(qǐng)求間,共享數(shù)據(jù)
  • 方式:
  • 客戶端會(huì)話技術(shù):Cookie
  • 服務(wù)器端會(huì)話技術(shù):Session
  • 2.Cookie

    • 概念
      Cookie是客戶端(?般指瀏覽器)請(qǐng)求服務(wù)器后,服務(wù)器發(fā)給客戶端的?個(gè)辨認(rèn)標(biāo)識(shí),保存在客戶端,當(dāng)客戶端再次向服務(wù)器發(fā)送請(qǐng)求時(shí),會(huì)攜帶著這個(gè)辨認(rèn)標(biāo)識(shí),服務(wù)器就可以通過(guò)這個(gè)標(biāo)識(shí)來(lái)識(shí)別客戶端的身份或狀態(tài)等。

    • Cookie的設(shè)置和獲取

      • 使用步驟:
        1. 創(chuàng)建Cookie對(duì)象,綁定數(shù)據(jù)
        * new Cookie(String name, String value)
        2. 發(fā)送Cookie對(duì)象
        * response.addCookie(Cookie cookie)
        3. 獲取Cookie,拿到數(shù)據(jù)
        * Cookie[] request.getCookies()
        *
        * 示例:
        * Cookie[] cs = request.getCookies();
        * // 通過(guò)遍歷獲取各個(gè)cookie的值
        for (Cookie c : cs) {
        String name = c.getName(); //獲取cookie的名稱(chēng)
        String value = c.getValue();//獲取cookie的值
        }
    • 實(shí)現(xiàn)原理

    • 基于響應(yīng)頭set-cookie和請(qǐng)求頭cookie實(shí)現(xiàn)。
  • 客戶端請(qǐng)求服務(wù)器中發(fā)送cookie的Servlet,服務(wù)器設(shè)置set-cookie: msg = hello頭發(fā)送到客戶端瀏覽器。
  • 瀏覽器將msg = hello保存到本地cookie中,后續(xù)的請(qǐng)求都會(huì)通過(guò)請(qǐng)求頭Cookie攜帶此客戶端的cookie數(shù)據(jù),服務(wù)器可以獲取cookie進(jìn)行相應(yīng)的操作
    • 細(xì)節(jié)
  • 一次可不可以發(fā)送多個(gè)cookie?
    * 可以
    * 可以創(chuàng)建多個(gè)Cookie對(duì)象,使用response調(diào)用多次addCookie方法發(fā)送cookie即可。
  • cookie在瀏覽器中保存多長(zhǎng)時(shí)間?
    1. 默認(rèn)情況下,當(dāng)瀏覽器關(guān)閉后,Cookie數(shù)據(jù)被銷(xiāo)毀
    2. 持久化存儲(chǔ):
    * setMaxAge(int seconds)
    (1)正數(shù):將Cookie數(shù)據(jù)寫(xiě)到硬盤(pán)的文件中。持久化存儲(chǔ)。并指定cookie存活時(shí)間,時(shí)間到后,cookie文件自動(dòng)失效
    (2)負(fù)數(shù):默認(rèn)值
    (3)零:刪除cookie信息
  • cookie能不能存中文?
    * 在tomcat 8 之前 cookie中不能直接存儲(chǔ)中文數(shù)據(jù)。
    * 需要將中文數(shù)據(jù)轉(zhuǎn)碼—一般采用URL編碼(%E3)
    * 在tomcat 8 之后,cookie支持中文數(shù)據(jù)。特殊字符還是不支持,建議使用URL編碼存儲(chǔ),URL解碼解析
  • cookie共享問(wèn)題?
    1. 假設(shè)在一個(gè)tomcat服務(wù)器中,部署了多個(gè)web項(xiàng)目,那么在這些web項(xiàng)目中cookie能不能共享?
    * 默認(rèn)情況下cookie不能共享。
    * setPath(String path):設(shè)置cookie的獲取范圍。默認(rèn)情況下,被設(shè)置為當(dāng)前的虛擬目錄
    * 如果要共享,則可以將path設(shè)置為"/"
    ~
    2. 不同的tomcat服務(wù)器間cookie共享問(wèn)題?
    ? * setDomain(String path):如果設(shè)置一級(jí)域名相同,那么多個(gè)服務(wù)器之間cookie可以共享
    ? * setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享。
  • Cookie的特點(diǎn)和作用
    * 特點(diǎn)
    1. cookie存儲(chǔ)數(shù)據(jù)在客戶端瀏覽器
    2. 瀏覽器對(duì)于單個(gè)cookie 的大小有限制(4kb) 以及 對(duì)同一個(gè)域名下的總cookie數(shù)量也有限制,不同瀏覽器對(duì)于cookie的數(shù)量限制不同。
    * 作用:
    1. cookie一般用于存出少量的不太敏感的數(shù)據(jù)
    2. 在不登錄的情況下,完成服務(wù)器對(duì)客戶端的身份識(shí)別
  • 3.Session

  • 概念:服務(wù)器端會(huì)話技術(shù),在一次會(huì)話的多次請(qǐng)求間共享數(shù)據(jù),將數(shù)據(jù)保存在服務(wù)器端的對(duì)象中。HttpSession

  • 快速入門(mén):

  • 獲取HttpSession對(duì)象:
    HttpSession session = request.getSession();
  • 使用HttpSession對(duì)象:
    Object getAttribute(String name)
    void setAttribute(String name, Object value)
    void removeAttribute(String name)
  • 原理

    • Session的實(shí)現(xiàn)是依賴于Cookie的。
    • 第一次獲取Session,沒(méi)有Cookie,服務(wù)器會(huì)在內(nèi)存中創(chuàng)建一個(gè)新的Session對(duì)象,假設(shè)其對(duì)應(yīng)的Id屬性值為 ID = 742938a4289。
    • 服務(wù)器會(huì)自動(dòng)設(shè)置響應(yīng)頭set-cookie:JSESSIONID= 742938a4289響應(yīng)消息給瀏覽器。
    • 瀏覽器解析set-cookie響應(yīng)頭,將JSESSIONID=742938a4289存入Cookie請(qǐng)求頭。
    • 后續(xù)服務(wù)器再次創(chuàng)建Session對(duì)象時(shí)會(huì)根據(jù)請(qǐng)求頭Cookie中的JSESSIONID先在內(nèi)存中尋找對(duì)應(yīng)的session實(shí)例,然后返回其引用。
  • 細(xì)節(jié):
    ? 1. 當(dāng)客戶端關(guān)閉后,服務(wù)器不關(guān)閉,兩次獲取session是否為同一個(gè)?
    ? * 默認(rèn)情況下。不是。
    ? * 如果需要相同,則可以創(chuàng)建Cookie,鍵為JSESSIONID,設(shè)置最大存活時(shí)間,讓 cookie持久化保存。
    ? Cookie c = new Cookie(“JSESSIONID”,session.getId());
    ? c.setMaxAge(60*60); //單位:秒
    ? response.addCookie(c );
    ?

    2. 客戶端不關(guān)閉,服務(wù)器關(guān)閉后,兩次獲取的session是同一個(gè)嗎?* 不是同一個(gè),但是要確保數(shù)據(jù)不丟失。tomcat自動(dòng)完成以下工作* session的鈍化:* 在服務(wù)器正常關(guān)閉之前,將session對(duì)象序列化到硬盤(pán)上* session的活化:* 在服務(wù)器啟動(dòng)后,將session文件轉(zhuǎn)化為內(nèi)存中的session對(duì)象即可。
  • session什么時(shí)候被銷(xiāo)毀?
    1. 本地服務(wù)器正常關(guān)閉后不會(huì)被銷(xiāo)毀,idea上配置的tomcat服務(wù)器關(guān)閉后會(huì)被銷(xiāo)毀
    2. session對(duì)象調(diào)用invalidate() 。
    3. session默認(rèn)失效時(shí)間 30分鐘
    * Session的超時(shí)時(shí)間為maxInactiveInterval屬性,可以通過(guò)對(duì)應(yīng)的 getMaxInactiveInterval()獲取,通過(guò) setMaxInactiveInterval(longinterval)修改
    * 還可以在config目錄下的web.xml中選擇性配置修改

    <session-config><session-timeout>30</session-timeout></session-config>

    4.瀏覽器中含有JSESSIONID的cookie被銷(xiāo)毀時(shí),服務(wù)器會(huì)重新創(chuàng)建一個(gè)新的session對(duì)象,原有的session對(duì)象會(huì)在失效時(shí)間過(guò)后被銷(xiāo)毀。

  • session的特點(diǎn)

  • session用于存儲(chǔ)一次會(huì)話的多次請(qǐng)求的數(shù)據(jù),存在服務(wù)器端。
  • 為了獲得更?的存取速度,服務(wù)器?般把Session放在內(nèi)存?。
  • session可以存儲(chǔ)任意類(lèi)型,任意大小的數(shù)據(jù)
  • 什么時(shí)候創(chuàng)建Session?
    1.Session在?戶第?次訪問(wèn)page指令中的session屬性值不為false的JSP頁(yè)面時(shí)被創(chuàng)建。
    2.若servelt是第瀏覽器客戶端訪問(wèn)的第一個(gè)WEB應(yīng)用的資源,則只有調(diào)用了request.getSession()或request.getSession(true)才會(huì)創(chuàng)建session對(duì)象。

    其中request.getSession(boolean),
    boolean為false時(shí),若沒(méi)有和當(dāng)前JSP頁(yè)面關(guān)聯(lián)的session對(duì)象則返回null,若有,則返回true。
    Boolean為true時(shí),一定返回一個(gè)session對(duì)象,若沒(méi)有和當(dāng)前JSP頁(yè)面關(guān)聯(lián)的session對(duì)象,則服務(wù)器創(chuàng)建一個(gè)新的session對(duì)象,若有,直接返回。
    request.getSession()等同于request.getSession(true)。

    • session與Cookie的區(qū)別:
      1. session存儲(chǔ)數(shù)據(jù)在服務(wù)器端,Cookie在客戶端。
      2. session沒(méi)有數(shù)據(jù)大小限制,Cookie有,一般為4KB。
      3. session數(shù)據(jù)安全,Cookie相對(duì)于不安全。
      4. Session是由應(yīng)?服務(wù)器維持的?個(gè)服務(wù)器端的存儲(chǔ)空間,?戶在連接服務(wù)器時(shí),會(huì)由服務(wù)器?成?個(gè)唯?的SessionID,?該SessionID 為標(biāo)識(shí)符來(lái)存取服務(wù)器端的Session存儲(chǔ)空間。?SessionID這?數(shù)據(jù)則是保存到客戶端,?Cookie保存的,?戶提交??時(shí),會(huì)將這?SessionID提交到服務(wù)器端,來(lái)存取Session數(shù)據(jù)。這?過(guò)程,是不?開(kāi)發(fā)?員?預(yù)的。所以?旦客戶端禁?Cookie,那么Session也會(huì)失效。

    八、JSP

    1. 概念:
    * Java Server Pages: java服務(wù)器端頁(yè)面
    * 可以理解為:一個(gè)特殊的頁(yè)面,其中既可以指定定義html標(biāo)簽,又可以定義java代碼
    * 用于簡(jiǎn)化書(shū)寫(xiě)!!!

    2. 原理
    * JSP本質(zhì)上就是一個(gè)Servlet,當(dāng)瀏覽器訪問(wèn)http://localhost:8080/day9_1/index.jsp。服務(wù)器發(fā)現(xiàn)后綴為.jsp,它會(huì)根據(jù)路徑找到index.jsp?件,會(huì)將index.jsp翻譯成index_jsp.java?件,對(duì)這個(gè)java?件進(jìn)?編譯,產(chǎn)??個(gè)index_jsp.class?件,將class?件加載運(yùn)?。將JSP翻譯成java?件,它是將JSP中的所有的HTML代碼通過(guò)流進(jìn)?輸出,也就是說(shuō)最終翻譯成class,被虛擬機(jī)加載,它本質(zhì)是servlet,它就會(huì)往回響應(yīng),響應(yīng)回去就是把JSP中的HTML代碼以流的?式寫(xiě)回瀏覽器。所以在JSP中展示出了HTML代碼。

    3. JSP指令

    • 作用:用于配置JSP頁(yè)面,導(dǎo)入資源文件

      • 格式:
        <%@ 指令名稱(chēng) 屬性名1=屬性值1 屬性名2=屬性值2 … %>
    • 分類(lèi):
      1. page :

      • contentType: 配置JSP頁(yè)面的 contentType屬性:等同于response.setContentType()
    • 設(shè)置響應(yīng)體的mime類(lèi)型以及字符集
    • 設(shè)置當(dāng)前jsp頁(yè)面的編碼(只能是高級(jí)的IDE才能生效,如果使用低級(jí)工具,則需要設(shè)置pageEncoding屬性設(shè)置當(dāng)前頁(yè)面的字符集)
      • import:導(dǎo)包
      • errorPage:當(dāng)前頁(yè)面發(fā)生異常后,會(huì)自動(dòng)跳轉(zhuǎn)到指定的錯(cuò)誤頁(yè)面
      • isErrorPage:標(biāo)識(shí)當(dāng)前也是是否是錯(cuò)誤頁(yè)面。
        • true:是,可以使用內(nèi)置對(duì)象exception <% String message = exception.getMessage(); %>
        • false:否。默認(rèn)值。不可以使用內(nèi)置對(duì)象exception

    page 指令相關(guān)屬性:

  • include : JSP可以通過(guò)include指令來(lái)包含其他?件。被包含的?件可以是JSP?件、HTML?件或?本?件。包含的?件就好像是該JSP?件的?部分,會(huì)被同時(shí)編譯執(zhí)?。
    <%@ include file=“?件相對(duì) url 地址” %>

  • taglib : 導(dǎo)入資源(引入jsp標(biāo)簽庫(kù))

    • <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
      • prefix:前綴,自定義的
  • 注釋:

  • 1. html注釋:<!-- -->:只能注釋html代碼片段2. jsp注釋:推薦使用<%-- --%>:可以注釋所有

    4. JSP的腳本: JSP定義Java代碼的方式
    1. <% 代碼 %>:定義的java代碼,在service方法中。service方法中可以定義什么,該腳本中就可以定義什么。
    2. <%! 代碼 %>:定義的java代碼,在jsp轉(zhuǎn)換后的java類(lèi)的成員位置。
    3. <%= 代碼 %>:定義的java代碼,會(huì)輸出到頁(yè)面上。輸出語(yǔ)句中可以定義什么,該腳本中就可以定義什么。

    5. JSP的內(nèi)置對(duì)象:
    * 在jsp頁(yè)面中不需要獲取和創(chuàng)建,可以直接使用的對(duì)象
    * jsp一共有9個(gè)內(nèi)置對(duì)象。

    變量名真實(shí)類(lèi)型作用
    pageContextPageContext當(dāng)前頁(yè)面共享數(shù)據(jù),還可以獲取其他八個(gè)內(nèi)置對(duì)象
    requestHttpServletRequest一次請(qǐng)求訪問(wèn)的多個(gè)資源(轉(zhuǎn)發(fā))間共享數(shù)據(jù)。
    sessionHttpSession一次會(huì)話的多個(gè)請(qǐng)求間共享數(shù)據(jù)
    applicationServletContext所有用戶間共享數(shù)據(jù)
    responseHttpServletResponseresponse 代表的是對(duì)客戶端的響應(yīng),主要是將JSP容器處理過(guò)的對(duì)象傳回到客戶端。只在JSP??內(nèi)有效。
    pageObject當(dāng)前頁(yè)面(Servlet)的對(duì)象,類(lèi)似于this
    outJspWriter輸出對(duì)象,數(shù)據(jù)輸出到頁(yè)面上
    configServletConfig主要作?是取得服務(wù)器的配置信息。通過(guò) pageConext對(duì)象的 getServletConfig() ?法可以獲取?個(gè)config對(duì)象。當(dāng)?個(gè)Servlet 初始化時(shí),容器把某些信息通過(guò)config對(duì)象傳遞給這個(gè)Servlet。 開(kāi)發(fā)者可以在web.xml ?件中為應(yīng)?程序環(huán)境中的Servlet程序和JSP??提供初始化參數(shù)。
    exceptionThrowableexception 對(duì)象的作?是顯示異常信息,只有在包含 isErrorPage=“true” 的??中才可以被使?,通常用于打印錯(cuò)誤信息輸出到日志文件,exception.getMessage()
    • out:字符輸出流對(duì)象。可以將數(shù)據(jù)輸出到頁(yè)面上。和response.getWriter()類(lèi)似
      * response.getWriter()和out.write()的區(qū)別:
      * 在tomcat服務(wù)器真正給客戶端做出響應(yīng)之前,會(huì)先找response緩沖區(qū)數(shù)據(jù),再找out緩沖區(qū)數(shù)據(jù)。
      * response.getWriter()數(shù)據(jù)輸出永遠(yuǎn)在out.write()之前。

    九、 EL &JSTL

    1. EL表達(dá)式

  • 概念:Expression Language 表達(dá)式語(yǔ)言
  • 作用:替換和簡(jiǎn)化jsp頁(yè)面中java代碼的編寫(xiě)
  • 語(yǔ)法:${表達(dá)式}
  • 注意:
    • jsp默認(rèn)支持el表達(dá)式的。如果要忽略el表達(dá)式
    • 設(shè)置jsp中page指令中:isELIgnored=“true” 忽略當(dāng)前jsp頁(yè)面中所有的el表達(dá)式
    • ${表達(dá)式} :忽略當(dāng)前這個(gè)el表達(dá)式
  • 使用:
  • 運(yùn)算:
    • 運(yùn)算符:
    • 算數(shù)運(yùn)算符: + - * /(div) %(mod)
      ${30 + 40}
      ${20 div 5}
    • 比較運(yùn)算符: > < >= <= == !=
    • 邏輯運(yùn)算符: &&(and) ||(or) !(not)
    • 空運(yùn)算符: empty
      • 功能:用于判斷字符串、集合、數(shù)組對(duì)象是否為null或者長(zhǎng)度是否為0
      • ${empty list}:判斷字符串、集合、數(shù)組對(duì)象是否為null或者長(zhǎng)度為0
      • ${not empty str}:表示判斷字符串、集合、數(shù)組對(duì)象是否不為null 并且 長(zhǎng)度>0
  • 獲取值
  • el表達(dá)式只能從域?qū)ο笾蝎@取值
  • 語(yǔ)法:
  • ${域名稱(chēng).鍵名}:從指定域中獲取指定鍵的值

    • 域名稱(chēng):
    • pageScope --> pageContext
    • requestScope --> request
    • sessionScope --> session
    • applicationScope --> application(ServletContext)
    • 舉例:在request域中存儲(chǔ)了name=張三
    • 獲取:${requestScope.name}
  • ${鍵名}:表示依次從最小的域中查找是否有該鍵對(duì)應(yīng)的值,直到找到為止。

  • 獲取對(duì)象、List集合、Map集合的值

  • 對(duì)象:${域名稱(chēng).鍵名.屬性名}

    • 本質(zhì)上會(huì)去調(diào)用對(duì)象的getter方法
  • List集合:${域名稱(chēng).鍵名[索引]}

    • 索引越界會(huì)返回空字符
  • Map集合:

    • ${域名稱(chēng).鍵名.key名稱(chēng)}
    • ${域名稱(chēng).鍵名[“key名稱(chēng)”]}
  • 隱式對(duì)象:
    * el表達(dá)式中有11個(gè)隱式對(duì)象
    * pageScope
    * requestScope
    * sessionScope
    * applicationScope
    * pageContext:
    * 獲取jsp其他八個(gè)內(nèi)置對(duì)象
    * ${pageContext.request.contextPath}:動(dòng)態(tài)獲取虛擬目錄
  • 2. JSTL

    (1) 什么是JSTL
    JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù)(JSTL)是?個(gè)JSP標(biāo)簽集合,它封裝了JSP應(yīng)?的通?核?功能。
    JSTL?持通?的、結(jié)構(gòu)化的任務(wù),?如迭代,條件判斷,XML?檔操作,國(guó)際化標(biāo)簽,SQL標(biāo)簽。 除了這些,它還提供了?個(gè)框架來(lái)使?集成JSTL的?定義標(biāo)簽。
    根據(jù)JSTL標(biāo)簽所提供的功能,可以將其分為5個(gè)類(lèi)別。核?標(biāo)簽 格式化標(biāo)簽 sql標(biāo)簽 xml標(biāo)簽 jstl函數(shù)(后?詳細(xì)解釋)
    (2) JSTL的作?和語(yǔ)法格式
    作?:用于簡(jiǎn)化和替換jsp頁(yè)面上的java代碼
    語(yǔ)法格式:

  • 下載 jakarta-taglibs-standard-1.1.2.zip 包并解壓,將 jakarta-taglibs-standard-1.1.2/lib/ 下的兩
    個(gè) jar ?件:standard.jar 和 jstl.jar ?件拷?到 /WEB-INF/lib/ 下。

  • 在JSP??中引?<%@ taglib prefix=”??使?的名稱(chēng)” uri=”功能范圍的路徑”%>

  • 常用的JSTL標(biāo)簽

    • 核?標(biāo)簽
      核?標(biāo)簽是最常?的 JSTL標(biāo)簽。引?核?標(biāo)簽庫(kù)的語(yǔ)法如下:
      <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
    • if:相當(dāng)于java代碼的if語(yǔ)句

    • 屬性:
      • test 必須屬性,接受boolean表達(dá)式
        • 如果表達(dá)式為true,則顯示if標(biāo)簽體內(nèi)容,如果為false,則不顯示標(biāo)簽體內(nèi)容
        • 一般情況下,test屬性值會(huì)結(jié)合el表達(dá)式一起使用
    • 注意:
      • c:if標(biāo)簽沒(méi)有else情況,想要else情況,則可以再定義一個(gè)c:if標(biāo)簽
    • choose:相當(dāng)于java代碼的switch語(yǔ)句

    • 使用choose標(biāo)簽聲明 相當(dāng)于switch聲明
    • 使用when標(biāo)簽做判斷 相當(dāng)于case
    • 使用otherwise標(biāo)簽做其他情況的聲明 相當(dāng)于default
    • foreach:相當(dāng)于java代碼的for語(yǔ)句

  • 代碼案例:

    <%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html> <head><title>if標(biāo)簽</title> </head> <body><%--c:if標(biāo)簽1. 屬性:* test 必須屬性,接受boolean表達(dá)式* 如果表達(dá)式為true,則顯示if標(biāo)簽體內(nèi)容,如果為false,則不顯示標(biāo)簽體內(nèi)容* 一般情況下,test屬性值會(huì)結(jié)合el表達(dá)式一起使用2. 注意:c:if標(biāo)簽沒(méi)有else情況,想要else情況,則可以在定義一個(gè)c:if標(biāo)簽--%><c:if test="true"><h1>我是真...</h1></c:if><br><%//判斷request域中的一個(gè)list集合是否為空,如果不為null則顯示遍歷集合List list = new ArrayList();list.add("aaaa");request.setAttribute("list",list);request.setAttribute("number",4);%><c:if test="${not empty list}">遍歷集合...</c:if><br><c:if test="${number % 2 != 0}">${number}為奇數(shù)</c:if><c:if test="${number % 2 == 0}">${number}為偶數(shù)</c:if></body> </html>


    代碼案例:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html> <head><title>choose標(biāo)簽</title> </head> <body><%--完成數(shù)字編號(hào)對(duì)應(yīng)星期幾案例1.域中存儲(chǔ)一數(shù)字2.使用choose標(biāo)簽取出數(shù)字 相當(dāng)于switch聲明3.使用when標(biāo)簽做數(shù)字判斷 相當(dāng)于case4.otherwise標(biāo)簽做其他情況的聲明 相當(dāng)于default--%><%request.setAttribute("number",51);%><c:choose><c:when test="${number == 1}">星期一</c:when><c:when test="${number == 2}">星期二</c:when><c:when test="${number == 3}">星期三</c:when><c:when test="${number == 4}">星期四</c:when><c:when test="${number == 5}">星期五</c:when><c:when test="${number == 6}">星期六</c:when><c:when test="${number == 7}">星期天</c:when><c:otherwise>數(shù)字輸入有誤</c:otherwise></c:choose></body> </html>


    代碼案例:

    <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.List" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html> <head><title>foreach標(biāo)簽</title> </head> <body><%--foreach:相當(dāng)于java代碼的for語(yǔ)句1. 完成重復(fù)的操作for(int i = 0; i < 10; i ++){}* 屬性:begin:開(kāi)始值end:結(jié)束值var:臨時(shí)變量step:步長(zhǎng)varStatus:循環(huán)狀態(tài)對(duì)象index:容器中元素的索引,從0開(kāi)始count:循環(huán)次數(shù),從1開(kāi)始2. 遍歷容器List<User> list;for(User user : list){}* 屬性:items:容器對(duì)象var:容器中元素的臨時(shí)變量varStatus:循環(huán)狀態(tài)對(duì)象index:容器中元素的索引,從0開(kāi)始count:循環(huán)次數(shù),從1開(kāi)始--%><c:forEach begin="1" end="10" var="i" step="2" varStatus="s">${i} <h3>${s.index}<h3> <h4> ${s.count} </h4><br></c:forEach><hr><%List list = new ArrayList();list.add("aaa");list.add("bbb");list.add("ccc");request.setAttribute("list",list);%><c:forEach items="${list}" var="str" varStatus="s">${s.index} ${s.count} ${str}<br></c:forEach></body> </html>
  • 格式化標(biāo)簽
    1、fmt:formatDate 作?:將?期類(lèi)型格式化為指定模式的字符串
    屬性
    value:將要被格式化的數(shù)據(jù)
    pattern:格式化的模式,與SimpleDateFormat的參數(shù)設(shè)置?樣
    var:格式化后的字符串所要存放的變量,若不指定var,則會(huì)將格式化的結(jié)果直接顯示在??
    scope:變量存放的域?qū)傩钥臻g,默認(rèn)page
    type:其取值為date、time、both,表示給出的value是?期、時(shí)間、還是兩者都包含,默認(rèn)是date
  • 代碼案例:

    <%@ page import="java.util.Date" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html> <head><title>Title</title> </head> <body><%pageContext.setAttribute("mytime",new Date());%>date=<fmt:formatDate value="${mytime}" pattern="yyyy-MM-dd"></fmt:formatDate> </body> </html>

    十、Filter

  • 概念:

    • 生活中的過(guò)濾器:凈水器,空氣凈化器,土匪、
    • web中的過(guò)濾器:當(dāng)訪問(wèn)服務(wù)器的資源時(shí),過(guò)濾器可以將請(qǐng)求攔截下來(lái),完成一些特殊的功能。
    • 過(guò)濾器的作用:
      • 一般用于完成通用的操作。如:登錄驗(yàn)證、統(tǒng)一編碼處理、敏感字符過(guò)濾…
  • 快速入門(mén):

  • 步驟:
  • 定義一個(gè)類(lèi),實(shí)現(xiàn)接口Filter
  • 復(fù)寫(xiě)方法
  • 配置攔截路徑
  • web.xml
  • 注解
  • 代碼:
  • @WebFilter("/*")//訪問(wèn)所有資源之前,都會(huì)執(zhí)行該過(guò)濾器public class FilterDemo1 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException { } @Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("filterDemo1被執(zhí)行了....");//放行filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic void destroy() {}}
  • 過(guò)濾器細(xì)節(jié):

  • web.xml配置

    demo1
    cn.itcast.web.filter.FilterDemo1


    demo1

    /*

  • 過(guò)濾器執(zhí)行流程

  • 執(zhí)行過(guò)濾器
  • 執(zhí)行放行后的資源
  • 回來(lái)執(zhí)行過(guò)濾器放行代碼下邊的代碼
  • 過(guò)濾器生命周期方法

  • init:在服務(wù)器啟動(dòng)后,會(huì)創(chuàng)建Filter對(duì)象,然后調(diào)用init方法。只執(zhí)行一次。用于加載資源
  • doFilter:每一次請(qǐng)求被攔截資源時(shí),會(huì)執(zhí)行。執(zhí)行多次
  • destroy:在服務(wù)器關(guān)閉后,Filter對(duì)象被銷(xiāo)毀。如果服務(wù)器是正常關(guān)閉,則會(huì)執(zhí)行destroy方法。只執(zhí)行一次。用于釋放資源
  • 過(guò)濾器配置詳解

    • 攔截路徑配置:
    • 具體資源路徑: /index.jsp 只有訪問(wèn)index.jsp資源時(shí),過(guò)濾器才會(huì)被執(zhí)行
    • 攔截目錄: /user/* 訪問(wèn)/user下的所有資源時(shí),過(guò)濾器都會(huì)被執(zhí)行
    • 后綴名攔截: *.jsp 訪問(wèn)所有后綴名為jsp資源時(shí),過(guò)濾器都會(huì)被執(zhí)行
    • 攔截所有資源:/* 訪問(wèn)所有資源時(shí),過(guò)濾器都會(huì)被執(zhí)行
    • 攔截方式配置:資源被訪問(wèn)的方式
      • 注解配置:
        • 設(shè)置dispatcherTypes屬性
        • REQUEST:默認(rèn)值。瀏覽器直接請(qǐng)求資源
        • FORWARD:轉(zhuǎn)發(fā)訪問(wèn)資源
        • INCLUDE:包含訪問(wèn)資源
        • ERROR:錯(cuò)誤跳轉(zhuǎn)資源
        • ASYNC:異步訪問(wèn)資源

      //瀏覽器直接請(qǐng)求index.jsp資源時(shí),該過(guò)濾器會(huì)被執(zhí)行
      //@WebFilter(value="/index.jsp",dispatcherTypes = DispatcherType.REQUEST)
      //只有轉(zhuǎn)發(fā)訪問(wèn)index.jsp時(shí),該過(guò)濾器才會(huì)被執(zhí)行
      //@WebFilter(value="/index.jsp",dispatcherTypes = DispatcherType.FORWARD)
      //瀏覽器直接請(qǐng)求index.jsp或者轉(zhuǎn)發(fā)訪問(wèn)index.jsp。該過(guò)濾器才會(huì)被執(zhí)行
      //@WebFilter(value="/*",dispatcherTypes ={ DispatcherType.FORWARD,DispatcherType.REQUEST})

    • web.xml配置設(shè)置<dispatcher></dispatcher>標(biāo)簽即可 如: <filter-mapping><filter-name>demo1</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher></filter-mapping>
  • 過(guò)濾器鏈(配置多個(gè)過(guò)濾器)

    • 執(zhí)行順序:如果有兩個(gè)過(guò)濾器:過(guò)濾器1和過(guò)濾器2

    • 過(guò)濾器1
    • 過(guò)濾器2
    • 資源執(zhí)行
    • 過(guò)濾器2
    • 過(guò)濾器1
    • 過(guò)濾器先后順序問(wèn)題:

    • 注解配置:按照類(lèi)名的字符串比較規(guī)則比較,值小的先執(zhí)行
      • 如: AFilter 和 BFilter,AFilter就先執(zhí)行了。
    • web.xml配置:<filter-mapping>誰(shuí)定義在上邊,誰(shuí)先執(zhí)行
    • 使?場(chǎng)景
      1.如何防??戶未登錄就執(zhí)?后續(xù)操作
      String name=(String)session.getAttribute(“key”);
      if(name==null){
      //跳轉(zhuǎn)到登錄??
      }
      2.設(shè)置編碼?式–統(tǒng)?設(shè)置編碼
      3.加密解密(密碼的加密和解密)
      4.?法?字篩選
      5.下載資源的限制
      過(guò)濾器的特點(diǎn):在servlet之前和之后都會(huì)被執(zhí)?

    十一、Listener

    1.什么是監(jiān)聽(tīng)器
    監(jiān)聽(tīng)器就是監(jiān)聽(tīng)某個(gè)域?qū)ο蟮牡臓顟B(tài)變化的組件
    監(jiān)聽(tīng)器的相關(guān)概念:
    事件源:被監(jiān)聽(tīng)的對(duì)象(三個(gè)域?qū)ο?request、session、servletContext)
    監(jiān)聽(tīng)器:監(jiān)聽(tīng)事件源對(duì)象事件源對(duì)象的狀態(tài)的變化都會(huì)觸發(fā)監(jiān)聽(tīng)器
    注冊(cè)監(jiān)聽(tīng)器:將監(jiān)聽(tīng)器與事件源、事件進(jìn)?綁定。事件源上發(fā)生某個(gè)事件后,執(zhí)行監(jiān)聽(tīng)器代碼
    響應(yīng)?為:監(jiān)聽(tīng)器監(jiān)聽(tīng)到事件源的狀態(tài)變化時(shí)所涉及的功能代碼(程序員編寫(xiě)代碼)

    • ServletContextListener:監(jiān)聽(tīng)ServletContext對(duì)象的創(chuàng)建和銷(xiāo)毀
      • 方法:
        • void contextDestroyed(ServletContextEvent sce) :ServletContext對(duì)象被銷(xiāo)毀之前會(huì)調(diào)用該方法
        • void contextInitialized(ServletContextEvent sce) :ServletContext對(duì)象創(chuàng)建后會(huì)調(diào)用該方法
      • 步驟:
      • 定義一個(gè)類(lèi),實(shí)現(xiàn)ServletContextListener接口
      • 復(fù)寫(xiě)方法
      • 配置1. web.xml<listener><!-- 監(jiān)聽(tīng)器所在的路徑 --><listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class></listener>2. 注解:* @WebListener

    2.監(jiān)聽(tīng)器分類(lèi)

    3.監(jiān)聽(tīng)三?域?qū)ο蟮膭?chuàng)建與銷(xiāo)毀的監(jiān)聽(tīng)器

    • ServletContextListener
      監(jiān)聽(tīng)ServletContext域的創(chuàng)建與銷(xiāo)毀的監(jiān)聽(tīng)器
      Servlet域的?命周期
      何時(shí)創(chuàng)建:服務(wù)器啟動(dòng)創(chuàng)建
      何時(shí)銷(xiāo)毀:服務(wù)器關(guān)閉銷(xiāo)毀
      ServletContextListener監(jiān)聽(tīng)器的主要作?
      初始化的?作:初始化對(duì)象、初始化數(shù)據(jù)(加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)、連接池的初始化)
      加載?些初始化的配置?件(spring的配置?件)
      任務(wù)調(diào)度(定時(shí)器—Timer/TimerTask)
    • HttpSessionListener
      監(jiān)聽(tīng)Httpsession域的創(chuàng)建和銷(xiāo)毀的監(jiān)聽(tīng)器
      HttpSession對(duì)象的?命周期
      何時(shí)創(chuàng)建:第?次調(diào)?request.getSession時(shí)創(chuàng)建
      何時(shí)銷(xiāo)毀:服務(wù)器關(guān)閉銷(xiāo)毀、session過(guò)期(默認(rèn)30分鐘,修改默認(rèn)的30分鐘是在
      Tomcat的web.xml,修改當(dāng)前項(xiàng)?的過(guò)期時(shí)間是在??項(xiàng)?的web.xml中)、?動(dòng)銷(xiāo)毀
      HttpSessionListener監(jiān)聽(tīng)器的主要作?:
      由于每次訪問(wèn)?站都會(huì)默認(rèn)創(chuàng)建session對(duì)象(jsp??中page指令中的session屬性默認(rèn)為
      true,即被訪問(wèn)時(shí)創(chuàng)建session),可以?于計(jì)數(shù)?站訪問(wèn)過(guò)的?
    • ServletRequestListener
      監(jiān)聽(tīng)ServletRequest域創(chuàng)建與銷(xiāo)毀的監(jiān)聽(tīng)器
      ServletRequest的?命周期
      創(chuàng)建:每?次請(qǐng)求都會(huì)創(chuàng)建request
      銷(xiāo)毀:請(qǐng)求結(jié)束
      ?法同上,?處不是很?,此處省略。

    十二、 MVC和三層架構(gòu)

    1.MVC設(shè)計(jì)模式

  • jsp演變歷史
  • 早期只有servlet,只能使用response輸出標(biāo)簽數(shù)據(jù),非常麻煩
  • 后來(lái)又jsp,簡(jiǎn)化了Servlet的開(kāi)發(fā),如果過(guò)度使用jsp,在jsp中即寫(xiě)大量的java代碼,有寫(xiě)html表,造成難于維護(hù),難于分工協(xié)作
  • 再后來(lái),java的web開(kāi)發(fā),借鑒mvc開(kāi)發(fā)模式,使得程序的設(shè)計(jì)更加合理性
  • MVC:
  • M:Model,模型。JavaBean
    • 完成具體的業(yè)務(wù)操作,如:查詢數(shù)據(jù)庫(kù),封裝對(duì)象
  • V:View,視圖。JSP
    • 展示數(shù)據(jù)
  • C:Controller,控制器。Servlet
    • 獲取用戶的輸入
    • 調(diào)用模型
    • 將數(shù)據(jù)交給視圖進(jìn)行展示
    • 優(yōu)缺點(diǎn):

      1. 優(yōu)點(diǎn):1. 耦合性低,方便維護(hù),可以利于分工協(xié)作2. 重用性高2. 缺點(diǎn):1. 使得項(xiàng)目架構(gòu)變得復(fù)雜,對(duì)開(kāi)發(fā)人員要求高

    JavaBeans :是Java中?種特殊的類(lèi)(換?之:JavaBean就是?個(gè)Java類(lèi)).
    ?個(gè)Java類(lèi) ,滿?以下要求,則可稱(chēng)為?個(gè)JavaBean
    a. public修飾的類(lèi),提供public ?參構(gòu)造?法
    b. 所有屬性 都是private
    C. 提供getter和setter?法
    從使?層?來(lái)看,JavaBean分為2?類(lèi):
    a. 封裝業(yè)務(wù)邏輯的JavaBean(eg:LoginDao.java 封裝了登錄邏輯)
    b. 封裝數(shù)據(jù)的JavaBean(實(shí)體類(lèi):eg:Student.java Vadio.java 。往往對(duì)應(yīng)于數(shù)據(jù)庫(kù)中的?張
    表,即數(shù)據(jù)庫(kù)中有個(gè)Student表,項(xiàng)?中就有個(gè)Student.java類(lèi))通常:表名=類(lèi)名,列名=屬性名
    JavaBean是?個(gè)可以重復(fù)使?的組件,通過(guò)編寫(xiě)?個(gè)組件來(lái)實(shí)現(xiàn)某種通?功能,“?次編寫(xiě)、任何地?執(zhí)?、任何地?重?”。

    2.三層架構(gòu)
    三層架構(gòu) 通常意義上的三層架構(gòu)就是將整個(gè)業(yè)務(wù)應(yīng)?劃分為:表現(xiàn)層(UI)、業(yè)務(wù)邏輯層(BLL)、數(shù)據(jù)訪問(wèn)層(DAL)。區(qū)分層次的?的即為了“?內(nèi)聚,低耦合”的思想。
    1、表現(xiàn)層(UI):通俗講就是展現(xiàn)給?戶的界?,即?戶在使??個(gè)系統(tǒng)的時(shí)候他的所?所得。
    jsp/html
    2、業(yè)務(wù)邏輯層(BLL):針對(duì)具體問(wèn)題的操作,也可以說(shuō)是對(duì)數(shù)據(jù)層的操作,對(duì)數(shù)據(jù)業(yè)務(wù)邏輯處理。
    servlet,service
    3、數(shù)據(jù)訪問(wèn)層(DAL):該層所做事務(wù)直接操作數(shù)據(jù)庫(kù),針對(duì)數(shù)據(jù)的增添、刪除、修改、更新、查找
    等。dao
    表現(xiàn)層實(shí)現(xiàn)的代表作品是Struts,springmvc框架,
    業(yè)務(wù)層實(shí)現(xiàn)的代表作品是Spring,
    持久層實(shí)現(xiàn)的代表作品是Hibernate,mybatis。
    層就相當(dāng)于?個(gè)?盒?,我們不?知道它內(nèi)部怎么實(shí)現(xiàn),只需要知道如何去調(diào)?它就?了。每層只與上下相鄰的兩層打交道。當(dāng)?層內(nèi)部由于技術(shù)變遷發(fā)?變化時(shí),只要接?不變,其他層不?做任何改變。分層之后靈活性提?,也便于團(tuán)隊(duì)分?開(kāi)發(fā)。

    3.三層架構(gòu)和MVC的區(qū)別與聯(lián)系

    MVC可以是三層中的?個(gè)表現(xiàn)層框架,屬于表現(xiàn)層。三層和mvc可以共存。
    三層是基于業(yè)務(wù)邏輯來(lái)分的,?MVC是基于??來(lái)分的。
    MVC主要?于表現(xiàn)層,3層主要?于體系架構(gòu),3層?般是表現(xiàn)層、中間層、數(shù)據(jù)層,其中表現(xiàn)層?可以分成M、V、C,(Model View Controller)模型-視圖-控制器
    MVC是表現(xiàn)模式(Presentation Pattern)
    三層架構(gòu)是典型的架構(gòu)模式(Architecture Pattern)
    三層架構(gòu)的分層模式是典型的上下關(guān)系,上層依賴于下層。但MVC作為表現(xiàn)模式是不存在上下關(guān)系的,?是相互協(xié)作關(guān)系。即使將MVC當(dāng)作架構(gòu)模式,也不是分層模式。MVC和三層架構(gòu)基本沒(méi)有可?性,是應(yīng)?于不同領(lǐng)域的技術(shù)。

    十三、Ajax

    1. 概念: ASynchronous JavaScript And XML 異步的JavaScript 和 XML
    Ajax 是一種在無(wú)需重新加載整個(gè)網(wǎng)頁(yè)的情況下,能夠更新部分網(wǎng)頁(yè)的技術(shù)。
    通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,Ajax 可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。
    傳統(tǒng)的網(wǎng)頁(yè)(不使用 Ajax)如果需要更新內(nèi)容,必須重載整個(gè)網(wǎng)頁(yè)頁(yè)面。
    功能:提升用戶的體驗(yàn)

    異步和同步:客戶端和服務(wù)器端相互通信的基礎(chǔ)上
    * 同步: 客戶端必須等待服務(wù)器端的響應(yīng)。在等待的期間客戶端不能做其他操作。
    * 異步:客戶端不需要等待服務(wù)器端的響應(yīng)。在服務(wù)器處理請(qǐng)求的過(guò)程中,客戶端可以進(jìn)行其他的操作。
    * 瀏覽器的普通交互?式(同步)

    2.工作原理:
    1.客戶端瀏覽器發(fā)送JS請(qǐng)求Ajax引擎。
    2.Ajax將JS請(qǐng)求轉(zhuǎn)換成HTTP請(qǐng)求。
    3.服務(wù)器對(duì)接收到的數(shù)據(jù)進(jìn)行處理。
    4.服務(wù)器返回XML、JSON或文本文檔類(lèi)型的數(shù)據(jù)給Ajax引擎。
    5.AJax引擎接收服務(wù)器返回的數(shù)據(jù)進(jìn)行渲染。

    3. 實(shí)現(xiàn)方式:
    (1)原生的JS實(shí)現(xiàn)方式(了解)

    AJAX 的核?是 XMLHttpRequest 對(duì)象。
    不同的瀏覽器創(chuàng)建 XMLHttpRequest 對(duì)象的?法是有差異的。
    IE 6及以下瀏覽器使? ActiveXObject,?其他的瀏覽器使?名為 XMLHttpRequest 的 JavaScript 內(nèi)建對(duì)象

    //1.創(chuàng)建核心對(duì)象var xmlhttp;if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safarixmlhttp=new XMLHttpRequest();}else{// code for IE6, IE5xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}//2. 建立連接/*參數(shù):1. 請(qǐng)求方式:GET、POST* get方式,請(qǐng)求參數(shù)在URL后邊拼接。send方法為空參* post方式,請(qǐng)求參數(shù)在send方法中定義2. 請(qǐng)求的URL:3. 同步或異步請(qǐng)求:true(異步)或 false(同步)*/xmlhttp.open("GET","ajaxServlet?username=tom",true);//3.發(fā)送請(qǐng)求xmlhttp.send();//4.接受并處理來(lái)自服務(wù)器的響應(yīng)結(jié)果//獲取方式 :xmlhttp.responseText//什么時(shí)候獲取?當(dāng)服務(wù)器響應(yīng)成功后再獲取//當(dāng)xmlhttp對(duì)象的就緒狀態(tài)改變時(shí),觸發(fā)事件onreadystatechange。xmlhttp.onreadystatechange=function(){//判斷readyState就緒狀態(tài)是否為4,判斷status響應(yīng)狀態(tài)碼是否為200if (xmlhttp.readyState==4 && xmlhttp.status==200){//獲取服務(wù)器的響應(yīng)結(jié)果var responseText = xmlhttp.responseText;alert(responseText);}}
    • XMLHttpRequest常?屬性
      • onreadystatechange 屬性
        onreadystatechange 屬性存有處理服務(wù)器響應(yīng)的函數(shù)。
      xmlHttp.onreadystatechange = function() { }
      • readyState 屬性
        readyState 屬性存有服務(wù)器響應(yīng)的狀態(tài)信息。每當(dāng) readyState 改變時(shí),onreadystatechange 函數(shù)就會(huì)
        被執(zhí)?。
        readyState 屬性可能的值:
      • responseText 屬性
        可以通過(guò) responseText 屬性來(lái)取回由服務(wù)器返回的數(shù)據(jù)。

    AJAX狀態(tài)碼說(shuō)明
    1xx:請(qǐng)求收到,繼續(xù)處理
    2xx:操作成功收到,分析、接受
    3xx:完成此請(qǐng)求必須進(jìn)?步處理
    4xx:請(qǐng)求包含?個(gè)錯(cuò)誤語(yǔ)法或不能完成
    5xx:服務(wù)器執(zhí)??個(gè) 完全有效請(qǐng)求 失敗
    再具體就如下:
    100——客戶必須繼續(xù)發(fā)出請(qǐng)求
    101——客戶要求服務(wù)器根據(jù)請(qǐng)求轉(zhuǎn)換HTTP協(xié)議版本
    200——交易成功
    201——提示知道新?件的URL
    202——接受和處理、但處理未完成
    203——返回信息不確定或不完整
    204——請(qǐng)求收到,但返回信息為空
    205——服務(wù)器完成了請(qǐng)求,?戶代理必須復(fù)位當(dāng)前已經(jīng)瀏覽過(guò)的?件
    206——服務(wù)器已經(jīng)完成了部分?戶的GET請(qǐng)求
    300——請(qǐng)求的資源可在多處得到
    301——?jiǎng)h除請(qǐng)求數(shù)據(jù)
    302——在其他地址發(fā)現(xiàn)了請(qǐng)求數(shù)據(jù)
    303——建議客戶訪問(wèn)其他URL或訪問(wèn)?式
    304——客戶端已經(jīng)執(zhí)?了GET,但?件未變化
    305——請(qǐng)求的資源必須從服務(wù)器指定的地址得到
    306——前?版本HTTP中使?的代碼,現(xiàn)?版本中不再使?
    307——申明請(qǐng)求的資源臨時(shí)性刪除
    400——錯(cuò)誤請(qǐng)求,如語(yǔ)法錯(cuò)誤
    401——請(qǐng)求授權(quán)失敗
    402——保留有效ChargeTo頭響應(yīng)
    403——請(qǐng)求不允許
    404——沒(méi)有發(fā)現(xiàn)?件、查詢或URl
    405——?戶在Request-Line字段定義的?法不允許
    406——根據(jù)?戶發(fā)送的Accept拖,請(qǐng)求資源不可訪問(wèn)
    407——類(lèi)似401,?戶必須?先在代理服務(wù)器上得到授權(quán)
    408——客戶端沒(méi)有在?戶指定的餓時(shí)間內(nèi)完成請(qǐng)求
    409——對(duì)當(dāng)前資源狀態(tài),請(qǐng)求不能完成
    410——服務(wù)器上不再有此資源且?進(jìn)?步的參考地址
    411——服務(wù)器拒絕?戶定義的Content-Length屬性請(qǐng)求
    412——?個(gè)或多個(gè)請(qǐng)求頭字段在當(dāng)前請(qǐng)求中錯(cuò)誤
    413——請(qǐng)求的資源?于服務(wù)器允許的??
    414——請(qǐng)求的資源URL?于服務(wù)器允許的?度
    415——請(qǐng)求資源不?持請(qǐng)求項(xiàng)?格式
    416——請(qǐng)求中包含Range請(qǐng)求頭字段,在當(dāng)前請(qǐng)求資源范圍內(nèi)沒(méi)有range指示值,請(qǐng)求也不包含IfRange請(qǐng)求頭字段
    417——服務(wù)器不滿?請(qǐng)求Expect頭字段指定的期望值,如果是代理服務(wù)器,可能是下?級(jí)服務(wù)器不能
    滿?請(qǐng)求
    500——服務(wù)器產(chǎn)?內(nèi)部錯(cuò)誤
    501——服務(wù)器不?持請(qǐng)求的函數(shù)
    502——服務(wù)器暫時(shí)不可?,有時(shí)是為了防?發(fā)?系統(tǒng)過(guò)載
    503——服務(wù)器過(guò)載或暫停維修
    504——關(guān)?過(guò)載,服務(wù)器使?另?個(gè)關(guān)?或服務(wù)來(lái)響應(yīng)?戶,等待時(shí)間設(shè)定值較?
    505——服務(wù)器不?持或拒絕?請(qǐng)求頭中指定的HTTP版本

    (2).JQeury實(shí)現(xiàn)方式

    1. $.ajax()* 語(yǔ)法:$.ajax({鍵值對(duì)});//使用$.ajax()發(fā)送異步請(qǐng)求$.ajax({url:"ajaxServlet1111" , // 請(qǐng)求路徑type:"POST" , //請(qǐng)求方式//data: "username=jack&age=23",//請(qǐng)求參數(shù)data:{"username":"jack","age":23},success:function (data) {alert(data);},//響應(yīng)成功后的回調(diào)函數(shù)error:function () {alert("出錯(cuò)啦...")},//表示如果請(qǐng)求響應(yīng)出現(xiàn)錯(cuò)誤,會(huì)執(zhí)行的回調(diào)函數(shù)dataType:"text"//設(shè)置接受到的響應(yīng)數(shù)據(jù)的格式(預(yù)期服務(wù)器返回的數(shù)據(jù)類(lèi)型)});2. $.get():發(fā)送get請(qǐng)求* 語(yǔ)法:$.get(url, [data], [callback], [type])* 參數(shù):* url:請(qǐng)求路徑* data:請(qǐng)求參數(shù)* callback:回調(diào)函數(shù)* type:響應(yīng)結(jié)果的類(lèi)型(預(yù)期服務(wù)器返回的數(shù)據(jù)類(lèi)型)3. $.post():發(fā)送post請(qǐng)求* 語(yǔ)法:$.post(url, [data], [callback], [type])* 參數(shù):* url:請(qǐng)求路徑* data:請(qǐng)求參數(shù)* callback:回調(diào)函數(shù)* type:響應(yīng)結(jié)果的類(lèi)型

    十四、JSON

    1. 概念: JavaScript Object Notation (JavaScript對(duì)象表示法)
    JSON (JavaScript Object Notation) 是?種輕量級(jí)的數(shù)據(jù)交換格式。 易于?閱讀和編寫(xiě)。同時(shí)也易于機(jī)器解析和?成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition -December 1999的?個(gè)?集。 JSON采?完全獨(dú)?于語(yǔ)?的?本格式,但是也使?了類(lèi)似于C語(yǔ)?家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)?。

    * json現(xiàn)在多用于存儲(chǔ)和交換文本信息的語(yǔ)法 * 進(jìn)行數(shù)據(jù)的傳輸 * JSON 比 XML 更小、更快,更易解析。

    1.jackson

  • 語(yǔ)法:

  • 基本規(guī)則
    • 數(shù)據(jù)在名稱(chēng)/值對(duì)中:json數(shù)據(jù)是由鍵值對(duì)構(gòu)成的
      • 鍵用引號(hào)(單雙都行)引起來(lái),也可以不使用引號(hào)
      • 值得取值類(lèi)型:
      • 數(shù)字(整數(shù)或浮點(diǎn)數(shù))
      • 字符串(在雙引號(hào)中)
      • 邏輯值(true 或 false)
      • 數(shù)組(在方括號(hào)中) {“persons”:[{},{}]}
      • 對(duì)象(在花括號(hào)中) {“address”:{“province”:“陜西”…}}
      • null
    • 數(shù)據(jù)由逗號(hào)分隔:多個(gè)鍵值對(duì)由逗號(hào)分隔
    • 花括號(hào)保存對(duì)象:使用{}定義json 格式
    • 方括號(hào)保存數(shù)組:[]
  • 獲取數(shù)據(jù):
  • json對(duì)象.鍵名

  • json對(duì)象[“鍵名”]

  • 數(shù)組對(duì)象[索引]

  • 遍歷
    //1.定義基本格式

    var person = {"name": "張三", age: 23, 'gender': true};var ps = [{"name": "張三", "age": 23, "gender": true},{"name": "李四", "age": 24, "gender": true},{"name": "王五", "age": 25, "gender": false}];//獲取person對(duì)象中所有的鍵和值//for in 循環(huán) /* for(var key in person){//這樣的方式獲取不行。因?yàn)橄喈?dāng)于 person."name"//alert(key + ":" + person.key);alert(key+":"+person[key]);}*///獲取ps中的所有值for (var i = 0; i < ps.length; i++) {var p = ps[i];for(var key in p){alert(key+":"+p[key]);}}
  • JSON數(shù)據(jù)和Java對(duì)象的相互轉(zhuǎn)換

    • JSON解析器:
      • 常見(jiàn)的解析器:Jsonlib,Gson,fastjson,jackson
  • JSON轉(zhuǎn)為Java對(duì)象(jackson)
  • 導(dǎo)入jackson的相關(guān)jar包

  • 創(chuàng)建Jackson核心對(duì)象 ObjectMapper

  • 調(diào)用ObjectMapper的相關(guān)方法進(jìn)行轉(zhuǎn)換

  • readValue(json字符串?dāng)?shù)據(jù),Class)
  • Java對(duì)象轉(zhuǎn)換JSON
  • 使用步驟:
  • 導(dǎo)入jackson的相關(guān)jar包
  • 創(chuàng)建Jackson核心對(duì)象 ObjectMapper
  • 調(diào)用ObjectMapper的相關(guān)方法進(jìn)行轉(zhuǎn)換
  • 轉(zhuǎn)換方法:

    • writeValue(參數(shù)1,obj):
      參數(shù)1:
      File:將obj對(duì)象轉(zhuǎn)換為JSON字符串,并保存到指定的文件中
      Writer:將obj對(duì)象轉(zhuǎn)換為JSON字符串,并將json數(shù)據(jù)填充到字符輸出流中
      OutputStream:將obj對(duì)象轉(zhuǎn)換為JSON字符串,并將json數(shù)據(jù)填充到字節(jié)輸出流中
    • writeValueAsString(obj):將對(duì)象轉(zhuǎn)為json字符串
  • 注解:

  • @JsonIgnore:被此注解標(biāo)注的屬性將不再被轉(zhuǎn)為JSON格式
  • @JsonFormat:屬性值的格式化
    • @JsonFormat(pattern = “yyyy-MM-dd”) 如日期對(duì)象格式化,pattern用法與SimpleDateFormat類(lèi)似
  • 復(fù)雜java對(duì)象轉(zhuǎn)換

  • List:數(shù)組 存儲(chǔ)的為對(duì)象則為對(duì)象數(shù)組 [{“key”:“value”},{“key”:“value”},{“key”:“value”}]
  • Map:與對(duì)象格式一致
  • 案例:
    Person類(lèi):

    public class Person {private String name;private int age ;private String gender;//@JsonIgnore // 忽略該屬性@JsonFormat(pattern = "yyyy-MM-dd")private Date birthday;public Person(String name, int age, String gender) {this.name = name;this.age = age;this.gender = gender;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +'}';} }

    測(cè)試類(lèi)

    public class JacksonTest {//Java對(duì)象轉(zhuǎn)為JSON字符串@Testpublic void test1() throws Exception {//1.創(chuàng)建Person對(duì)象Person p = new Person();p.setName("張三");p.setAge(23);p.setGender("男");//2.創(chuàng)建Jackson的核心對(duì)象 ObjectMapperObjectMapper mapper = new ObjectMapper();//3.轉(zhuǎn)換/*轉(zhuǎn)換方法:writeValue(參數(shù)1,obj):參數(shù)1:File:將obj對(duì)象轉(zhuǎn)換為JSON字符串,并保存到指定的文件中Writer:將obj對(duì)象轉(zhuǎn)換為JSON字符串,并將json數(shù)據(jù)填充到字符輸出流中OutputStream:將obj對(duì)象轉(zhuǎn)換為JSON字符串,并將json數(shù)據(jù)填充到字節(jié)輸出流中writeValueAsString(obj):將對(duì)象轉(zhuǎn)為json字符串*/String json = mapper.writeValueAsString(p);//{"name":"張三","age":23,"gender":"男"}//System.out.println(json);//{"name":"張三","age":23,"gender":"男"}//writeValue,將數(shù)據(jù)寫(xiě)到d://a.txt文件中//mapper.writeValue(new File("d://a.txt"),p);//writeValue.將數(shù)據(jù)關(guān)聯(lián)到Writer中mapper.writeValue(new FileWriter("d://b.txt"),p);}@Testpublic void test2() throws Exception {//1.創(chuàng)建Person對(duì)象Person p = new Person();p.setName("張三");p.setAge(23);p.setGender("男");p.setBirthday(new Date());//2.轉(zhuǎn)換 Object -> JSONObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(p);System.out.println(json);//{"name":"張三","age":23,"gender":"男","birthday":1530958029263}//{"name":"張三","age":23,"gender":"男","birthday":"2018-07-07"}}// List集合 - > JSON Set集合類(lèi)似@Testpublic void test3() throws Exception {//1.創(chuàng)建Person對(duì)象Person p = new Person();p.setName("張三");p.setAge(23);p.setGender("男");p.setBirthday(new Date());Person p1 = new Person();p1.setName("張三");p1.setAge(23);p1.setGender("男");p1.setBirthday(new Date());Person p2 = new Person();p2.setName("張三");p2.setAge(23);p2.setGender("男");p2.setBirthday(new Date());//創(chuàng)建List集合List<Person> ps = new ArrayList<Person>();ps.add(p);ps.add(p1);ps.add(p2);//2.轉(zhuǎn)換ObjectMapper mapper = new ObjectMapper();// List -> JSONString json = mapper.writeValueAsString(ps);// [{},{},{}]//[{"name":"張三","age":23,"gender":"男","birthday":"2018-07-07"},{"name":"張三","age":23,"gender":"男","birthday":"2018-07-07"},{"name":"張三","age":23,"gender":"男","birthday":"2018-07-07"}]System.out.println(json);// JSON -> ListList<Person> list = mapper.readValue(json, new TypeReference<List<Person>>() {}); // class java.util.ArrayListfor (Person pp : list) {System.out.println(pp);}}//Map集合 -> JSON@Testpublic void test4() throws Exception {//1.創(chuàng)建map對(duì)象Map<String,Object> map = new HashMap<String,Object>();map.put("name","張三");map.put("age",23);map.put("gender","男");//2.轉(zhuǎn)換 map -> JSONObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(map);//{"name":"張三","age":23,"gender":"男"}System.out.println(json);//{"gender":"男","name":"張三","age":23}// JSON -> Map//方式一: //class java.util.LinkedHashMapMap<String,Object> hm = mapper.readValue(json, Map.class);//方式二: //class java.util.LinkedHashMap//Map<String, Object> lhm= mapper.readValue(json, new TypeReference<Map<String, Object>>() {}); Set<String> set = hm.keySet();for (String str : set) {System.out.println(str + ":" + hm.get(str));}}//演示 JSON字符串轉(zhuǎn)為Java對(duì)象@Testpublic void test5() throws Exception {//1.初始化JSON字符串String json = "{\"gender\":\"男\(zhòng)",\"name\":\"張三\",\"age\":23}";//2.創(chuàng)建ObjectMapper對(duì)象ObjectMapper mapper = new ObjectMapper();//3.轉(zhuǎn)換為Java對(duì)象 Person對(duì)象Person person = mapper.readValue(json, Person.class);System.out.println(person);}/*** 將數(shù)組轉(zhuǎn)換成json字符串* [{"name":"張三","age":23,"gender":"男"},{"name":"李四","age":24,"gender":"女"},{"name":"王五","age":25,"gender":"男"}]* @throws Exception*/@Testpublic void test6() throws Exception {Person p1 = new Person("張三", 23, "男");Person p2 = new Person("李四", 24, "女");Person p3 = new Person("王五", 25, "男");Person[] persons = {p1, p2, p3};ObjectMapper mapper = new ObjectMapper();// Array -> JSONString json= mapper.writeValueAsString(persons);System.out.println(json);// JSON ->ArrayPerson[] persons = mapper.readValue(json, Person[].class); // [Lcn.itcast.domain.Person;@43195e57String content = "";for (Person person : persons) {content+=person + " ";}System.out.println(content);}}

    2.Jsonlib

  • JSON轉(zhuǎn)為Java對(duì)象
    1. 導(dǎo)入Jsonlib的相關(guān)jar包

    java對(duì)象和json之間的轉(zhuǎn)換
    《1》單個(gè)對(duì)象或map集合
    java->json:

    Users user2=new Users();
    user2.setUsername(“李四”);
    user2.setPassword(“abc”);
    user2.setAge(20);
    JSONObject obj=JSONObject.fromObject(user);//obj就是json格式的

    json->java:

    String str="{‘username’:‘李四’,‘password’:‘a(chǎn)dmin’,‘a(chǎn)ge’:19}";
    JSONObject json=JSONObject.fromObject(str);
    Users user=(Users)JSONObject.toBean(json,Users.class);

  • 《2》對(duì)象集合和json的轉(zhuǎn)換
    java集合->json數(shù)組:

    List list=new ArrayList();
    list.add(“dd”);
    list.add(“aa”);
    JSONArray obj=JSONArray.fromObject(list);//set也是這么轉(zhuǎn)

    json數(shù)組->java集合:
    ?式1:
    String str2="[{‘a(chǎn)ge’:20,‘password’:‘a(chǎn)bc’,‘username’:‘李四’},
    {‘a(chǎn)ge’:10,‘password’:‘a(chǎn)db’,‘username’:‘張三’}]";
    JSONArray json2=JSONArray.fromObject(str2);
    Object[] obj=(Object[])JSONArray.toArray(json2,Users.class);
    ?式2:
    String str3="[{‘a(chǎn)ge’:20,‘password’:‘a(chǎn)bc’,‘username’:‘李四’},
    {‘a(chǎn)ge’:10,‘password’:‘a(chǎn)db’,‘username’:‘展示?’}]";
    JSONArray json3=JSONArray.fromObject(str3);
    //默認(rèn)轉(zhuǎn)換成ArrayList
    List list=(List) JSONArray.toCollection(json3,Users.class);

    感謝您能閱讀至此!!respect!!!!

    總結(jié)

    以上是生活随笔為你收集整理的那些年关于JavaWeb的点点滴滴,你想看的这里全都有噢~的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

    国产福利专区 | 日韩电影精品 | 久久久2o19精品 | 精品欧美乱码久久久久久 | 日韩精品视频久久 | 婷婷色网站| 夜夜夜夜爽 | 中文字幕在线播出 | 久久99精品久久久久久久久久久久 | 久久久www成人免费毛片 | 伊人色综合网 | 国产日韩av在线 | 午夜私人影院 | 91视频啪 | 国产一区二区在线观看视频 | 久久午夜影视 | 久久99精品国产 | 中文理论片 | 欧美国产视频在线 | 亚洲视频在线观看免费 | 午夜精品福利一区二区 | 欧美日本啪啪无遮挡网站 | 九九热免费视频在线观看 | 亚洲日本va在线观看 | 国产高清视频在线播放一区 | 亚洲国产经典视频 | 探花视频在线版播放免费观看 | 五月婷婷亚洲 | 免费在线激情电影 | 天天干天天拍 | 精品国产伦一区二区三区 | 日韩精品久久久久久久电影99爱 | 国产无遮挡又黄又爽馒头漫画 | 免费成人在线电影 | 国产亚洲无 | 欧美性色黄 | 国语自产偷拍精品视频偷 | 视频一区二区国产 | 精品欧美在线视频 | 亚洲 在线 | 久久久精品欧美一区二区免费 | 国产精品成人自产拍在线观看 | 黄色看片| 色婷婷国产精品 | 久久99久久99 | 亚洲欧洲视频 | 日韩成片 | 日韩国产精品一区 | se婷婷| 国产精品自产拍在线观看蜜 | 国产一级片不卡 | 黄色在线小网站 | 黄色三级网站在线观看 | 正在播放五月婷婷狠狠干 | 深爱婷婷网| 日韩电影在线看 | 国产一区二区久久久 | 美国人与动物xxxx | 久久网站最新地址 | 国内精品久久久久国产 | 狠狠伊人 | 婷婷视频在线播放 | 99精品国产99久久久久久97 | 精品女同一区二区三区在线观看 | 成人亚洲综合 | 麻豆精品视频在线观看免费 | 亚州人成在线播放 | 六月丁香久久 | av成人在线网站 | 五月天高清欧美mv | 在线观看中文字幕2021 | 黄色片网站 | 天堂网在线视频 | 亚洲最新视频在线播放 | 亚洲精品国产精品99久久 | 99在线视频免费观看 | 日韩二区三区在线 | 国产一区二区电影在线观看 | 久久视频免费在线观看 | 国产中文欧美日韩在线 | 日韩国产精品久久久久久亚洲 | avhd高清在线谜片 | 丁香花在线观看视频在线 | 波多野结衣一区二区三区中文字幕 | 91av中文字幕 | 人人爽人人片 | 91视频在线观看大全 | 黄色软件视频大全免费下载 | 人人草人人草 | 免费在线一区二区三区 | 亚洲成a人片在线观看网站口工 | 国产做aⅴ在线视频播放 | 久久激情精品 | 亚洲久草在线 | 国产黄色片在线 | 午夜久久久久久久久 | 国产欧美综合在线观看 | 亚洲草视频 | 狠狠狠色丁香综合久久天下网 | 97在线超碰| 天天操天天操天天操 | 超碰在线公开免费 | 日日夜夜精品免费视频 | 免费观看的av| 久久久亚洲网站 | 99这里有精品 | 亚州精品天堂中文字幕 | 97香蕉超级碰碰久久免费软件 | 国产精品日韩欧美 | 99欧美视频 | 久久首页 | 色香天天| 久草精品视频在线看网站免费 | 日韩一级成人av | 黄色小网站免费看 | 欧美精品一区在线发布 | 91精品爽啪蜜夜国产在线播放 | 亚洲综合在线观看视频 | 国产福利91精品一区 | 中文字幕在线视频一区二区三区 | 91激情视频在线播放 | 中文字幕人成不卡一区 | 亚洲精品在线播放视频 | 精品亚洲视频在线观看 | 精品国产一二区 | 91视频啪 | 深爱激情五月婷婷 | 亚洲日韩精品欧美一区二区 | 免费视频 你懂的 | av免费成人| 亚洲黄色在线免费观看 | 成人网在线免费视频 | 四虎精品成人免费网站 | 久久久精品在线观看 | 久久久久久高潮国产精品视 | 91久久国产露脸精品国产闺蜜 | 免费看的国产视频网站 | 亚洲视频在线视频 | 欧美不卡在线 | 婷婷在线五月 | 久久午夜网 | 久久久久久久久久久高潮一区二区 | 久久久婷 | 亚洲国产中文字幕在线视频综合 | 久操视频在线播放 | 久久精品小视频 | 久久成人精品电影 | 92中文资源在线 | 91av视频在线播放 | 天堂网一区 | 一区二区 不卡 | 亚洲视频在线观看 | 国产手机在线视频 | 999精品 | 欧美精品久久99 | 久久久久久久久爱 | 久久 地址| 色综合久久久久综合 | 成年人免费观看在线视频 | 国产精品91一区 | 成人网444ppp | 99久久精品国产一区二区三区 | 国产在线美女 | 国产精品美 | 超碰97中文 | 久久综合久久伊人 | 日韩国产精品一区 | 色综合天天干 | 国产日韩欧美中文 | 久久久三级视频 | 综合国产在线 | 国产精品国产三级国产不产一地 | 天天做日日做天天爽视频免费 | 国产一线二线三线在线观看 | 婷婷五月情 | 国产在线观看国语版免费 | 四虎在线永久免费观看 | 手机在线视频福利 | 中文字幕在线观看免费观看 | 精品福利av | 亚洲黄色激情小说 | 日韩精品视频在线观看网址 | 91麻豆精品国产91久久久久久 | 制服丝袜欧美 | 五月天久久久久久 | 国产精品孕妇 | 国产xx在线| 亚洲欧美国产精品久久久久 | 国产99一区 | www欧美xxxx | 三级av在线播放 | 91高清视频免费 | 亚洲精品视频在线免费 | 国产区精品在线 | 国产一区在线视频播放 | 婷婷亚洲五月 | 日韩激情片在线观看 | www.色在线| 夜添久久精品亚洲国产精品 | 国产成人黄色在线 | 天天操网 | 国产在线播放不卡 | 成人免费亚洲 | 国产精品在线看 | 色99久久| 久久免费国产精品 | 国产一在线精品一区在线观看 | 一本一本久久a久久精品牛牛影视 | 欧美老女人xx| 成人欧美一区二区三区黑人麻豆 | 97在线观看免费 | 国产精品成久久久久三级 | 久久精品网址 | 最新精品视频在线 | 亚洲美女视频在线观看 | 国产婷婷一区二区 | 日韩欧美一区二区三区黑寡妇 | 久久久国产精品网站 | 国产xvideos免费视频播放 | 亚洲天天做 | 日韩在线视频免费看 | 高清在线一区 | 成人三级av| www.99热精品| 日韩在线观看一区二区 | 狠狠色丁香婷婷综合欧美 | 日韩精品一区二区三区中文字幕 | 日本视频久久久 | 美女中文字幕 | 天天综合天天做 | 久久国产视屏 | 日本久久久久久科技有限公司 | 尤物九九久久国产精品的分类 | 久草网站在线观看 | 在线观看一级视频 | 在线观看国产日韩欧美 | 日本中文字幕免费观看 | 亚洲精品国产第一综合99久久 | 五月在线视频 | 国产毛片在线 | 91热爆视频| 日本黄色免费在线观看 | 男女免费av| 在线观看日韩国产 | 国产精品igao视频网网址 | 日日夜夜免费精品视频 | 欧美色插| 亚洲国产精品成人va在线观看 | 九九免费在线观看 | 国产在线播放一区二区三区 | 日韩va欧美va亚洲va久久 | 国产精品久久久久久婷婷天堂 | 91热在线 | 欧美一级片在线播放 | 亚洲一区动漫 | www.在线观看av| 欧美一级片在线播放 | 久久久激情网 | 午夜视频免费 | 精品一区二区在线免费观看 | 97国产精品亚洲精品 | 亚洲精品乱码久久久久久9色 | 狠狠操夜夜| 久久精品美女视频 | 日韩视频免费在线观看 | 久久精品国产久精国产 | 久草视频播放 | 伊人久久影视 | 丰满少妇对白在线偷拍 | 欧美性色xo影院 | 久亚洲精品 | 国产视频精品视频 | 丁香综合 | 永久精品视频 | 天天色天天操天天爽 | 夜夜婷婷 | 中文字幕色站 | 国产精品一区一区三区 | 国产精品理论片在线播放 | 美女在线免费观看视频 | 伊人开心激情 | 精品国产乱码久久久久久浪潮 | 成人福利在线 | 久久久久久久久久久免费av | 中文字幕一区二区在线观看 | 久久欧美视频 | 天天爱综合 | 一级黄色在线免费观看 | 毛片网站在线看 | 国产黄a三级三级 | 亚洲欧美日韩在线一区二区 | 在线看一区二区 | 国产视频在线观看一区 | a视频在线观看 | 国产一级在线看 | 99性视频 | 日本性动态图 | 91中文字幕永久在线 | 国产麻豆精品久久一二三 | av天天在线观看 | 日韩电影一区二区三区 | 五月婷婷激情六月 | 麻豆国产网站入口 | 在线观av| 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 亚洲精品乱码久久久久久高潮 | 久久精品视频在线观看 | 中文字幕 二区 | 亚洲一区二区三区91 | 91精品久久久久久综合乱菊 | 日韩视| 成人国产综合 | 91在线视频观看免费 | 毛片激情永久免费 | 国产高清区 | 亚洲影视资源 | 国产一二三区av | 亚洲精品一区二区三区新线路 | 国产一级电影 | 欧美国产日韩在线观看 | 狠狠色丁香婷婷综合橹88 | 亚洲一区二区天堂 | av 在线观看 | 毛片基地黄久久久久久天堂 | 日本一区二区三区免费观看 | 精品久久久久久久久久久院品网 | 成年人免费在线播放 | 欧美精品国产综合久久 | 国产永久网站 | 色网址99| av在线直接看 | 午夜久久久久久久 | 黄色一级大片在线观看 | 中文字幕视频观看 | 国产男男gay做爰 | aaa免费毛片 | 国产高清小视频 | 久久8| 欧美成年人在线观看 | 美女精品在线 | www.久草视频 | 国产一区二区视频在线播放 | 久久草精品 | av中文字幕在线看 | 日韩黄色在线电影 | 国产精品久久艹 | 9幺看片| 婷婷综合久久 | 狠狠色丁香九九婷婷综合五月 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 91人人爽久久涩噜噜噜 | 久久久久久久18 | 亚洲综合色站 | 五月婷婷狠狠 | 日本韩国精品在线 | 久久精品视频在线观看免费 | 久久久久国产精品免费免费搜索 | 中文字幕免费高清 | 日韩av图片 | 欧美日韩在线视频一区二区 | 日韩激情视频在线观看 | 欧美精品一区二区免费 | 国产精品高清免费在线观看 | 久久免费成人精品视频 | 欧美怡红院视频 | 99久久精品无免国产免费 | 丝袜少妇在线 | 亚洲精品美女视频 | 99精品免费久久久久久久久日本 | 91天堂在线观看 | 久久精品5 | 色人久久 | 婷婷日日 | 久久人人爽爽人人爽人人片av | 嫩草伊人久久精品少妇av | 久久8精品 | 日狠狠 | 国产精品麻豆三级一区视频 | 一区二区三区视频在线 | 免费在线国产视频 | 日韩欧美国产激情在线播放 | 亚洲国产精品推荐 | 91精品国产乱码在线观看 | 制服丝袜天堂 | 蜜臀av网址 | 特级西西444www大精品视频免费看 | 亚洲成a人片在线观看网站口工 | 亚洲国产资源 | 亚洲手机av | 99久久婷婷国产综合精品 | 国产这里只有精品 | 三级视频国产 | 成人a视频在线观看 | 日本性视频 | 欧美精品久久人人躁人人爽 | 国产精品一区二区av影院萌芽 | 免费观看www7722午夜电影 | 欧美精品在线观看免费 | 国产精品视频永久免费播放 | 精品在线播放视频 | 久久久久电影网站 | 亚洲成人精品av | 精品国产乱码久久久久久天美 | 国产精品毛片一区二区在线看 | 久久久香蕉视频 | 天天综合操 | 久久精品美女 | 国产精品毛片一区二区在线 | 成人97视频| 欧美在线观看视频一区二区三区 | 天天se天天cao天天干 | 91av免费观看 | 日本不卡一区二区 | 久久曰视频 | 国产精品白浆视频 | 黄色在线观看www | 91在线播放综合 | 国产美女精品视频免费观看 | 五月婷婷六月丁香 | 久久成年人网站 | av观看在线观看 | 狠狠干夜夜 | 国产精品一区二 | 国产a级免费 | 久久只精品99品免费久23小说 | 国产亚洲免费的视频看 | 97超碰福利久久精品 | 国内精品久久久久久中文字幕 | 精品毛片在线 | 在线观看亚洲视频 | 国产在线观看xxx | 日韩在线视频线视频免费网站 | 日韩高清激情 | 久久中文字幕导航 | 亚洲精品免费在线播放 | 欧美大片www | 777视频在线观看 | 99久久影视 | 亚洲视频大全 | 久久精品亚洲综合专区 | 精品视频在线看 | 国产成人精品久久二区二区 | 亚洲精品永久免费视频 | 免费看黄在线看 | 97在线观看免费视频 | 特级大胆西西4444www | 久久久久久久久影院 | 麻豆成人小视频 | 98涩涩国产露脸精品国产网 | 日本在线观看视频一区 | 久久久91精品国产一区二区精品 | 五月婷婷久 | 国产亚洲精品久久久久久 | 成人国产精品电影 | 日韩在线视频观看免费 | 久草网视频在线观看 | av中文字幕网 | 五月天婷亚洲天综合网精品偷 | 国产一级片观看 | 免费能看的黄色片 | 黄色软件在线看 | 色综合天| 日韩精品一区二区三区电影 | 97福利在线观看 | 亚洲精品久久在线 | 午夜视频福利 | 国产精品视频永久免费播放 | 日韩高清一二三区 | 日韩精品免费在线 | 国产精品久久久久久久久久尿 | 精品99在线 | 视频在线观看入口黄最新永久免费国产 | 91精品免费视频 | 国产中文字幕一区二区三区 | 99在线精品视频在线观看 | 日韩精品欧美精品 | 国产在线 一区二区三区 | 亚洲综合一区二区精品导航 | 日韩无在线 | 国产91免费在线观看 | 超碰99在线 | 婷婷在线精品视频 | 91手机在线看片 | 91在线播 | 色婷婷婷 | 亚洲影音先锋 | 日韩在线电影一区 | 91麻豆精品国产91久久久久久 | 99在线精品视频观看 | 国产日韩精品一区二区 | 婷婷九九| 丁香午夜| 久久国产精品一区二区三区 | 天堂网中文在线 | 麻豆视传媒官网免费观看 | 国产在线黄色 | 在线看片视频 | 午夜视频在线观看一区二区 | 69久久久 | www.com黄色 | 最新av中文字幕 | 五月婷婷另类国产 | 亚洲一级片 | 成人在线观看资源 | 午夜精品一二三区 | 在线v片免费观看视频 | 日韩精品中文字幕在线 | 人人干干人人 | 欧美激情亚洲综合 | 国产精品美 | 亚洲精品国偷拍自产在线观看蜜桃 | 一区二区三区四区不卡 | 国语黄色片 | 久久高清免费观看 | 欧美国产精品一区二区 | 怡红院成人在线 | 最新日韩精品 | 日韩欧美视频一区二区 | 久久免费毛片视频 | 色wwwww| 国内久久精品视频 | www视频免费在线观看 | 9热精品 | 99re8这里有精品热视频免费 | 日日夜色 | 81精品国产乱码久久久久久 | 黄色精品网站 | 亚洲综合视频在线 | 亚洲久草在线 | 99久久这里只有精品 | 国产福利精品一区二区 | 啪啪动态视频 | 五月婷婷综合激情 | 亚洲无毛专区 | 中国美女一级看片 | 亚洲高清av | 人人爽人人爽人人片 | 久久国产女人 | 欧美不卡视频在线 | 永久免费视频国产 | 免费av高清| 激情网在线视频 | 久久成人精品视频 | 一区视频在线 | 国产亚洲视频中文字幕视频 | 国产精品18久久久久vr手机版特色 | 狠狠夜夜 | 国内精品久久久久影院日本资源 | 手机成人av | 人人干人人超 | 日韩电影中文字幕在线观看 | 欧美精品久久天天躁 | 中日韩免费视频 | 日韩精品 在线视频 | 国产精品入口久久 | 在线观看一级 | 成人av片免费看 | 欧美一级高清片 | 久久久激情视频 | 伊人狠狠色丁香婷婷综合 | 日韩激情片在线观看 | 久久亚洲福利视频 | 国产中的精品av小宝探花 | 97国产精品视频 | 尤物九九久久国产精品的分类 | 91在线91 | 国产精品永久久久久久久www | 国产免费观看高清完整版 | 91av美女| 国产女人免费看a级丨片 | 丝袜美腿av | 亚洲四虎在线 | 国产精品国内免费一区二区三区 | 国产理伦在线 | 欧美一二三区播放 | 久久免费视频在线观看6 | 亚洲精品一区二区三区在线观看 | 久久高清片| 日韩成人精品一区二区 | 91在线操| 久久视频在线看 | 色综合久久久久综合99 | 国产中的精品av小宝探花 | 一区二区三区四区五区在线视频 | 日韩免费一级a毛片在线播放一级 | 国产成人精品久久二区二区 | 精品免费久久久久 | 国产aa免费视频 | 日韩高清免费无专码区 | 精品福利网 | 欧美a视频在线观看 | 九色91福利| 欧美孕妇视频 | 国产综合在线观看视频 | 九九免费观看全部免费视频 | 国产亚洲精品v | 成人久久综合 | 欧美色综合天天久久综合精品 | 久久精品一区二区国产 | 狠狠搞,com | 亚洲一区久久 | 丁香激情综合国产 | 黄色成人毛片 | 久艹视频在线免费观看 | 91精品日韩 | 在线视频区 | 日韩在线短视频 | 97超碰在线久草超碰在线观看 | 人人搞人人干 | 欧美一区二区三区特黄 | av网站地址 | 午夜aaaa | 亚洲三级视频 | 永久精品视频 | 免费国产ww | 免费看的黄色小视频 | 黄色小网站在线 | 久久视频一区二区 | av免费网页 | 日韩午夜在线观看 | 免费v片 | 欧美乱熟臀69xxxxxx | 91色欧美 | 一级性视频 | 色婷婷电影| 国产精品久久久久一区二区三区共 | 久久99亚洲热视 | 视频成人免费 | 五月天婷婷视频 | 日日干美女 | 99产精品成人啪免费网站 | 俺要去色综合狠狠 | 黄色录像av | 国产人免费人成免费视频 | 99久久久国产精品免费99 | 成年美女黄网站色大片免费看 | 在线观看中文字幕2021 | 亚洲h在线播放在线观看h | 欧美另类美少妇69xxxx | 久久婷亚洲五月一区天天躁 | 97精品一区| 一本色道久久综合亚洲二区三区 | 亚洲理论片 | 久久久电影网站 | 亚洲日本在线一区 | 92精品国产成人观看免费 | 手机av在线免费观看 | 91在线免费观看网站 | 成年人黄色免费网站 | 久久久久久久久亚洲精品 | 午夜久久| 欧美精品乱码99久久影院 | 日韩激情片在线观看 | 美女黄色网在线播放 | 91视频啪 | 2019中文 | 久久久激情网 | 国产精品麻豆99久久久久久 | 欧美日韩不卡在线视频 | 日日麻批40分钟视频免费观看 | 日本视频久久久 | 欧美成天堂网地址 | 国产黄色电影 | 中文有码在线 | 超碰公开在线观看 | 亚洲国产精品传媒在线观看 | 天天操导航| 久草青青在线观看 | 日本女人的性生活视频 | 日日日视频 | 亚洲男人天堂2018 | 久久免费国产视频 | 日韩在线视频网站 | 精品一二三区 | 精品99久久久久久 | 免费99视频 | 亚洲aⅴ在线| 亚洲精品观看 | av成人在线电影 | a黄色一级片| 久精品视频免费观看2 | 18网站在线观看 | 国产精品毛片一区视频播不卡 | 777奇米四色 | 成人在线免费观看网站 | 久久国产精品电影 | 日韩精品第1页 | 99这里有精品 | av一本久道久久波多野结衣 | 国产成人精品久久久久 | 免费视频一区 | 国产午夜亚洲精品 | www178ccom视频在线 | 亚洲爱av | 九九精品久久久 | 久久黄网站 | 香蕉97视频观看在线观看 | 中文字幕在线看 | 精品视频在线免费 | 美女久久网站 | 国产福利91精品一区二区三区 | 激情综合五月婷婷 | 日韩精品视频久久 | 日韩精品免费一线在线观看 | 久草在线资源观看 | 日日操日日插 | 成人av电影免费在线播放 | 一级一片免费视频 | 人人玩人人爽 | 在线观看av不卡 | 亚洲伦理电影在线 | 日韩激情久久 | 久久国产精品区 | 亚洲精品在线观看av | 开心婷婷色 | 午夜色场 | 亚洲乱码久久 | 婷婷六月天在线 | 国产福利一区二区三区在线观看 | 亚洲小视频在线 | 国内精品久久久久影院一蜜桃 | 久草在线在线 | 久久精品老司机 | 日韩伦理片一区二区三区 | 国产精品一区二区你懂的 | 狠狠操天天操 | 国内外成人在线视频 | 91av成人| 久久激情小视频 | 在线观看你懂的网址 | 在线亚洲欧美视频 | 国产不卡一区二区视频 | 免费观看性生交 | 成人av中文字幕在线观看 | 国产精品精品 | 亚洲成人精品在线 | 成人av资源网站 | 99视频网址 | 午夜免费福利视频 | 在线电影a | 久久精品视频网 | 国产最新在线观看 | 99久久精品一区二区成人 | 天天操天天舔天天爽 | 日日摸日日添日日躁av | 日韩精品视频在线免费观看 | 亚洲精品大全 | 国产乱码精品一区二区蜜臀 | 久久视频在线观看中文字幕 | 黄色日视频 | 免费在线91| 久久男人免费视频 | 美国av片在线观看 | 午夜视频免费在线观看 | 韩国一区二区三区视频 | 97视频在线观看网址 | 久久久国产精品成人免费 | www.夜夜骑.com | 在线va视频 | 天天射天天色天天干 | 日b黄色片| 天天天色综合a | 99久久99久久精品国产片 | 国内久久视频 | 色综合久久久久综合 | 久久成人久久 | 又黄又刺激的视频 | 精品夜夜嗨av一区二区三区 | 久久精品中文字幕一区二区三区 | 亚洲 欧美 综合 在线 精品 | 韩国精品视频在线观看 | 久久久精品国产一区二区三区 | 婷婷色婷婷 | 亚洲天堂视频在线 | 欧美日韩天堂 | 黄色av电影在线观看 | 国产成人香蕉 | 色www精品视频在线观看 | 97看片| 午夜精品一区二区三区在线 | 粉嫩av一区二区三区四区五区 | 国产精品2区 | 免费a v网站 | 国产中文字幕视频在线 | 韩国精品视频在线观看 | 伊人日日干 | 久久久精品视频成人 | av激情五月 | 亚洲国产成人在线观看 | 九九九在线观看视频 | 国产伦理一区二区三区 | 日本中文字幕在线免费观看 | 免费在线观看亚洲视频 | 偷拍福利视频一区二区三区 | 激情久久伊人 | 九九综合久久 | 中文字幕国产精品 | 9色在线视频| 日韩av手机在线看 | av日韩国产 | 在线观看免费成人av | 国产亚洲人成网站在线观看 | 亚洲国内精品在线 | 成人在线免费视频观看 | 成 人 免费 黄 色 视频 | 99爱国产精品 | 国产精品综合久久久久 | 中文字幕在线观看资源 | 日本中文在线观看 | 国产精品99久久久久久有的能看 | av色图天堂网| 91九色精品女同系列 | 国产999精品视频 | 欧美一区二区在线刺激视频 | 国产高清视频色在线www | av在线短片 | 国产手机视频精品 | 99久久99久久 | 中文字幕电影高清在线观看 | 欧美日韩在线播放 | 91精品久久久久久久99蜜桃 | 亚洲成av人片| 国产日韩欧美在线免费观看 | 日韩高清一 | 夜夜夜夜操 | 久久这里只有精品首页 | 欧美日韩亚洲精品在线 | 中文字幕在线观看一区二区 | 懂色av一区二区三区蜜臀 | 在线播放日韩av | 天堂在线一区二区 | 日韩精品在线观看av | 免费亚洲婷婷 | 亚洲视频免费在线观看 | 免费国产视频 | 国产精品伦一区二区三区视频 | 久久少妇免费视频 | 天天综合久久 | 中文字幕第 | 亚洲欧美视频在线 | 亚洲五月六月 | 91热爆视频| 国内丰满少妇猛烈精品播放 | 欧美夫妻性生活电影 | 97电影院网 | 欧美91成人网 | 天天曰 | 五月婷婷丁香 | 日本黄色免费观看 | 91片黄在线观看动漫 | 久久电影网站中文字幕 | 国产精品久久久久免费观看 | 九九精品久久 | 在线观看亚洲精品 | 国产一区二区在线免费观看 | 亚洲欧洲精品一区二区精品久久久 | 在线激情影院一区 | 午夜精品久久久久 | 亚洲精品在线资源 | 国产精品美女久久久久久久久久久 | 中文在线a∨在线 | 国产精品入口a级 | 婷婷在线网 | a极黄色片 | 日韩电影一区二区在线 | 最近更新的中文字幕 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 天天操夜夜看 | 久久精品最新 | 国产黄网站在线观看 | 91中文字幕在线 | 国产最新在线 | 免费高清在线一区 | 国产精品美乳一区二区免费 | 免费成人在线视频网站 | 久人人| 主播av在线 | 黄色毛片在线 | 国产成人高清在线 | 国模一二三区 | 国产高清视频免费最新在线 | 国内99视频 | 午夜久操 | 色婷婷国产精品 | 亚洲高清视频在线播放 | 激情久久久久 | 久久久久伊人 | 日韩啪啪小视频 | 探花视频免费观看 | 91av电影在线 | 国产护士hd高朝护士1 | 欧美日韩一区二区在线观看 | 国产精品久久久久久久久搜平片 | www黄com| 久久精品国产亚洲 | 夜夜夜夜夜夜操 | 国产激情电影综合在线看 | 欧美久久久 | 337p西西人体大胆瓣开下部 | 国产网红在线观看 | www国产亚洲精品久久网站 | 中文在线免费一区三区 | 国产午夜精品久久久久久久久久 | 成人在线视频观看 | 亚洲在线视频观看 | 91在线看视频免费 | www.夜夜骑.com | 精品久久久久久久久久 | 亚洲黄色a| 欧美最猛性xxxxx免费 | www91在线| 国产精品一区久久久久 | 欧美日韩国产区 | 国产爽视频 | 在线免费观看一区二区三区 | 天天干天天插 | 狠狠干网址 | 国产精品va最新国产精品视频 | 欧美日韩国产在线观看 | 国产亚洲成av人片在线观看桃 | 视频在线一区二区三区 | 天天干天天干天天射 | 亚洲国产日韩欧美在线 | av在线播放免费 | 91探花在线视频 | 亚洲黄色小说网址 | 国产麻豆果冻传媒在线观看 | 狠狠躁日日躁狂躁夜夜躁av | 九九九九色 | 91一区二区三区久久久久国产乱 | 日韩在线免费不卡 | 久久久精品一区二区三区 | 在线国产视频 | 久久精品国产久精国产 | 亚洲成色 | 亚洲视频每日更新 | 久久精品网站视频 | 亚洲精品视频在线观看免费 | 伊人天天狠天天添日日拍 | av导航福利 | 九九久久久久久久久激情 | 久草视频精品 | 久久1电影院 | 天天干,天天操,天天射 | 就要色综合| 欧美精品在线免费 | 丁香六月久久综合狠狠色 | 在线观看色网 | 久久久久久久久久久福利 | 久影院| 欧美成人一二区 | 五月婷婷丁香 | 精品黄色在线观看 | 九九热久久久 | 国产网站色| 亚洲国产丝袜在线观看 | 欧美成人tv | 国产精品18久久久久久久 | 成人a视频| 精品产品国产在线不卡 | 成人超碰在线 | 久久爱资源网 | 蜜臀久久99精品久久久久久网站 | 91麻豆精品国产自产在线游戏 | 欧美少妇18p| 午夜精品久久久久久久99无限制 | 亚洲成人精品在线观看 | 99视频精品在线 | 99精品国产99久久久久久97 | 国产精品乱码久久久 | 热久久这里只有精品 | 国产一区二区精品91 | 韩日精品在线观看 | 黄色大片av | 99在线免费观看视频 | 久久久久激情视频 | 91成人免费观看视频 | 正在播放国产一区 | 亚洲五月婷| 欧美五月婷婷 | 在线视频18在线视频4k | 精品国产乱码久久 | 色视频网站在线观看一=区 a视频免费在线观看 | 成人黄色影片在线 | 国产精品3 | 99久久婷婷国产一区二区三区 | 亚洲成a人片综合在线 | 久久综合九色综合欧美狠狠 | 免费看久久久 | 国产一区二区在线播放 | 国产美女精品人人做人人爽 | av资源免费在线观看 | 国产午夜视频在线观看 | 亚洲午夜精 | 婷婷国产一区二区三区 | 精品a视频 | 亚洲精品videossex少妇 | 国产精品v a免费视频 |