1. 程式人生 > >JSP(三)JSP內建物件(上)

JSP(三)JSP內建物件(上)

第三節  JSP內建物件(上)

目錄

-九大內建物件

JSP內建物件是Web容器建立的一組物件,不使用new就可使用。

常用:out,response,request,session,application

其他:config,Page,pageContext,exception

-web程式的請求響應模式

使用者傳送請求(request)

伺服器給使用者響應(response)

-out物件

jspWriter類的例項,是向客戶端輸出內容常用的物件

void println()向客戶端列印字串

void clear()清除緩衝區內容,如果在flush之後呼叫會丟擲異常

void clearBuffer()清除緩衝區內容,在flush呼叫不會丟擲異常

即: 如果在out.flush();之後使用out.clear();程式會丟擲異常,只能執行out.flush();之前的,之後的不能正常執行

而out.clearBuffer();之前使用out.flush();則不會丟擲異常

void flush()將緩衝區內容輸出到客戶端

int getBufferSize()返回緩衝區以位元組數的大小,如不設定緩衝區則為0

int getRemaining()返回緩衝區還剩餘多少可用

注: 關於flush和out的輸出問題,out只是將內容放到緩衝區,並不給與直接輸出,flush是將當前緩衝的內容輸出之後清空緩衝區。關於為什麼out可以輸出,是因為當請求結束後即頁面載入要完成了,會自動將緩衝區的內容全部輸出但不清空緩衝區,這也是為什麼緩衝區的剩餘空間會有變化

-get與post都是頁面提交資訊的方式

get:資料在URL中可以看到,適合資料量不大,安全性不高的資料,例如搜尋,查詢等。

post:將使用者的資訊封裝在HTML HEADER內,......,例如註冊,修改,上傳等

使用表單標籤,與使用者互動

網站怎樣與使用者進行互動?答案是使用HTML表單(form)。表單是可以把瀏覽者輸入的資料傳送到伺服器端,這樣伺服器端程式就可以處理表單傳過來的資料。

語法:

提交方式之一: form表單

<form name="標籤名稱"   action="動作/目標地址"   method="提交方式">

</form>講解:

1.<form> :<form>標籤是成對出現的,以<form>開始,以</form>結束。

2.action :瀏覽者輸入的資料被傳送到的地方,比如一個PHP頁面(save.php)。

3.method : 資料傳送的方式(get/post)。

request是對提交的資料進行處理

- request物件

request.setCharacterEncoding("utf-8") 解決中文亂碼問題,無法解決URL傳遞中文出現的亂碼問題,需要配置conf/server.xml檔案。

request.getParameter()可以獲取通過URL傳遞的引數。

request.getParameter()與request.getParameterValues()得到提交的資料

預設提交的是英文字符集,要顯示中文要設定字符集

方法一:request.setCharacterEncoding()設定傳過來的格式(無法用於解決URL傳值)

方法二:修改tomacat的server.xml配置檔案,在配置埠下面加上字符集配置,在Connector標籤下加入一個屬性如下:

URIEncoding=“utf-8”URIEncoding=""(解決URL傳值問題)

例:

<%=request.getParameter("username") %>

<%  

        String [] favorites=request.getParameterValues("favorite");

        for(int i=0;i<favorites.length;i++){

        out.println(favorites[i]+"&nbsp;&nbsp;");

}

<%request.setAttribute("pwd","123456"); %>

獲取密碼:<%=request.getAttribute("pwd") %><br>

請求體的MIME型別:<%=request.getContentType() %><br>

協議型別及版本號:<%=request.getProtocol() %><br>

伺服器主機名:<%=request.getServerName() %><br>

伺服器埠號:<%=request.getServerPort() %><br>

-response 物件

 response 物件包含了響應客戶請求的有關資訊,但在jsp中很少直接用到它。它是httpservletResponse類的例項。response物件具有頁面作用域,即訪問一個頁面時,該頁面內的response物件只能對這次訪問有效,其他頁面的response物件對當前頁面無效。常用方法

string getcharacterEncoding()返回響應用的是何種字元編碼

void setContentType(String type ) 設定響應的mime型別

print Writer getWriter()返回可以向客戶端輸出字元的一個物件(注意比較:printWrite與內建物件的區別

例:

<%@ page language="java"  import="java.util.*,java.io.*" contentType="text/html; charset=UTF-8"%>//PrintWriter 瀏覽器不認識,要匯入io包。

<%

         response.setContentType("text/html;charset=utf-8");//設定響應的MIMI型別

         out.println("<h1>response測試物件</h1>");

         out.println("<hr>");

         //out.flush();//當response.sendRedirect("reg.jsp");時,為out.flush();加註釋否則會丟擲異常

         PrintWriter outer = response.getWriter();//獲得輸出流物件      

         outer.println("大家好,我是response物件輸出流outer物件");

         response.sendRedirect("reg.jsp");//請求重定向:sendRedirect(“跳轉的頁面地址”)重新定向客戶端的請求

%>

注: PrintWriter與內建out物件的區別:

PrintWriter的輸出總是提前於內建out物件,即outer.println();輸出的結果在out.println()的上方

解決方法:out.flush();//強制清空緩衝區,把緩衝區的內容寫到瀏覽器上

-請求轉發和請求重定向的區別

請求重定向是客戶器端行為而請求轉發是伺服器端行為

//請求重定向

         response.sendRedirect("request.jsp");

         //請求轉發

         request.getRequestDispatcher("request.jsp").forward(request, response);

請求重定向:客戶端行為,response.sendRedirect(),本質上等同於2次請求,第一次請求的物件不會儲存,即從reg.jsp中請求跳轉到response.jsp的物件不會儲存,第二次請求將改變位址列,即跳轉到頁面request.jsp

請求轉發:伺服器行為,request.getRequestDispatcher().forward(req.resp);是一次請求,轉發後請求物件會儲存,即reg.jsp的請求跳轉到response.jsp的物件會儲存,位址列的URL不會改變,將request.jsp頁面內容呈現在response頁面中,並將以上物件填入request的相應的位置中。