內(nèi)置對象
一宋渔、
我們先思考一下彤委,我們這個網(wǎng)絡訪問的過程是怎樣的驹暑?
1裳食、http協(xié)議特點矛市。
超文本傳輸協(xié)議(HTTP-Hypertext transfer protocol) 是一種詳細規(guī)定了瀏覽器和萬維網(wǎng)服務器之間互相通信的規(guī)則,通過因特網(wǎng)傳送萬維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議诲祸。q超文本傳輸協(xié)議 q 無狀態(tài)協(xié)議 q 用于通過 Internet 發(fā)送請求消息和響應消息 q 使用端口接收和發(fā)送消息浊吏,默認為80端口HTTP是基于客戶/服務器模式且是面向連接的,HTTP能夠傳送任意類型數(shù)據(jù)對象救氯。HTTP連接是一種一次性連接找田,每次連接只處理一個請求,HTTP是一種無狀態(tài)協(xié)議着憨,即服務器不保留與客戶交易時的任何狀態(tài)墩衙,
2、http消息頭
我們平時上網(wǎng)感覺就是輸入網(wǎng)址,然后從服務器下載網(wǎng)頁顯示就可以了漆改,事實這個過程非常復雜心铃,需要傳輸?shù)膬?nèi)容也非常多,在一個每一次訪問都是一個請求(request),服務器對這個請求都會做出應答(response)挫剑,在這個過程中傳輸?shù)膬?nèi)容都是根據(jù)http的協(xié)議封裝到http的消息頭中的去扣。http的消息頭有其固定個格式規(guī)范,從這個消息頭里面我們可以得到很多信息樊破,雖然大部分信息對普通用戶而言都是無關重要的愉棱,但是對我們程序員來說可能是非常有用的。消息頭的內(nèi)容都已經(jīng)封裝到jsp的內(nèi)置對象里了哲戚,所以我們并不需要自己手動的去解析它奔滑,這里我們只需要簡單的理解就可以了。
二惫恼、內(nèi)置對象
qJSP 隱式對象是 Web 容器加載的一組類 q它不像一般的Java對象那樣用”new”去獲取實例档押,而是可以直接在JSP頁面使用的對象 ?q隱式對象的名稱是 JSP 的保留字 qJSP 使用 Java 定義的隱式對象來訪問網(wǎng)頁的動態(tài)內(nèi)容。
事實上我們已經(jīng)使用過jsp的隱式對象了祈纯,比如out對象令宿,不是多有的對象在使用前都必須先new出來嗎,為什么這些對象不需要呢腕窥,你可以再去查看jsp轉(zhuǎn)譯后的java文件粒没,事實這個java文件不是一個普通的java文件,它已經(jīng)幫助我們構造了很多很有用的對象了簇爆,所有這些對象我們并不需要自己手動的去new出來癞松,就可以直接使用了。
常用的隱式對象有:
輸入/輸出對象:request入蛆,response响蓉,out。
作用域通信對象:session哨毁,application枫甲,pageContext。
Servlet 對象:page,config扼褪。
錯誤對象:exception想幻。
上面這些對象我們以后都會學習到,這里先講解一下exception话浇、request和response三個內(nèi)置對象脏毯。
1、exception對象
qexception對象用于處理 JSP 頁面中的錯誤 qexception 對象用于訪問執(zhí)行 JSP 的過程中引發(fā)的異常 qexception 對象是 java.lang.Throwable 類的實例幔崖。
先要修改page指令為isErrorPage="true"食店。
然后就可以在頁面上面直接打印了渣淤。
<body>
? ?<%=exception %>
? </body>
2、request對象
request是一個非常重要的對象叛买,它會把用戶的請求操作封裝在這個對象中砂代。http消息頭中一些很有用的信息都可以取得,具體方法如下:
String encodString = request.getCharacterEncoding();//請求編碼int contentLength = request.getContentLength();//請求內(nèi)容的長度率挣,get提交是-1刻伊,post則有長度String ContentType = request.getContentType();//請求內(nèi)容的類型,get提交是null椒功,post則為application/x-www-form-urlencodedString contextPath = request.getContextPath();//頁面?zhèn)鱽淼恼埱舐窂酱废洌琭orm中的actionString LocalAddr = request.getLocalAddr();String LocalName = request.getLocalName();int LocalPort = request.getLocalPort();String RemoteAddr = request.getRemoteAddr();// 獲得客戶端的IP地址String RemoteHost = request.getRemoteHost();// 獲得客戶端電腦的名字,若失敗动漾,則返回客戶端電腦的IP地址String RemoteUser = request.getRemoteUser();String Method = request.getMethod();//頁面提交的方法String QueryString = request.getQueryString();//請求字符串,get提交則有丁屎,post為nullString RequestURI = request.getRequestURI();// 獲得發(fā)出請求字符串的客戶端地址String ServerName = request.getServerName();// 獲得服務器的名字int ServerPort = request.getServerPort();// 獲得服務器的端口號String ServletPath = request.getServletPath();// 獲得客戶端所請求的腳本文件的文件路徑System.out.println("編碼:"?+ encodString + ";請求內(nèi)容的長度:"?+ contentLength+ ";請求類型:"?+ ContentType + ";請求路徑:"?+ contextPath);System.out.println("本地地址:"?+ LocalAddr + ";本地名稱:"?+ LocalName+ ";本地端口:"?+ LocalPort);System.out.println("遠程地址:"?+ RemoteAddr + ";遠程用戶名:"?+ RemoteUser+ ";遠程端口:"?+ RemoteHost);System.out.println("請求方法:"?+ Method);System.out.println("請求字符串:"?+ QueryString + ";請求url:"?+ RequestURI);System.out.println("服務名稱:"?+ ServerName + ";服務端口:"?+ ServerPort);System.out.println("路徑:"?+ ServletPath);String user_agent = request.getHeader("User-agent");// 返回客戶端瀏覽器的版本號、類型System.out.println("user_agent>>"?+ user_agent);// 返回所有request header的名字旱眯,結果集是一個Enumeration(枚舉)類的實例System.out.println("瀏覽器和客戶端的信息");Enumeration enumeration = request.getHeaderNames();while (enumeration.hasMoreElements()) {????String elent = (String) enumeration.nextElement();????System.out.println(elent + ">>"?+ request.getHeader(elent));}
另外還有三個很有用的方法是
request.getParameter("uanme");request.setAttribute("name", "value");request.getAttribute("name");
小編整理了一些java進階學習資料和面試題晨川,需要資料的請加JAVA高階學習Q群:664389243?這是小編創(chuàng)建的java高階學習交流群,加群一起交流學習深造删豺。群里也有小編整理的2019年最新最全的java高階學習資料共虑!
rmal;t??[\?