Javaweb開(kāi)發(fā)項(xiàng)目實(shí)例教程(idea版)——Servlet規(guī)范(上篇)

Servlet規(guī)范介紹:
1.servlet規(guī)范來(lái)自于JAVAEE規(guī)范中的一種
2.作用:
1)在Servlet規(guī)范中,指定【動(dòng)態(tài)資源文件】開(kāi)發(fā)步驟
2)在Servlet規(guī)范中,指定Http服務(wù)器調(diào)用動(dòng)態(tài)資源文件規(guī)則
3)在Servlet規(guī)范中,指定Http服務(wù)器管理動(dòng)態(tài)資源文件實(shí)例對(duì)象規(guī)則
一、Servlet規(guī)范:
1.Servlet規(guī)范是Sun公司提供
2.Servlet規(guī)范指定動(dòng)態(tài)資源文件調(diào)用管理規(guī)則
3.servlet規(guī)范涉及接口實(shí)現(xiàn)類(lèi)由Http服務(wù)器廠商提供
4.tomcat對(duì)于servlet規(guī)范提供接口實(shí)現(xiàn)類(lèi)在lib/servlet-api.jar
二、Servlet規(guī)范細(xì)節(jié):
1.指定了Servlet接口實(shí)現(xiàn)類(lèi)開(kāi)發(fā)步驟
2.指定了Tomcat調(diào)用Servlet接口實(shí)現(xiàn)類(lèi)規(guī)則
3.指定了Tomcat如何管理Servlet接口實(shí)現(xiàn)類(lèi)的實(shí)例對(duì)象
4.指定了多個(gè)Servlet接口實(shí)現(xiàn)類(lèi)之間調(diào)用規(guī)則
5.指定了多個(gè)Servlet接口實(shí)現(xiàn)類(lèi)之間數(shù)據(jù)共享方案
三、Servlet接口實(shí)現(xiàn)類(lèi)開(kāi)發(fā)步驟
1.Servlet規(guī)范認(rèn)為,只有作為Servlet接口的實(shí)現(xiàn)類(lèi)才可以被稱(chēng)為動(dòng)態(tài)資源文件只有動(dòng)態(tài)資源文件才有資格被Tomcat服務(wù)器進(jìn)行調(diào)用
2.開(kāi)發(fā)步驟:
第一步:創(chuàng)建一個(gè)Java類(lèi)繼承與HttpServlet
第二步:重寫(xiě)doGet/doPost方法
第三步:在網(wǎng)站中web.xml中注冊(cè)Servlet接口實(shí)現(xiàn)類(lèi)
四、Servlet對(duì)象生命周期 【背】
1.一個(gè)網(wǎng)站中所有的Servlet接口實(shí)現(xiàn)類(lèi)的實(shí)例對(duì)象應(yīng)該由Http服務(wù)器負(fù)責(zé)創(chuàng)建
2.在正常情況下,只有在Tomcat接收到第一個(gè)針對(duì)當(dāng)前Servlet接口實(shí)現(xiàn)類(lèi)請(qǐng)求時(shí)才會(huì)創(chuàng)建其實(shí)例對(duì)象
通過(guò)命令干預(yù),可以要求tomcat在啟動(dòng)時(shí)自動(dòng)創(chuàng)建Servlet接口實(shí)現(xiàn)類(lèi)
實(shí)例對(duì)象
? ? ? ? ??web.xml
? ? ? ? ? ? ? ? ?? <servlet>
? ? ? ? ? ?? ? ? ? ? ? ? ? ?<servlet-name></servlet-name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <servlet-class></servlet-class>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <load-on-startup>76</load-on-startup> 大于0的整數(shù)即可
? ? ? ? ? ? ? ? ? ?</servlet>
3.一個(gè)Servlet接口實(shí)現(xiàn)類(lèi)最多只能被創(chuàng)建一個(gè)實(shí)例對(duì)象
4.在Tomcat關(guān)閉時(shí)負(fù)責(zé)銷(xiāo)毀掉網(wǎng)站中所有的Servlet接口實(shí)現(xiàn)類(lèi)
實(shí)例對(duì)象
五、HttpServletResponse接口
1.介紹:
1)HttpServletResponse接口來(lái)自于Servlet規(guī)范
2)HttpServletResponse接口實(shí)現(xiàn)類(lèi)由Http服務(wù)器廠商提供
3)HttpServletResponse接口可以將Servlet中運(yùn)行結(jié)果寫(xiě)入到響應(yīng)包
4)開(kāi)發(fā)人員習(xí)慣于將HttpServletResponse接口修飾的對(duì)象稱(chēng)為【響應(yīng)對(duì)象】
2.主要功能:
1)HttpServletResponse接口負(fù)責(zé)將Servlet運(yùn)行結(jié)果以二進(jìn)制形式寫(xiě)入到響應(yīng)包中響應(yīng)體
2)HttpServletResponse接口負(fù)責(zé)設(shè)置響應(yīng)包中響應(yīng)頭中content-type屬性控制瀏覽器采用對(duì)應(yīng)的解析器和編譯器對(duì)響應(yīng)體中二進(jìn)制數(shù)據(jù)進(jìn)行處理
3)HttpServletResponse接口負(fù)責(zé)將一個(gè)請(qǐng)求地址寫(xiě)入到響應(yīng)頭中l(wèi)ocation屬性中來(lái)控制瀏覽器下一次請(qǐng)求的方式
六、HttpServletRequest接口? ? ?
1.介紹:
1)HttpServletRequest接口來(lái)自于Servlet規(guī)范
2)HttpServletRequest接口 實(shí)現(xiàn)類(lèi)由Http服務(wù)器廠商提供
3)HttpServletRequest接口讀取請(qǐng)求協(xié)議包內(nèi)容
4) 開(kāi)發(fā)人員習(xí)慣于將HttpServletRequest接口修飾對(duì)象稱(chēng)為【請(qǐng)求對(duì)象】
2.主要功能:
1) 讀取請(qǐng)求包中請(qǐng)求行中信息【url,method】
2) 讀取請(qǐng)求包中請(qǐng)求頭或則請(qǐng)求體中參數(shù)信息
3) 代替瀏覽器向tomcat索要資源文件? ?
七、默認(rèn)歡迎資源文件設(shè)置??
1. 默認(rèn)歡迎資源文件:tomcat針對(duì)用戶(hù)對(duì)當(dāng)前網(wǎng)站發(fā)起默認(rèn)請(qǐng)求,自動(dòng)返回資源文件
2.? 默認(rèn)請(qǐng)求:
1)正常請(qǐng)求:
? ? ?http://localhost:8080/myWeb/one.html
2) 默認(rèn)請(qǐng)求:
? ? ?http://localhost:8080/myWeb/
3.tomcat遵守的默認(rèn)歡迎資源文件定位規(guī)則:
1)規(guī)則位置:tomcat安裝目錄/conf/web.xml??
4.自定義網(wǎng)站中的默認(rèn)歡迎資源文件定位規(guī)則:
? ?? ?web.xml
? ? ? ? ? <welcome-file-list>
? ? ? ?? ? ? ? ? <welcome-file></welcome-file>
? ? ? ? ? </welcome-file-list>? ?
八、Http狀態(tài)碼
1.介紹:
1)由Http服務(wù)器生成一個(gè)由三位數(shù)字組成符號(hào)
2) 表示本次通信的狀態(tài)同時(shí)可以要求瀏覽器接收到響應(yīng)包之后行為
3)分為5個(gè)大類(lèi) (1XX,2xx,3xx,4xx,5xx)
2.? 200: Http服務(wù)器將瀏覽器請(qǐng)求的資源文件進(jìn)行了返回
3.? 302:Http服務(wù)器通知瀏覽器到響應(yīng)頭中l(wèi)ocation中讀取請(qǐng)求地址并要求瀏覽器將得到請(qǐng)求地址更新到瀏覽器地址欄response.sendRedirect("請(qǐng)求地址")
4. 404: Http服務(wù)器通知瀏覽器本次索要的資源文件不存在
原因:
1)人為原因:
網(wǎng)站名不對(duì)
如果網(wǎng)站名正確,可能資源文件名稱(chēng)
tomcat沒(méi)有在網(wǎng)站定位默認(rèn)歡迎資源文件
設(shè)置請(qǐng)求地址沒(méi)有按照uri格式(/網(wǎng)站名/資源文件名)設(shè)置
2)IEDA沒(méi)有將最新網(wǎng)站內(nèi)容交給tomcat
5.405:? Http服務(wù)器通知瀏覽器本次索要的資源文件已經(jīng)被找到了,但是
這個(gè)資源文件對(duì)于瀏覽器請(qǐng)求方式無(wú)法接收
? ? ? ? ? ? ? ? ? ? ? ? ? ?get
? ? ? ? 瀏覽器------------》servlet.doGet()
? ? ? ? ? ? ? ? ? ? ? ? ? ?post
? ? ? ? 瀏覽器-----------》 servlet.doPost()
5.500:Http服務(wù)器通知瀏覽器本次索要的資源文件已經(jīng)被找到了并且也可以接收瀏覽器的請(qǐng)求方式,但是由于資源文件在處理過(guò)程出現(xiàn)了異常因此無(wú)法提供服務(wù)
異常:并不是命令寫(xiě)錯(cuò)了,命令使用數(shù)據(jù)不滿(mǎn)足條件
**一個(gè)異常至少遇到三次以上才有可能進(jìn)行解決
九、常見(jiàn)異常:
1. jdbc-jar包忘記添加
ClassNotFoundException: com.mysql.jdbc.Driver
2. mysql服務(wù)器停止或則mysql服務(wù)器所在計(jì)算機(jī)ip地址寫(xiě)錯(cuò)
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
3. 訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)不存在
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'xxx'
4. 訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)使用密碼不正確
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
5. SQL命令書(shū)寫(xiě)錯(cuò)誤
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dname='888',loc='888' where deptno=5'
6. NullPointerException
十、servlet之間調(diào)用方式
1.前提條件:
針對(duì)瀏覽器某次請(qǐng)求,需要在服務(wù)端中由多個(gè)Servlet參與其中但是瀏覽器一次只能請(qǐng)求一個(gè)資源文件,導(dǎo)致用戶(hù)為了得到服務(wù)結(jié)果需要手動(dòng)通過(guò)瀏覽器發(fā)起多次請(qǐng)求,增加用戶(hù)獲得服務(wù)難度降低使用感受。導(dǎo)致用戶(hù)流失
2.紅線(xiàn):? ?無(wú)論本次請(qǐng)求中涉及了多個(gè)Servlet,用戶(hù)只需要手動(dòng)發(fā)起一次請(qǐng)求
3.解決方案:? 重定向解決方案,請(qǐng)求轉(zhuǎn)發(fā)解決方案
十一、重定向解決方案
1.工作原理:
2.依賴(lài)命令? response.sendRedirect("地址")
3.地址格式:
1)如果要求瀏覽器訪(fǎng)問(wèn)的其他網(wǎng)站的資源,地址采用URL?response.sendRedirect("http://www.baidu.com")
2)? 如果要求瀏覽器訪(fǎng)問(wèn)的當(dāng)前網(wǎng)站的資源,地址采用URI
response.sendRedirect("/myWeb/two")
4.特征【背】
1)重定向過(guò)程中瀏覽器會(huì)發(fā)送多少次請(qǐng)求重定向過(guò)程中瀏覽器至少發(fā)送兩次以上請(qǐng)求,但是只有第一次請(qǐng)求是用戶(hù)手動(dòng)發(fā)起的
2)在瀏覽器發(fā)送請(qǐng)求之后,如何判斷服務(wù)端采用重定向方案解決請(qǐng)求在本次請(qǐng)求結(jié)束后,收到的狀態(tài)碼是302時(shí)就可以判定
3)通過(guò)重定向方案調(diào)用的Servlet接收的請(qǐng)求方式一定是GET.從第二次請(qǐng)求開(kāi)始是通過(guò)瀏覽器地址發(fā)起的。因此發(fā)起請(qǐng)求方式一定是GET
十二、請(qǐng)求轉(zhuǎn)發(fā)解決方案
1.工作原理
2.依賴(lài)命令:
? ? ? ? ? ? ? ? ? ??//通過(guò)請(qǐng)求對(duì)象獲得資源申請(qǐng)對(duì)象
? ? ? ? ? ? ? ? ? ?RequestDispatcher? report =? ?request.getRequestDispatcher("地址");
? ? ? ? ? ? ? ? ? ?//將資源申請(qǐng)對(duì)象發(fā)送給tomcat
? ? ? ? ? ? ? ? ? ?report.forward(request,response)?
3.地址:? ? ? "/資源文件名"
4.特征:
1)請(qǐng)求轉(zhuǎn)發(fā)過(guò)程中,瀏覽器發(fā)送了多少次請(qǐng)求只發(fā)送了一次請(qǐng)求
2)請(qǐng)求轉(zhuǎn)發(fā)過(guò)程中,為什么將請(qǐng)求對(duì)象和響應(yīng)對(duì)象交給tomcat請(qǐng)求轉(zhuǎn)發(fā)過(guò)程,兩個(gè)Servlet應(yīng)該共享同一個(gè)請(qǐng)求協(xié)議包,因此共享這個(gè)請(qǐng)求協(xié)議包關(guān)聯(lián)的請(qǐng)求對(duì)象和響應(yīng)對(duì)象
3)通過(guò)請(qǐng)求轉(zhuǎn)發(fā)調(diào)用的Servlet接收的請(qǐng)求方式在同一次請(qǐng)求轉(zhuǎn)發(fā)過(guò)程中,所有servlet接收請(qǐng)求方式保持一致
十三、HashMap與HashTable與ConcurrentHashMap [面試題]
十四、Servlet之間數(shù)據(jù)共享方案
1.ServletContext接口
2.Cookie類(lèi)
3.HttpSession接口
4.HttpServletRequest接口
十五、ServletContext接口
1.介紹:
1)ServletContext接口來(lái)自于Servlet規(guī)范
2)ServletContext接口實(shí)現(xiàn)類(lèi)由Http服務(wù)器廠商提供
3)ServletContext接口修飾對(duì)象被稱(chēng)為全局作用域?qū)ο?/p>
4)來(lái)自于同一個(gè)網(wǎng)站下Servlet都可以使用全局作用域?qū)ο筮M(jìn)行數(shù)據(jù)共享
2. 使用:? myWeb網(wǎng)站中OneServlet通過(guò)全局作用域?qū)ο笙騎woServlet提供共享數(shù)據(jù)
運(yùn)行OneServlet
//1.通過(guò)請(qǐng)求對(duì)象向Tomcat索要當(dāng)前網(wǎng)站中全局作用域?qū)ο骃ervletContext? ?application=? request.getServletContext()
//2.將數(shù)據(jù)添加到全局作用域?qū)ο笾凶鳛楣蚕頂?shù)據(jù)application.setAttribute("共享數(shù)據(jù)名",共享數(shù)據(jù))
運(yùn)行TwoServlet
//1.通過(guò)請(qǐng)求對(duì)象向Tomcat索要當(dāng)前網(wǎng)站中全局作用域?qū)ο骃ervletContext? ?application=? request.getServletContext()
//2.從全局作用域?qū)ο笞x取數(shù)據(jù)Object 共享數(shù)據(jù) = application.getAttribute("共享數(shù)據(jù)名");
3. 生命周期:[背]
1)在tomcat啟動(dòng)時(shí),自動(dòng)為當(dāng)前網(wǎng)站創(chuàng)建一個(gè)全局作用域?qū)ο?br>
2)在tomcat運(yùn)行時(shí),一個(gè)網(wǎng)站中有且只能有一個(gè)全局作用域?qū)ο?/p>
3)在tomcat關(guān)閉時(shí),自動(dòng)銷(xiāo)毀網(wǎng)站中全局作用域?qū)ο?/p>
4. 存在問(wèn)題:
1)如果不進(jìn)行限制,無(wú)限向全局作用域?qū)ο筇砑訑?shù)據(jù)。導(dǎo)致服務(wù)端計(jì)算機(jī)內(nèi)存消耗殆盡
2)容易導(dǎo)致數(shù)據(jù)污染
最后奉上視頻教程??,視頻觀看效果更佳??!走過(guò)路過(guò)別忘素質(zhì)三連哦~~


? ? ? ?
? ? ? ? ? ? ??