javaweb-response

請求對象和響應對象的原理:
    request 和response 對象都是由服務器創建,管理,銷燬.  
    由我們來使用.
   繼承體系結構:
  ServletRequest(接口)<--------繼承<-------HttpServletRequest(接口)<--------實現 org.apache.catalina.connector.RequestFacade@6049a827




  ServletResponse(接口)<---------繼承---  HttpServletResponse(接口)<-------------實現------org.apache.catalina.connector.ResponseFacade@3bec9d4




response:設置響應消息
  設置響應行: HTTP/1.1   200   ok
setStatus(int code);設置響應狀態碼
重定向  302
特點:1.兩次請求,兩次響應
         2.地址欄發生變化
        3.不僅可以訪問內部資源,也可訪問外部資源


      代碼:
// 設置狀態碼 302 重定向
response.setStatus(302);
// 設置響應頭 location
response.setHeader("location","http://127.0.0.1:8080/MyServlet/index.jsp");
// 以上兩步可以合成一個簡便方法
response.sendRedirect("http://www.baidu.com");



                  設置響應頭: 例如:content-type:text/html;charset=utf-8
setHeader(String headName,String headValue); 設置響應頭的名稱和值
setDateHeader(String name,long date); 設置日期頭
setIntHeader(String name,int count); 設置數字頭
設置響應體:響應體響應的是數據  得通過流的方式
                獲取輸出流寫出數據

**PrintWriter getWriter();發送字符數據的對象


// 爲了防止亂碼,我們設置一下服務器對字符流的編碼 默認服務器用的是ISO-8859-1
// 所以在獲取流之前告訴服務器用什麼編碼
response.setCharacterEncoding("utf-8");
//告訴瀏覽器我們用的是什麼編碼 ,好讓瀏覽器用響應的編碼去解碼
response.setHeader("content-type","text/html;charset=utf-8");
//以上兩個方法可以合二爲一
response.setContentType("text/html;charset=utf-8");//作用:設置字符打印輸出流的編碼,並告訴瀏覽器用相應的編碼去解碼



**ServletOutputStream getOutputStream(); 發送字節數據的對象
 
// 獲取字節流 用流向瀏覽器寫出一張圖片
ServletOutputStream sos = response.getOutputStream();
// 獲取圖片的真實路徑
String realPath = this.getServletContext().getRealPath("/302.png");
// 獲取輸入流讀取圖片
FileInputStream fis = new FileInputStream(new File(realPath));
byte[] by = new byte[1024];
int len = 0;
while ((len = fis.read(by)) != -1) {
sos.write(by, 0, len);
}
//第三方jar包可以進行一個流的對拷
IOUtils.copy(fis,sos);

  小案例:驗證碼
int width = 100;
int height = 50;
//1.創建圖片
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

//2.修飾圖片
//2.1設置背景色
Graphics g = image.getGraphics();//獲取畫筆
g.setColor(Color.PINK);//設置顏色
g.fillRect(0, 0, width, height);//填充背景色

//2.2畫邊框
g.setColor(Color.BLUE);
g.drawRect(0, 0, width - 1, height - 1);

//2.3寫入驗證碼
g.setColor(Color.RED);
/*
g.drawString("A", width/5 * 1, height/2);
g.drawString("C", width/5 * 2, height/2);
g.drawString("I", width/5 * 3, height/2);
g.drawString("D", width/5 * 4, height/2);
*/
String msg = "abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789";
Random ran = new Random();
for (int i = 1; i <= 4; i++) {
int index = ran.nextInt(msg.length());//獲取msg的隨機角標
g.drawString(String.valueOf(msg.charAt(index)), width/5 * i, height/2);
}
//2.4畫干擾線
g.setColor(Color.GREEN);
//g.drawLine(0, 0, width, height);
for (int i = 0; i < 5; i++) {
int x1 = ran.nextInt(width);
int x2 = ran.nextInt(width);
int y1 = ran.nextInt(height);
int y2 = ran.nextInt(height);
g.drawLine(x1, y1, x2, y2);
}




//3.將圖片數據寫入response輸出流中
ImageIO.write(image, "jpg", response.getOutputStream());










request 對象





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章