1.Response html
1.1 Response信息分析 瀏覽器
1.1.1 響應行(響應的協議 響應的狀態嗎 響應的描述) 緩存
響應的狀態碼: 服務器
1XX:用戶請求成功,可是服務器端沒有響應 dom
2XX:用戶請求成功,且服務器端給了正確的響應 post
3XX:訪問地址發生臨時改變 字體
302:重定向 編碼
瀏覽器請求兩次,地址欄的地址發生改變,顯示的是最後的頁面內容 spa
304:緩存 htm
4XX:客戶端錯誤
404:路徑錯誤
5XX:服務器端錯誤
設置狀態碼的方法:
(1)設置正確的狀態碼:setStatus();
(2)設置錯誤的狀態碼:sendError(狀態碼,[文字提示]);
1.1.2 響應頭
設置響應頭的方法:
(1)setHeader(key,value);若是有就覆蓋,沒有就添加
(2)addHeader(key,value);不進行覆蓋,直接添加
1.1.3 響應正文
(1)response.getwriter():輸出字符流
(2)response.getOutputStream();輸出字節流,多用於驗證碼及上傳下載
備註:輸出字符流與輸出字節流不能同時使用
1.2 Response的生命週期:一次完整的請求到響應結束
1.3 Response的亂碼處理方法:
添加:response.setContentType("text/html;charset=utf-8");
以此指定解碼方式爲utf-8;
1.4 小案例:驗證碼
//1.設置畫布的寬高
int height=30;
int width=80;
//2.新建一個畫布對象
BufferedImage im=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//3.新建一個畫筆對象
Graphics gs=im.getGraphics();
//3.1設置背景色
gs.setColor(Color.LIGHT_GRAY);
//3.2設置字體樣式、大小
gs.setFont(new Font("微軟雅黑",Font.ITALIC, 26));
//3.3將畫布展平
gs.fillRect(0, 0, width, height);
//4.畫出圖像
//gs.drawString("1234", 0, height);
Random rd=new Random();
String[] strs={"a","b","c","d","e","f","g","h","i","j",
"k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
String b;
int a;
for(int i=0;i<4;i++){
a= rd.nextInt(10);
if(a%2==0){
b = rd.nextInt(10)+"";
}else{
a = rd.nextInt(26);
b = strs[a];
}
gs.setColor(new Color(rd.nextInt(256), rd.nextInt(256), rd.nextInt(256)));
gs.drawString(""+b, 20*i, height-rd.nextInt(10));
}
//畫一些干擾線
int x1,y1,x2,y2;
for(int j=0;j<15;j++){
x1=rd.nextInt(80);
y1=rd.nextInt(30);
x2=x1+rd.nextInt(5);
y2=y1+rd.nextInt(5);
gs.setColor(new Color(rd.nextInt(256), rd.nextInt(256), rd.nextInt(256)));
gs.drawLine(x1, y1,x2, y2);
}
//5.刷出圖像
gs.dispose();
ImageIO.write(im, "jpeg", new File("f:/a.jpg")); //存儲到硬盤上
ImageIO.write(im, "jpeg", response.getOutputStream());//打印到頁面上
2.Request
2.1 Request信息分析
2.1.1請求行
請求方式(get/post) 咱們請求的資源路徑 協議
獲取請求的方式:String method = request.getMethod();
獲取資源的路徑:String requestURI = request.getRequestURI();
獲取請求的協議:String protocol = request.getProtocol();
獲取資源名:String contextPath = request.getContextPath();
獲取請求資源路徑:StringBuffer stringBuffer = request.getRequestURL();
獲取用戶的地址:String addr = request.getRemoteAddr();
2.1.2 請求頭
request.getHeader("host") ; 經過請求頭的name 獲得相應的請求的值
Enumeration enu = request.getHeaderNames(); 獲得全部的請求頭的name
2.1.3 請求體
request.getParameterMap()
map{String[name的屬性值],String[](value) }
map{「username」,String[](ssss)}
獲得用戶的請求
request.getParameter("username");//根據name的屬性值獲得相應提交信息
request.getParameterNames(); //獲得表單標籤name的屬性值
request.getParameterMap();//將用戶的請求信息放到map中
request.getParameterValues("xxx");//獲取checkbok中的值
2.2 request的亂碼問題
緣由:
提交信息===》瀏覽器按照utf-8進行編碼===》服務器按照iso-8859-1的形式進行解碼
亂碼中文====》按iso-8859-1編碼===》按照utf-8的格式進行解碼===》提交信息
2.2.1 post請求的亂碼解決方案
request.setCharacterEncoding("utf-8");
2.2.2 get請求的亂碼解決方案
String str1 = new String (xxx.getBytes("iso-8859-1"),"utf-8");
2.3request請求轉發
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/xx");
requestDispatcher.forward(request, response);
或:request.getRequestDispatcher("/yu2").forward(request, response);
特色:
1.地址欄中顯示的地址是原始請求的地址
2.顯示的內容是轉發後的頁面的內容
3.原始請求地址中的內容不會顯示出來
4.瀏覽器只訪問一次服務器
2.4request請求包含
request.getRequestDispatcher("/yu2").include(request, response)
特色:
1.將兩個Servlet合併,兩個頁面的信息都顯示。
2.request在相互跳轉的多個servlet間進行共享。