JSP學習重點
JSP (java server page java伺服器端網頁)
jsp:html中嵌套寫java代碼 相比servlet更簡單
servlet:java代碼中嵌套寫html代碼 複雜
JSP它的本質是Servlet
<%
書寫java代碼
%>
jsp運作原理
--------------------------JSP學習要點---------------------------------
JSP可以放置在WEB應用程式中除了WEB-INF及其子目錄 外的任何其他目錄中。
JSP的運作原理:jsp本質上還是一個Servlet
每個jsp頁面在第一次通路時,JSP引擎先将它翻譯成Servlet源程式,接着再把這個servlet源程式編譯成class檔案,然後由web容器裝載。
隐含對象:即不聲明就可以直接使用的對象
1.JSP九個隐式對象(不用聲明建立就可以直接當對象使用)
1.request httpServletRequest對象
2.session httpSession對象 代表浏覽器和伺服器的一個會話
3.application ServletContext對象 代表目前web應用,能擷取初始化參數(是在web.xml裡面定義的初始化參數)
4.response httpServletResponse對象(在jsp頁面中幾乎不會使用這個對象)
前三個最為重要,也是使用最多的。
5.pageContext PageContext對象 頁面上下文,可以從該對象擷取其它八個對象,擷取目前頁面資訊(自定義标簽時使用)
6.config 目前jsp對應的ServletConfig對象(開發中幾乎不使用)
7.out JspWriter對象 調用out.println()方法列印到浏覽器中
8.page page=this代表目前jsp對應的Servlet對象引用,類型為Object隻能使用Object的方法 (開發中幾乎不用)
9.exception 隻有在聲明了page指令的isErrorPage="true"時才可以使用
pageContext、request、session、application對象的屬性作用範圍依次變大。這四個對象被稱之為域對象
pagContext:屬性作用範圍僅限于目前JSP頁面
request:屬性作用範圍僅限于同一個請求
session:屬性作用範圍僅限于同一次回話:浏覽器打開直到關閉稱之為一次回話(在此期間要保證回話不失效)
application:屬性作用範圍是目前web應用,是範圍最大的屬性作用範圍。
2.JSP文法:
1.模闆元素 即固定的靜态頁面 html代碼
2.jsp輸出表達式 <%= %>
3.jsp (java)腳本片段 <% 寫java代碼。。。 %>
4.jsp的聲明 <%! %> 可以聲明方法 但是jsp聲明幾乎不使用
5.jsp注釋 <%-- jsp注釋 --%>
3.請求重定向和請求轉發:(非常重要)
對我的困惑點:關于請求轉發和請求重定向的位址的寫法
轉發位址一般都是:/
重定向位址一般都是沒有寫/
本質差別:請求轉發隻發生了一次請求,而重定向則是向伺服器發出了兩次請求
具體差別:1.請求轉發的位址欄不發生改變,重定向會發生改變
2.請求轉發轉發中最終的servlet裡的request對象和最初的那個是同一個對象,請求重定向則不是同一個對象
3.請求轉發隻能轉發到目前web應用的資源,請求重定向可以任何資源
4.請求轉發:/ 代表的是目前WEB應用的根目錄 http://localhost:8080/project/WebRoot
請求重定向:/代表的是目前站點的根目錄 http://localhost:8080/
4.JSP中文亂碼解決方案
解決方案:
第一處理級别:修改jsp的編碼模闆 使 pageEncoding和charset都為utf-8;(修改jsp模闆) ---jsp頁面顯示中文
第二處理級别:擷取參數時使用request.setCharset("utf-8"); 對于post請求有用 ---擷取參數時候
第三處理級别:修改tomcat的server.xml檔案 添加這個useBodyEncodingForURI="true"屬性。 ---全局處理
中文亂碼問題最好是使用過濾器來解決。
5.JSP: page指令、include指令、JSP标簽
比較簡單随便了解即可。
請求重定向和請求轉發:
總結:
響應重定向:(一個web資源收到客服端的請求後,通知用戶端去請求另一個web資源--也就是你向我借錢,我沒有,我要你自己去找另一個人借錢)
用戶端通路了兩次伺服器 也就是 兩個 response/request
位址欄上的位址會顯示出,你重定向後的位址,客戶知道了位址變化了
重定向的位址有兩種寫法 開頭一種是加‘/‘斜線,表示通路web容器根目錄下(localhost:8080)的資源;
一種是不加斜線' / ',就是通路目前運用下的資源(推薦不加斜線)
重定向的位址可以是web容器内的或其它web應用
應用:重定向一般用在 登入子產品,和顯示購物車
請求轉發:(一個web資源收到客服端的請求後,伺服器程式幫用戶端去請求另一個web資源,也就是你向我借錢,我沒有,我幫你去找另一個人借)
用戶端發出了一個請求,轉發過程由伺服器幫你搞定
轉發的位址不加‘/‘斜線,表示通路相對于目前的請求路徑而言;
如果使用”/”開頭,代表相對于目前上下文路徑,即”/”表示應用上下文的根
轉發是隻能轉發到目前web容器的運用裡,因為 forward(request,response)
關于/的問題:使用絕對路徑絕對沒有問題,使用相對路徑有時候會出現拿問題。