①手動去設置HTTP響應行中的狀態碼,這里用到了response的setStatus(int sc);這個方法
package com.itheima.line;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class StatusServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//手動去設置HTTP響應行中的狀態碼response.setStatus(1014);//這里的狀態碼設置為1014}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
建立的工程如下:
最后的結果如下:
②通過response設置響應頭
addHeader(String name, String value)
addIntHeader(String name, int value)
addDateHeader(String name, long date)
setHeader(String name, String value) 重點
setIntHeader(String name, int value)
setDateHeader(String name, long date)
其中,add表示添加,而set表示設置
為編輯之前的
package com.itheima.header;import java.io.IOException;
import java.util.Date;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class HeaderServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Date date = new Date();//設置響應頭response.addHeader("name", "beyondyy");//若重復,則接著添加response.addHeader("name", "beyondwsq");response.addIntHeader("age", 19);response.addDateHeader("birthday", date.getTime());}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
編輯之后的結果:
同樣的道理,add表示有相同的往后接著添加,set只保留一個,前面的會被后面的給取代。
③重定向(302)
老版
重定向:說白了就是,當你訪問servlet1時,它沒有資源,它給你說servlet2有,然后你就會再訪問servlet2。
重定向 狀態碼 302
響應頭 Location (代表重定向地址)
//servlet1
package com.itheima.header;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Servlet1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//沒有響應資源 告知客戶端去重定向到servlet2//1.設置狀態碼為302response.setStatus(302);//2.設置一個響應頭Locationresponse.setHeader("Location", "/WEB14/servlet2");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
//servl2
package com.itheima.header;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Servlet2 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().write("hello beyondsq...");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
由于重定向的方法每次都那么寫麻煩,javaEE進行封裝成一個叫重定向的方法sendRedirect(url);
封裝之后的servlet1
新版
//servlet1
package com.itheima.header;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Servlet1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//沒有響應資源 告知客戶端去重定向到servlet2//封裝成一個重定向的方法sendRedirect(url);response.sendRedirect("/WEB14/servlet2");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
④定時刷新(跟重定向一樣,就是多了一個時間延遲而已)
//refresh
package com.itheima.header;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class RefreshServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//設置定時刷新的頭response.setHeader("refresh", "5;url=//www.baidu.com");//5s之后再跳轉到url為百度的地址}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
⑤js完成頁面的定時跳轉
案例:5秒后自動跳轉到百度
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">window.onload = function(){var time = 5;var secondEle = document.getElementById("second");var timer = setInterval(function(){secondEle.innerHTML = time;time--;if(time==0){clearInterval(timer); location.href="http://www.baidu.com";}},1000);//1000ms表示1s變一次}
</script>
</head>
<body>恭喜你,注冊成功,<span style="color:red" id="second">5</span>秒后跳轉。如不跳轉,請點擊<a href="http://www.baidu.com">這里</a>
</body>
</html>
⑥通過response設置響應體
舊
//text
package com.itheima.content;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TextServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//設置response查詢的碼表response.setCharacterEncoding("UTF-8");//通過一個頭Content-Type告知客戶端使用何種碼表進行解碼response.setHeader("Context-Type", "text/html;charset=UTF-8");//文本為HTML類型,編碼為UTF-8 PrintWriter writer = response.getWriter();writer.write("原諒我這一生不羈放縱愛自由wsq");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
工程創建
新(進行代碼封裝之后)
package com.itheima.content;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TextServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//進行方法封裝之后 response.setContentType("text/html;charset=UTF-8");PrintWriter writer = response.getWriter();writer.write("原諒我這一生不羈放縱愛自由wsq");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
牢記這行代碼即可:
response.setContentType(“text/html;charset=UTF-8”);
⑦response的outputstream來獲得服務器上的圖片
響應頭設置字節
ServletOutputStream getOutputStream()
獲得字節流,通過該字節流的write(byte[] bytes)可以向response緩沖區中寫入字 節,在由Tomcat服務器將字節內容組成Http響應返回給瀏覽器。
//byte
package com.itheima.content;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class ByteServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//使用response獲得字節輸出流ServletOutputStream out = response.getOutputStream();//獲得服務器上的圖片String realPath = this.getServletContext().getRealPath("a.jpg");//相對地址,相對web應用的InputStream in = new FileInputStream(realPath);int len = 0;byte[] buffer = new byte[1024];while((len = in.read(buffer))>0){out.write(buffer,0,len);}in.close();out.close(); }public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}