柚子快報(bào)邀請(qǐng)碼778899分享:Servlet
柚子快報(bào)邀請(qǐng)碼778899分享:Servlet
執(zhí)行流程
1.瀏覽器發(fā)送請(qǐng)求到tomcat服務(wù)器,tomcat服務(wù)器創(chuàng)建httpservletrequest對(duì)象和httpservletresponse對(duì)象。
2.java代碼servlet類(lèi)需要實(shí)現(xiàn)servlet接口,重寫(xiě)service方法。
3.tomcat根據(jù)請(qǐng)求的路徑,找對(duì)應(yīng)的java servlet類(lèi)。執(zhí)行service方法。
url-pattern
web.xml中url-pattern將訪(fǎng)問(wèn)路徑和servlet映射對(duì)應(yīng)上,/表示全部。也可以使用@WebServlet("/add")注解。
servlet生命周期
實(shí)例化 第一次請(qǐng)求時(shí)/服務(wù)啟動(dòng)時(shí),調(diào)用構(gòu)造器,完成實(shí)例化操作。如果web.xml中加了
servlet采用的是單例模式,多個(gè)客戶(hù)端訪(fǎng)問(wèn)可能會(huì)出現(xiàn)線(xiàn)程安全問(wèn)題。所以不建議在service方法中修改變量的值。加鎖,會(huì)嚴(yán)重影響性能。
defalutservlet是處理靜態(tài)資源,裝進(jìn)response對(duì)象中,根據(jù)后綴設(shè)置content-type。在springmvc中defalutservlet不生效,需要重新配置。
請(qǐng)求轉(zhuǎn)發(fā)和響應(yīng)重定向
請(qǐng)求轉(zhuǎn)發(fā)
請(qǐng)求轉(zhuǎn)發(fā):應(yīng)用內(nèi)部將客戶(hù)端請(qǐng)求發(fā)送給另一個(gè)servlet,只有一對(duì)request、response對(duì)象。由第一個(gè)servlet傳遞給第二個(gè)servlet。url不變。
演示:
//請(qǐng)求轉(zhuǎn)發(fā)器
//RequestDispatcher requestDispatcher =request.getRequestDispatcher ("servletB");
//RequestDispatcher requestDispatcher =request.getRequestDispatcher ("a.html");
//a.html在web目錄下
//RequestDispatcher requestDispatcher =request.getRequestDispatcher ("WEB-INF/b.html");
//b.html在web/WEB-INF/受保護(hù)目錄下
requestDispatcher.forword(request,response);
//傳遞請(qǐng)求和響應(yīng)參數(shù)
請(qǐng)求轉(zhuǎn)發(fā)是httpservletrequest對(duì)象實(shí)現(xiàn)的
請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器內(nèi)部的行為,對(duì)客戶(hù)端屏蔽
客戶(hù)端值發(fā)送了一次請(qǐng)求,服務(wù)端只產(chǎn)生了一對(duì)request、response對(duì)象
客戶(hù)端地址欄不變
請(qǐng)求的參數(shù)可以傳遞
目標(biāo)資源可以是另一個(gè)servlet的動(dòng)態(tài)資源,也可以是html靜態(tài)資源,也可以是受保護(hù)資源。
該方式是訪(fǎng)問(wèn)WEB-INF下資源的唯一方式。
目標(biāo)資源不能是外部資源,例如www.baidu.com。
響應(yīng)重定向
響應(yīng)重定向是客戶(hù)端向服務(wù)器發(fā)送請(qǐng)求后,服務(wù)器通過(guò)特殊的響應(yīng)頭告訴客戶(hù)端訪(fǎng)問(wèn)路徑
response.sendRedirect("servletB");
?響應(yīng)重定向是通過(guò)httpservletresponse對(duì)象實(shí)現(xiàn)的。
響應(yīng)重定向是在服務(wù)器的提示下客戶(hù)端的行為。
客戶(hù)端的地址欄變化,客戶(hù)端至少發(fā)送了兩次請(qǐng)求。產(chǎn)生了兩對(duì)request、response對(duì)象。參數(shù)不能傳遞。
目標(biāo)資源可以是web目錄下的視圖資源,但是不能是WEB-INF下的視圖資源。
目標(biāo)資源可以是外部資源。
亂碼問(wèn)題
get請(qǐng)求亂碼
get請(qǐng)求,表單、直接輸入url
原因:請(qǐng)求的視圖資源的charset編碼屬性和server.xml中的解碼方式不一致。
請(qǐng)求頭中 GET URI?name='lisa' http/1.1
解決:修改tomcat中server.xml中的connecter屬性中的uri解碼方式。
?post請(qǐng)求亂碼
原因:視圖資源的編碼方式和tomcat解碼方式不一致
請(qǐng)求行Post URI http/1.1
請(qǐng)求頭
請(qǐng)求體 name='Lisa'
解決:request.setCharacterEncoding("XXX")設(shè)置請(qǐng)求體編碼方法
響應(yīng)亂碼
設(shè)置響應(yīng)編碼格式
response.setCharacterEncoding("UTF-8")
//不好,因?yàn)槿绻菄?guó)外的瀏覽器,可能瀏覽器解碼格式不確定
設(shè)置瀏覽器解碼方式
response.setContentType("text\html;charset=UTF-8");
cookie和session
創(chuàng)建cookie后,每次請(qǐng)求頭都會(huì)攜帶cookie。
Cookie c=new Cookie("key","value");
c.setMaxAge(秒);
response.setCookie(c);
cookie如果不設(shè)置失效,就是會(huì)話(huà)級(jí)別的。關(guān)閉瀏覽器就消失了。
session
獲取session,如果沒(méi)有就創(chuàng)建session。向session中存入key-value格式數(shù)據(jù)。
session有超時(shí)時(shí)間。tomcat的在web.xml中默認(rèn)配置30分鐘。
session的獲取和設(shè)置?
HttpSession session=request.getSession();
session.getId();
session.isNew();
session.setAttribute("key",object對(duì)象);
session.getAttribute("key");
過(guò)濾器
web.xml配置過(guò)濾器
生命周期
構(gòu)造? 服務(wù)啟動(dòng)的時(shí)候 1次
初始化 構(gòu)造結(jié)束之后 1次
過(guò)濾方法 請(qǐng)求之前
銷(xiāo)毀? 服務(wù)結(jié)束之后
過(guò)濾器鏈中的順序由web.xml中的,filtermapping順序決定的。
注解配置Filter @WebFilter("/*")注解,注解配置過(guò)濾器鏈中,類(lèi)名決定過(guò)濾器鏈順序。
ServletContext對(duì)象
單例模式,應(yīng)用域?qū)ο蟆?/p>
1.可以為應(yīng)用設(shè)置全局配置。
web.xml
// 獲取應(yīng)用域?qū)ο?配置的信息
ServletContext application = getServletContext();
String application_key = application.getInitParameter("application_key");
System.out.println("獲取域?qū)ο髮傩?"+application_key);
2.獲取路徑相關(guān)
//獲取項(xiàng)目部署的上下文路徑。tomcat里配置的/前綴
String contextPath = application.getContextPath();
System.out.println("上下文路徑:"+contextPath);
//獲取部署項(xiàng)目位置下某個(gè)文件的真實(shí)路徑
String realPath = application.getRealPath("qcby");
System.out.println("qcby真實(shí)路徑是:"+realPath);
3.設(shè)置屬性,多個(gè)servlet共享
servlet1
ServletContext application = getServletContext(); //域?qū)ο蠖紩?huì)有的方法,getattribute setattribute removeattribute application.setAttribute("key","value");
servlet2
ServletContext application = getServletContext();
Object key = application.getAttribute("key");
ajax
請(qǐng)求的方式:瀏覽器直接輸?shù)刂?、html head中的script、link 、img。a標(biāo)簽、form表單。js發(fā)送請(qǐng)求。
異步請(qǐng)求和同步請(qǐng)求
不必等待響應(yīng)回來(lái)就能繼續(xù)發(fā)請(qǐng)求。
ajax實(shí)現(xiàn)方式:原生的js代碼->jquery->vue框架的axios
柚子快報(bào)邀請(qǐng)碼778899分享:Servlet
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀(guān)點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。