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