日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaWeb总结(四)

發布時間:2023/12/2 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb总结(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Servlet發送服務器端響應信息

  Servlet?API中定義一個專門的接口類javax.servlet.http.HttpServletResponse用于創建HTTP響應,包括HTTP協議的狀態行、響應頭以及消息體;

?

HTTP響應示例

設置響應狀態行

  -?狀態行分為HTTP協議、狀態碼和狀態描述三個部分

  -?狀態描述與狀態碼直接相關

  -?HTTP協議由服務器確定?

  -?通過設置狀態碼來實現許多重要功能(可以把用戶重定向到另一個網站,可以指示附加的文檔是圖片、PDF或HTML……)

HTTP狀態碼:

  100-199:表示信息性代碼,標示客戶端應該采取的其他動作,請求正在進行。

  200-299:表示客戶請求成功。

  300-399:表示用于已經移走的資源文件,指示新的地址。

  400-499:表示由客戶端引發的錯誤。

  500-599:表示由服務器端引發的錯誤。

設置狀態碼

  -?使用HttpServletResponse的setStatus()方法?

//setStatus方法的參數是一個整數 //使用HttpServletResponse中的常量 setStatus(HttpServletResponse.SC_NOT_FOUND );

  -?設置狀態代碼返回描述信息

?

response設置狀態碼為404

?

未找到文件web服務器返回404應答

HTTP的響應信息是由狀態行、響應頭、空行和消息體(內容文檔)按照次序組成并以流的方式向瀏覽器發送的。

?

HTTP響應信息按次序組成并向瀏覽器發送數據流

提示:在Servlet規范中沒有規定Servlet必須緩存消息體,因而要在使用PrintWriter輸出消息體前設置狀態碼。

HttpServletResponse為兩種常見的情形提供了專用的方法:

  - sendError方法

  public?void?sendError(int?code,String?message)

  該方法生成一個404應答,同時生成一個簡短的HTML錯誤信息文檔發生給客戶。

  response.sendError(404,"路徑錯誤");

?

sendError結果示意圖

  -sendRedirect方法

  Public?void?sendRedirect(String?url)

  該方法生成一個302應答,同時在Location頭中指示新文檔的URL路徑(類似a標簽跳轉效果,會產生兩次請求和響應)。

設置響應頭

  HttpServletResponse對象用于操縱響應的HTTP頭

  -?containsHeader(String?name):返回一個布爾值,指示是否設置了指定的響應頭。

  -?setHeader(String?name,String?value):用一個給定的名稱和字符串設置響應頭的通用方式。如果響應頭已經被設置,新的值將覆蓋當前的值。在設置值之前可以用containsHeader判斷頭是否存在;

  -?setIntHeader(String?name,int?value):用一個給定的名稱和整型值設置響應頭。如果響應頭已經被設置,新的值將覆蓋當前的值。在設置值之前可以用containsHeader判斷頭是否存在;

  -?setDateHeader(String?name,long?date):?用一個給定的名稱和日期值設置響應頭。這里的日期值應該是反映自1970-1-1日(GMT)以來的精確到毫秒的長整型。如果響應頭已經被設置,新的值將覆蓋當前的值。在設置值之前可以用containsHeader判斷頭是否存在;

  -?addHeader(String?name,String?value):在response中添加一個給定名稱和字符串值的響應頭,而不管是否已經存放在同名的響應頭。該方法允許響應頭有多個值。

  -?addIntHeader(String?name,intvalue):在response中添加一個給定名稱和整型值的響應頭。該方法允許響應頭有多個值。

  - addDateHeader(String?name,long?value):在response中添加一個給定名稱和日期值設置響應頭。這里的日期值應該是反映自1970-1-1日(GMT)以來的精確到毫秒的長整型。該方法允許響應頭有多個值。

  -?setContentType(String?mimeType):用于設置返回給客戶端內容內容的MIME類型。

  -?addCookie(Cookie?cookie):用于向set-Cookie插入一個Cookie。由于在HTTP響應中會存在多個Set-Cookie行,所以沒有對應的setCookie方法。

目的用于告訴客戶端

  -?發送回來的內容的類型?

  -?有多少內容正被發送?

  -?發送內容的服務器的類型?

設置響應消息體

  -?HttpServletResponse對象負責將信息返回給客戶端?

  -?HttpServletResponse對象只產生一個空的HTTP響應

  -?傳回自定義的內容需要使用getWriter()或者getOutputStream()方法?

  -?getWriter()傳送普通文本?

  -?getOutputStream()傳送二進制內容?

傳遞文本流?

  getWriter()方法用于得到一個輸出流?

PrintWriter out = response.getWriter();//與寫HTML一樣,不過需要println和print方法去拼寫 out.println("<html>");out.println("<head>");out.println("<title>Hello World!</title>”); out.println("</html>");out.println("</head>");

傳遞二進制流

  getOutputStream()方法可以對發送到客戶端的信息進行更多控制

  該方法返回javax.servlet.?ServletOutputStream對象?

  ServletOutputStream允許開發者寫原始字節?

  OutputStream比使用PrinterWriter發送文本效率更高

  可以動態地創建任何形式的數字內容?

package?com.java.downLoad;

import?java.io.IOException;

import?java.io.InputStream;

import?javax.servlet.ServletContext;

import?javax.servlet.ServletException;

import?javax.servlet.ServletOutputStream;

import?javax.servlet.http.HttpServlet;

import?javax.servlet.http.HttpServletRequest;

import?javax.servlet.http.HttpServletResponse;

/**

?*?Servlet?implementation?class?DownLaod

?*/

public?class?DownLaod?extends?HttpServlet?{

private?static?final?long?serialVersionUID?=?1L;

protected?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{

  doPost(request,?response);

}

protected?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)?throws?ServletException,?IOException?{

    //獲取文件名字

    String?filename?=?request.getParameter("filename");

    //設置文件MIME類型??

    ServletContext?sc?=?this.getServletContext();

    response.setContentType(sc.getMimeType(filename));??

?????? //設置Content-Disposition,名字為當前時間毫秒數?

?????? InputStream?fiels?=?null;

?????? response.setHeader("Content-Disposition",?"attachment;filename="+System.currentTimeMillis());?

    //獲取文件并且轉化為流

?????? fiels?=?sc.getResourceAsStream("/downLoad/"+filename);

    //傳輸流

    ServletOutputStream?out?=?response.getOutputStream();

    byte[]?buf?=?new?byte[1024];

    int?length?=?0;

    while((length=fiels.read(buf))!=-1){

      out.write(buf,?0?,length);

    }

    //關閉流

    if(out!=null){

      out.close();

      out.flush();

    }

    if(fiels!=null){

      fiels.close();

    }

  }

}

設置請求重定向

  -?可以選擇別的服務器端程序來處理請求

  -?把請求重定向到一個完全不同的URL上

重定向原理

?

瀏覽器發送HTTP請求

?

Servlet把302響應碼和Location響應頭發送給客戶端和瀏覽器

?

瀏覽器根據Location頭中新的URL重新發出HTTP請求

設置自動刷新和等待頁

  -?在指定時間內自動刷新當前頁或到一個新的頁面

  -?根據時間來控制響應?

  -?想在響應中有一個短時間的暫停??

response.setHeader("Refresh",?"time;?URL=url"?);

?

轉載于:https://www.cnblogs.com/HackerBlog/p/5949049.html

總結

以上是生活随笔為你收集整理的JavaWeb总结(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。