-
服務器處理請求的流程:
服務器每次收到請求時,都會為這個請求開辟一個新的線程
服務器會把客戶端的請求數(shù)據(jù)封裝到request中校摩,request就是請求數(shù)據(jù)的載體
服務器還會創(chuàng)建response對象蜘拉,這個對象與客戶端連接在一起莲兢,可以用來向客戶端發(fā)出響應
線程:通俗點說冬竟,進程是一個具體的應用程序哲思,線程是進程中的一個分支搏讶,為單獨完成程序中的某一項或一組功能而存在骤肛。
應用程序可以有一個或多個進程,一個進程可以有一個或多個線程窍蓝,其中一個是主線程腋颠。
response其類型為HttpServletResponse
ServletResponse是與協(xié)議無關的類型
HttpServletResponse是和http協(xié)議有關的類型
- 狀態(tài)碼:200表示成功、302表示重定向吓笙、404表示客戶端(訪問的資源不存在)淑玫、500表示服務器端錯誤
sendError(int sc): 發(fā)送錯誤的狀態(tài)碼
sendError(int sc ,String msg):發(fā)送錯誤的狀態(tài)碼,還帶一個錯誤的信息
sendStatus(int sc):發(fā)送成功的狀態(tài)碼
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "AServlet",urlPatterns ="/AServlet")
public class AServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendError(404,"你訪問的數(shù)據(jù)就是不給你看");
}
}
- 響應頭:頭就是一個鍵值對面睛,可能有一個頭一個值絮蒿,也可能有一個頭多個值
setHeader(String name,String value)
:適用于單值得響應頭
response.setHeader("aaa","AAA");
setaddHeader(String name,String value)
:適用于多值得響應頭
response.addHeader("aaa","AAA");
response.addHeader("aaa","AA");
response.addHeader("aaa","A");
setIntHeader(String name,String value)
:適用于int類型的值得響應頭
response.setIntHeader("Content-length","888");
addIntHeader(String name,String value)
:適用于多值得響應頭
setDateHeader(String name, long value)
:適用于單值得毫秒的響應頭
response.setDateHeader("expires",10006060*24);
addDateHeader(String name, long value)
:適用于多值的響應頭
*案例:
發(fā)送302,設置Location頭,完成重定向
response.setHeader("Location", "/JavaWebDay10_1/CServlet");
response.setStatus(302);
定時刷新:設置Refresh頭
//響應體
PrintWriter writer = response.getWriter();
writer.print(歡迎叁鉴,5秒后跳轉)
//設置名為Refresh的響應頭
response.setHeader("Refresh","5;URL=/JavaWebDay10_1/EServlet");
禁用瀏覽器緩存:Cache-Control土涝、pragma、expires
response.setHeader("Cache-Control","no-cache");
response.setHeader("pragma","no-cache");
response.setDateHeader("expires",-1);
<meta>標簽可以充當響應頭:<meta http-equiv="Content-Type" content="text/html";charset="UTF-8">
response的兩個流:
ServletOutputStream幌墓,用來向客服端發(fā)送字節(jié)數(shù)據(jù)但壮;
ServletOutputStream = response.getOutputStream();
PrintWriter,用來向客服端發(fā)送字符數(shù)據(jù),需要設置編碼常侣,兩個流不能同時存在
PrintWriter writer = response.getWriter();
//把一張圖片讀取到字節(jié)數(shù)組中
String path = "路徑";
Fileinputstream in = new FileInputStream(path);
byte[] bytes = IOUtils.toByteArray(in);//讀取輸入流內容的字節(jié)到字節(jié)數(shù)組中
快捷的重定向:sendRedirect("路徑");