1. 程式人生 > >**總體回顧_重要知識點 [web基礎day24] *

**總體回顧_重要知識點 [web基礎day24] *

總體回顧:

Servlet – 實際應用很多,很重要。

* jsp本質是一個servlet,所以它不是前臺的,而是後端的內容。
	* 展示給使用者的最好是html介面,效率高,完成的效果好,jsp可以用來公司管理系統,方便獲取
	* web四大域物件:
		* ServletContext:生命週期是在伺服器啟動建立,關閉銷燬(正常關閉)
		* Session:瀏覽器第一次訪問伺服器servlet,如果servlet呼叫getSession則建立。
			* 關閉方式:
				1.預設時間  30分鐘
				2.seesion.invilidata()
				3.伺服器正常關閉	
		* HttpServletRequest:響應瀏覽器訪問web伺服器。(它是一個一次請求,瀏覽器觸發,伺服器接收。)
		* PageContext:在jsp頁面的一個類似於ServletContext的域物件,在html頁面不使用
	* Servlet
		* 介面Servlet
		* 生命週期方法:
			1.init   //只執行一次
			2.service   //每次訪問都會被執行
			3.destory   //只執行一次
		* 繼承結構體系: Servlet-> GenericService->HttpServlet(分發在httpservlet中,將七種方法進行判斷)
		* http請求: 七種    get/post/put/delete
		* Servlet配置方式:
			1.xml
				/WEB-INF/WEB.xml
					* <servlet>
					* 	<servlet-name>demo</servlet-name>		(標識名)
					* 	<servlet-class>com.itheima.itcast.Servlet</servlet-class>  		(全路徑)
					* 	</servlet>
					* 	<servlet-mapping>
					* 		<servlet-name>demo</servlet-name>
					* 		<url-patter>/demo</url-pattern>			(虛擬路徑)
					* 	</servlet-mapping>
			2.註解
				@WebServlet("/a")

			3.url-pattern路徑配置
				* /a
				* /user/a
				* /user/*
				* *.do
						!! * /*.do(不能這麼操作)

Request:

	1.獲取請求引數
		* getParameter("引數名")
		* getParameterMap("引數名")
		* getParameterValues("引數名")	
	2.獲取ServletContext
		* getServletContext()
	3.作為域物件進行存取資料
		* setAttribute("鍵",值)
		* getAttribute("鍵")
		* removeAttribute("鍵")
	4.能請求進行轉發
		* request.getRequestDispatcher("/服務端絕對訪問路徑").forward(request,response)
	5.獲取請求行:
		* getRequestUri()   
		* getRequestUrl()
		* getMethod()
		* getCOntextPath()
	6.獲取請求頭
		* getHeader("請求頭")
	

	* 路徑問題:
		* 相對路徑(不以/開頭)
			* ./ 當前目錄
			* ../上一級目錄
		* 絕對路徑(用於請求轉發)
			* 服務端絕對路徑(請求轉發)	
				* /訪問資源路徑
			* 瀏覽器端絕對路徑
				* /虛擬目錄/訪問資源路徑
	* response(響應)
		* 設定響應行:
			* setStatus(狀態碼)
				1.200:連線正常
				2.404:客戶端異常
				3.500:伺服器端異常
				4.其他的還有:302,304...
			* 設定響應頭
				setHeader("響應頭","頭的內容")
				setContentType("text/html;charset=utf-8")
			* 設定響應內容
				getWriter().Writer("")
				getOutputStream().write("".getBytes())
			* 重定向
				sendRedirect("/瀏覽器端絕對路徑")

		* 重定向和請求轉發的區別:
			1.路徑不一樣
			2.位址列(轉發不會發生改變,重定向會發生改變)
			3.請求次數
			4.共享資料
				* 域物件/url重寫   --將url地址拼接攜帶資料,參照response課程中重點圖

會話技術 :1.多次請求和響應 – 面試經常考,很重要。

	1.Cookie:
		* cookie來自伺服器,儲存在瀏覽器端。
		* Cookie相關api: 
			* 傳送:
				Cooke c=new Cookie("名字","值")		-- 建立cookie
				c.setMaxAge(10);		//單位是秒	-- 設定存活時間
				c.setPath("/虛擬目錄")			-- 這個的意思是cookie的作用範圍。
					* 如果要設定cookie的有效訪問路徑,必須以虛擬目錄開頭。
				response.addCookie(cookie物件)		傳送cookie
			* 接收:
				Cookie[] cookies=request.getCookies();
				cookie.getName()
				cookie.getValue()
		* cookie原理:
			請求頭:
				Cookie
			響應頭:
				Set-Cookie
	2.Session 基於伺服器會話技術
		* session依賴於cookie(set-cookie/請求頭cookie)
		* session建立
			HttpSession session=request.getSession		(一旦第一次執行該方法,會建立一個Session,Session物件會提供一個id,該id會以cookie的形式回寫到瀏覽器JSESSIONID)   格式: Set-Cookie:JSESSIONID=2C23FF5CF6ABF728...
		
		* 面試題:訪問a.html/a.jsp/a.servlet   誰會在第一次訪問的時候就會建立Session。
		* 答:html不會建立Session。Servlet不會建立Session。jsp第一次訪問一定會建立Session
		* 域物件:
			* setAttribute("鍵",值)
			* getAttribute("鍵")
			* removeAttribute("鍵")	
		* Seesion的持久化:
			* 鈍化活化
			* 通過JSESSIONID=2C23FF5CF6AB...的cookie來進行持久化,setMaxAge()
		* session的銷燬:
			* 預設銷燬時間   30分鐘
			* 伺服器正常關閉
			* sessioninvilidate()

ServletContext

	1.域物件:
		* setAttribute("鍵",值)
		* getAttribute("鍵")
		* removeAttribute("鍵")
	2.獲取檔案的mime型別
		* getMimeType("檔名.字尾名")
	3.獲取檔案的絕對磁碟路徑
		* getRealPath("檔名稱")
		* 檔名稱
			* web目錄
				getRealPath("1.txt")
			* web-inf
				getRealPath("/web-inf/1.txt")
			* src
				getRealPath("/web-inf/classes/1.txt")

jsp/el/jstl指令碼

	1. jsp:
		* 常用標籤:
			* <% %>
			* <%=%>
			* <%!%>
		* jsp指令:
			* page
			* taglib
			* include
		* jsp註釋:
			* <%-- 內容 --%>
		* jsp 9大內建物件
			* application
			* session
			* request
			* pageContext
			* config
			* response
			* page
			* out
			* exception
		
	2.el表示式:	
		* ${pageContext.request.contextPath}
		* jstl:taglib/jar
		* <c:if> 
			-- test
		* <c:foreach>
			-- 普通for迴圈
				* var
				* begin
				* end
				* step
				* varStatus
			-- 增強for迴圈
				* var
				* items
				* varStatus

動態代理:

	1.建立:
		* Proxy.new ProxyInstance(類載入器,實現介面,new invocationHander(){
		* 	@Override
		* 	public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
		* 	//具體增強
		* 	//增強前執行功能
		* 	Object result=method.invoke(外部的物件,args);
		* 	//方法執行後的增強
		* 	return result;
		* }
		* })

案例

* 通過ajax去傳送非同步請求
	* 獲取要提交的表單的引數:
		* var params=$("#表單").serialize();

	* 在查詢資料庫的時候,如果查不到指定物件的內容則會直接報錯,可以手動抓取。
	* 先關閉掉tomcat再clean,不然關不掉,因為tomcat檔案在target中,如果tomcat一直在執行則無法clean;
	* tomcat很多版本,tomcat在預設處理編碼集的時候預設utf-8,而tomcat7 的在處理的時候處理的編碼集是iso-8859-1(拉丁文編碼)
		* String encodeName=URLEncoder.encode(name,"iso-8859-1")    -- 將name編碼為%E5%BC%E4...
		* String encodeName=U
		* domain中的user類和資料庫中的user表必須一致。不能少。