<ruby id="d3hdn"><mark id="d3hdn"></mark></ruby>

    <noframes id="d3hdn">
    <address id="d3hdn"></address>
    <span id="d3hdn"></span>

    <sub id="d3hdn"><listing id="d3hdn"><listing id="d3hdn"></listing></listing></sub>

              <form id="d3hdn"></form> <address id="d3hdn"></address>

              <form id="d3hdn"><nobr id="d3hdn"><progress id="d3hdn"></progress></nobr></form><address id="d3hdn"><address id="d3hdn"><listing id="d3hdn"></listing></address></address>

              Servlet&JSP-HTTP服務器響應信息

              2021-09-09來源:徐州房產網正文:Servlet&JSP-HTTP服務器響應信息

              完整代碼請求參照:https://github.com/devway9/java-exercise/tree/master/servlet-jsp

              目錄

              • 1 HTTP號召的格式
              • 2 如何設置狀態代碼
              • 3 HTTP號召報文頭
              • 4 Servlet狀態的持續和頁面的自動牽引
              • 5 使用Servlet分解Excel

              正文

              1 HTTP號召的格式
                1) Web服務器響應的格式由以下內容包含:
              ① 狀態行:由HTTP版本(如HTTP/1.1)+狀態碼+狀態碼對應的信息包含。
              ② 號召報文頭。
              ③ 空行。
              ④ 適當的文檔。

              2 如何設置狀態代碼
                1) 系統自動設置的狀態碼是200。如果需要修改,可以用于HttpServletResponse的以下方法修改:
              ① setStatus:設置任意狀態碼,必須在PrintWriter用于前調用。
              ② sendRedirect:分解302號召以及Location報文頭,重定向到登錄的URL。
              ③ sendError:設置一個錯誤狀態碼(一般為404),以及一段描述信息回到給客戶端。
              ④ 狀態碼一般用于HttpServletResponse的SC_**常量,而不直接使用數字。
                2) HTTP1.1的狀態碼:
              ① 100-199:信息性的標明用戶應當采取的其他動作。
              ② 200-299:請求順利。
              ③ 300-399:重定向。
              ④ 400-499:客戶引起的錯誤。
              ⑤ 500-599:服務器引起的錯誤。
                3) 狀態碼詳解:
              ① 100(Contiune,繼續):如果客戶端發送到100的請求,表示在詢問是否在隨后的催促中可以發送到附件文檔,服務器可以返回100,回應之后,或者返回417告訴瀏覽器不拒絕接受。
              ② 200(OK,一切正常)。
              ③ 202(Accepted,已接受):催促已拒絕接受,但處理未完成。
              ④ 204(No Content,沒有新文檔):瀏覽器之后顯示之前的文檔。
              ⑤ 205(Reset Content,重置內容):回應沒有新的文檔,但瀏覽器必須重置當前文檔。
              ⑥ 301(Moved Permanently,被永久移動):回應文件已橫過別處,新的URL在Loaction號召報文頭中給出。
              ⑦ 302(Found,尋找):類似于301,大多數瀏覽器等同于對待301和302,。用于sendRedirect和refresh不同,sendRedirect不表明中間輸出,可以用作以下場景:
              a) 判斷用戶必須重定向的地址。
              b) 追蹤用戶的行為。
              c) 繼續執行邊界效應,設置cookie等。
              d) response.sendRedirect("http://www.baidu.com")和下面的代碼等價:
              response.setStatus(302);
              response.setHeader("Location","http://www.baidu.com");
              ⑧ 303(See Other,檢查其他文檔):類似于301和302
              ⑨ 304(Not Modified,未再次發生變更):表示緩存的版本是最新的。一般不必要設置該狀態,而是用getLastModified方法。
              ⑩ 307(Temporanry Redirect,臨時重定向):如果接收到303響應,則之后進行GET和POST的重定向,如果接管到307號召,則對GET催促之后重定向,POST催促則不重定向。
              11 400(Bad request,錯誤請求):指出客戶請求中所含語法錯誤。
              12 401(Unauthorize,未許可)。
              13 403(Forbidden,資源不能用):服務器拒絕接受獲取涉及資源。
              14 404(Not Found,未找到):客戶端給定的地址去找不到資源。
              15 405(Method Not Allowed,方法不允許):資源不容許用于該催促方法(GET、POST、HEAD、PUT、DELETE等)。
              16 415(Unsupported Media type,不支持的媒體類型):服務器不知道如何處理附加文件的類型。
              17 417(Expectation Failed,期望不符合):參照狀態100。
              18 500(Internal Server Error,服務器內部錯誤)。
              19 501(Not Implemented,未實現):表示服務器不支持客戶端發送的命令,比如PUT。
              20 503(Service Unavailable,服務不能用):由于服務器無法作出適當,比如線程池或數據庫連接池被占用。
              21 505(HTTP Version Not Supported,不反對的HTTP版本)。

              package com.devway.servlet.response;
              
              import com.devway.servlet.common.BaseServlet;
              
              import javax.servlet.ServletException;
              import javax.servlet.http.HttpServletRequest;
              import javax.servlet.http.HttpServletResponse;
              import java.io.IOException;
              
              /**
               * TestResponseCode class
               *
               * @author devway
               * @date 2017-12-06
               */
              public class TestResponseCode extends BaseServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); //resp.setStatus(204); //resp.setStatus(307); // resp.setHeader("Location","http://www.baidu.com"); //505 //System.out.println(1/0); out.println("測試setStatus:"+resp.getStatus()); //重定向 //resp.sendRedirect("http://www.baidu.com"); //resp.sendError(405,"頁面錯誤"); }
              }
              

                


              3 HTTP響應報文頭
                1) 用于HttpServletResponse的方法設置響應報文頭。
                2) setHeader/addHeader:將指定名稱的響應報文頭原作為登錄的值,set和add方法的區別在于,如果已存在同名的報文頭名字,用于set不會更換報文頭的值,而使用add則是新增一個同名的報文頭。
                3) setDateHeader/addDateHeader:省去將毫米數轉為Date的步驟。
                4) setIntHeader/addIntHeader:省卻將int轉為String的步驟。
                5) setContentType:設置Content-Type報文頭。
                6) setContentLength:設置Content-Length報文頭,在瀏覽器支持持續性HTTP連接時,這個報文頭很有用。
                7) addCookie:插入cookie,沒有setCookie方法。
                8) sendRedirect:將狀態代碼設為302,同時設置Location報文頭。
                9) 報文頭詳解:
              ① Allow:登錄服務器反對的請求方法(GET、POST等),405響應需要用到這個報文頭。
              ② Cache-Control:告訴他客戶端,什么環境可以安全的內存文檔,可以所取以下值
              a) public:文檔可以內存。
              b) private:適用單個用戶,只能存儲在私有緩存中。
              c) no-cache:不能緩存。
              d) no-store:不能內存,且不能存儲在磁盤的臨時目錄中。
              e) must-revalidate:每次用于文檔時,客戶端必須聯系原來的服務器重新驗證文檔。
              f) proxy-revalidate:只限于于共享緩存,其他和must-revalidate相同。
              g) max-age=xxx:xxx秒之后,將該文檔認為過熱,可替代Expires,如果兩個都存在,則max-age優先。
              h) s-mas-age=xxx:共享內存在xx秒之后將文檔認為過熱。
              ③ Connection:如果為close,則命令瀏覽器不要使用持續性HTTP相連,可以省略Content-Length報文頭,如果未指定,則配置文件為持續性連接。
              ④ Content-Disposition:掌控用戶請求扣除的內容存為一個文件的時候提供一個默認的文件名,文件直接在瀏覽器上表明或者在訪問時彈出文件iTunes對話框。
              ⑤ Content-Encodig:頁面傳輸中使用的編碼方式。
              ⑥ Content-Language:文檔使用的語言。
              ⑦ Content-Length:響應的字節數。
              ⑧ Content-Type:設置號召文檔的MIME類型以及字符編碼,MIME一般指定為text/htm,如果字符編碼沒指定,則配置文件為ISO-8859_1。也可用于setContentType方法。少見的MIME類型:
              a) application/msword:Microsoft Word 文檔。
              b) application/pdf: .pdf文件。
              c) application/vnd.ms-excel:excel。
              d) application/x-java-archive:JAR文件。
              e) application/zip:zip文件。
              f) image/gif:GIF圖像。
              g) text/css:HTML層疊樣式表。
              h) text/html:HTML文檔。
              i) text/plain:顯文本。
              j) text/xml:xml文件。
              ⑨ Expires:過期時間。
              ⑩ Last-Modified:文件的最后改動時間,時間單位為毫秒。
              11 Location:重定向地址,狀態代碼在300-399,都應當還包括這個報文頭。
              12 Refresh:指出瀏覽器間隔x秒后,自動刷新頁面,時間單位為秒。response.setIntHeader("Refresh",30);如果要函數調用到新頁面,則設置response.setHeader("Refresh","5;URL="http://www.baidu.com");一般將這部分放入HTML頁面的HEAD中,間接的設置這個報文頭,而不是在服務器表明設置。
              13 Retry-After:和狀態碼503結合用于,告訴他客戶端多久后可以重復請求。
              14 WWW-Authenticate:和401結果使用,告訴瀏覽器應該獲取那種類型的驗證。

              package com.devway.servlet.response;
              
              import com.devway.servlet.common.BaseServlet;
              
              import javax.servlet.ServletException;
              import javax.servlet.http.Cookie;
              import javax.servlet.http.HttpServletRequest;
              import javax.servlet.http.HttpServletResponse;
              import java.io.IOException;
              
              
              /**
               * TestSetHeader class
               *
               * @author devway
               * @date 2017-12-07
               */
              public class TestSetHeader extends BaseServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); //set***方法,如果有同名的報文頭則替換,而add***方法,則即使報文頭已存在,也加到一個同名的新的報文頭 resp.setHeader("headerName ","headerValue"); resp.setDateHeader("headerDate",System.currentTimeMillis()); resp.setIntHeader("headerInt",1001); resp.addHeader("headerName","headerValue1"); resp.addDateHeader("headerDate",System.currentTimeMillis()+1000000); resp.addIntHeader("headerInt",1002); resp.setContentType("text/html;charset=\"utf-8\""); //resp.setContentLength(200); resp.addCookie(new Cookie("c","c1")); //登錄服務器支持的催促方法(GET、POST等),405響應必須中用這個報文頭 resp.setHeader("allow","GET"); //告訴他客戶端,什么環境可以安全的緩存文檔 //resp.setHeader("Cache-Control","no-cache"); resp.setHeader("Cache-Control","public"); //resp.setContentType("application/vnd.ms-excel;charset=utf-8"); //resp.setHeader("Content-Disposition","attachment;filename=1.xls"); //設置內容的過期時間 resp.setDateHeader("Expires",10*1000); println("test"); //resp.setHeader("Refresh","2"); //resp.setHeader("refresh","3;URL=\"http://www.baidu.com\""); //resp.setIntHeader("Refresh",2); }
              }
              

                

              4 Servlet狀態的持續和頁面的自動重載
                1) 對于處理耗時較長的任務,需要以下功能:
              ① 一種橫跨催促存儲數據的方式:對于不屬于客戶的數據,存儲在servlet的字段中;對于用戶專屬的數據,存儲在HttpSession對象中;于其他servlet和jsp需要用到的數據,存儲在ServletContext中。
              ② 一種在催促發送給客戶之后,之后運算的方式:啟動一個線程。
              ③ 一種在計算結果之后后,使瀏覽器得到他的方式:用于Refresh響應報文頭。

              5 使用Servlet生成Excel
                1) 如何創立Excel
              ① Excel支持多種不同格式的輸出:制表符分隔的數據、HTML表格、本地二進制格式。
              ② 構建Excel,用于response.setContentType("application/vnd.ms-excel");
                2) 使用制表符分解Excel

              package com.devway.servlet.response;
              
              import javax.servlet.ServletException;
              import javax.servlet.http.HttpServlet;
              import javax.servlet.http.HttpServletRequest;
              import javax.servlet.http.HttpServletResponse;
              import java.io.IOException;
              import java.io.PrintWriter;
              
              /**
               * TestExcel class
               *
               * @author devway
               * @date 2017-12-07
               */
              public class TestExcel extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("application/vnd.ms-excel"); PrintWriter out = resp.getWriter(); out.println("\tQ1\tQ2\tQ3\tQ4\tTotal"); out.println("Apples\t1\t2\t3\t4\t=SUM(B2:E2)"); out.println("Oranges\t2\t2\t3\t4\t=SUM(B3:E4)"); }
              
              }
              

                


              新氧 新氧 新氧 新氧 新氧 新氧
              精品H动漫无遮挡在线看中文