服務(wù)器每次收到請求都會開辟新線程,把客戶端請求數(shù)據(jù)放到request,還會創(chuàng)建response給客戶端發(fā)送響應(yīng)。
HttpServletResponse:常用方法setHeader(String,String),setStatus(int),
重定向:setHeader("Location","requesturi")&setStatus(302)? ? sendRedirect(String)
刷新:setHeader("Refresh","3;requesturi")
getWriter和getOutputStream方法互斥,一起用會拋出IllegalStateException
HttpServletRequest:常用方法? getRemoteAddr(),getHeader(String)
獲取請求URL? http://localhost:8080/day10/AServlet?username=zhangsn&password=123
getScheme() 協(xié)議 http? ? ? ? ????????getServerName() 服務(wù)器名 localhost? ? ? ? getServletPort端口 8080? ????????? getContextPath()項目名/day10? ? ? ? ? ? ? ? getServletPath()Servlet路徑/AServelt? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? getQueryString()參數(shù)username=zhangsn&password=123? ? ? ? ? ? getRequestURI():/項目名+/servlet路徑? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? getRequestURL():不含參數(shù)的全部
獲取請求參數(shù):getParameter(String)單個,getParamaterValues (checkbox)? ? ? ? getParameterMap()所有請求參數(shù)
***Map hobby=request.getParameterMap();
for (String s1 : hobby.keySet()) {
String[] value=hobby.get(s1);
out.print(s1+":"+Arrays.toString(value));}
請求轉(zhuǎn)發(fā),請求包含區(qū)別:轉(zhuǎn)發(fā)forward 包含include。轉(zhuǎn)發(fā)AServlet留頭不留體,包含AServlet留頭留體.
請求轉(zhuǎn)發(fā)和重定向區(qū)別:
1.請求轉(zhuǎn)發(fā)一次請求一次響應(yīng)? ? ? ? 2.請求轉(zhuǎn)發(fā)地址欄不變化? ? ? ? 3.request.getRequestDispatcher("/Servlet名").forward(req,res) 只能轉(zhuǎn)發(fā)到本項目? ? ? ?4.請求轉(zhuǎn)發(fā)是服務(wù)器行為,只需給出Servlet路徑

1.重定向2次請求2次響應(yīng)? ? ? ? 2.重定向后地址欄會發(fā)生改變? ? ? ? 3.response.sendRedict("/項目名/servlet路徑")或可以重定向到http網(wǎng)頁? ? ? ?

編碼問題:
response.setCharsetEncoding("utf-8")表示以utf-8的編碼編寫
response.setHeader("Content-Type":"text/html;charset=utf-8")告訴瀏覽器服務(wù)器使用的是什么編碼
***response.setContentType("text/html;charset=utf-8")
post請求:在獲取參數(shù)前調(diào)用request.setCharacterEncoding("utf-8")
get請求:String name=request.getParamater("name");? ? byte[] bytes=name.getBytes["iso8859-1"]; name=new String(bytes,"utf-8")