1. 程式人生 > >HttpServletResponse(response和request)

HttpServletResponse(response和request)

客戶端每一次請求Web伺服器,分別建立一個request物件和response物件,要獲取提交的資料找request,向客戶機輸出資料找response

WEB伺服器回送給WEB客戶端的HTTP響應分三個部分:

1、狀態行(HTTP響應的響應狀態行包活HTTP版本、狀態程式碼和提示資訊) 2、響應訊息頭 3、訊息正文

addHeader與setHeader方法 
addIntHeader與setIntHeader方法 
addDateHeader與setDateHeader方法 
setContentLength方法
setContentType方法:用於設定Servlet輸出內容的MIME型別,對於HTTP協議來說,就是設定Content-Type響應頭欄位的值。如“text/html;charset=UTF-8”
setCharacterEncoding方法:用於設定輸出內容的MIME宣告中的字符集編碼,對HTTP協議來說,就是設定Content-Type頭欄位中的字元編碼部分。

package www.csdn.net.daya35.servlet;
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 DemoServlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//設定響應的狀態碼
response.setStatus(response.SC_FOUND);
//重定向
response.sendRedirect("./index.jsp");*/
try {
int i=1/0;
} catch (Exception e) {
e.printStackTrace();
//設定錯誤
response.sendError(response.SC_NOT_FOUND,e.getMessage());
}
//設定頭資訊
response.setIntHeader("status", 500);//
response.setHeader("content-length", "10");//內容長度
response.setHeader("date", "2010-10-10");//響應日期

               response.setContentType("text/html;charset=UTF-8");

response.setHeader("content-type", "texy/html;charset=UTF-8");
response.setContentLength(20);
response.setCharacterEncoding("UTF-8");
response.getWriter().print("中國,我愛你!!");
//以下載出出現
response.setContentType("text/htmlxx;charset=UTF-8");
response.getOutputStream().write(97);

//response.getWriter().write(98+"");

}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}


}

response常見應用

向客戶端輸出中文資料 (分別以OutPutStream和printWriter輸出)

package www.csdn.net.daya35.servlet;


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 DemoServlet2 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
        //頭響應
    response.setContentType("text/html");
response.getOutputStream().write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'>".getBytes());
//"軍哥".getBytes() 以gb2312編碼開啟會亂碼
response.getOutputStream().write("軍哥".getBytes("UTF-8"));
}
public void test3(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
        //頭響應
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//"軍哥".getBytes() 以gb2312編碼開啟會亂碼
response.getWriter().print("軍哥x");
}
public void test2(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//頭響應
response.setContentType("text/html;charset=UTF-8");
//"軍哥".getBytes() 以gb2312編碼開啟不會亂碼
response.getOutputStream().write("軍哥xxx".getBytes("UTF-8"));

}
public void test1(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
//"軍哥".getBytes() 以gb2312編碼開啟會亂碼
response.getOutputStream().write("軍哥xxxx".getBytes("UTF-8"));
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    this.doGet(request, response);
}
}

檔案下載(先在WEB-INF建一個res資料夾拷貝一張圖片)

package www.csdn.net.daya35.servlet;


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class DemoServlet3 extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


//設定編碼
response.setCharacterEncoding("UTF-8");
//1.設定響應型別
response.setContentType("image/jpeg");

//2.獲取下載的資源
//獲取路徑
String path = this.getServletConfig().getServletContext().getRealPath("/res/h.jpg");
 
System.out.println(path);
//獲取檔名稱 
String fileName=path.substring(path.lastIndexOf("\\")+1);

//設定瀏覽器以下載的方式開啟資料
response.setHeader("content-disposition", "attachment;fileName="+URLEncoder.encode(fileName, "UTF-8"));
//URLEncoder.encode 經過URL編碼(UTF-8)
//轉換成檔案物件
File file = new File(path);
//建立流物件
   InputStream is = new FileInputStream(file);
   
   //3.寫出
   //輸出流物件
   OutputStream os =  response.getOutputStream();
   //定義讀取的長度
   int len=0;
   //定義緩衝區
   byte buffer[]= new byte[1024];
   //迴圈讀取
   while((len=is.read(buffer))!=-1){
   //寫入
   os.write(buffer, 0, len);
   }
  
   //立即寫入
   os.flush();
   //關閉操作
   os.close();
  
  
}


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

this.doGet(request, response);
}


}

輸出隨機圖片

package www.csdn.net.day36.servlet;


import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;


import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ImgServlet extends HttpServlet {






private static final int WIDTH = 0;
private static final int HEIGHT = 0;




public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


//禁止瀏覽器快取
response.setHeader("expires","0" );
response.setHeader("Cache-control", "no-cache");
response.setHeader("Pragma", "no-cache");


//1通知瀏覽器以圖片的方式開啟資料
response.setContentType("image/jpeg");
final int WIDTH=40;
final int HEIGHT=20;

//2建立圖片
BufferedImage image=new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);

//3.得到圖形繪製的物件
Graphics g=image.getGraphics();

//設定背景顏色
setBackGroud(g);
//設定邊框
setBorder(g);

//繪製內容
drawContent(g);

//繪製干擾線
drawDistbLine(g);

//把圖片顯示繪製瀏覽器
ImageIO.write(image, "jpeg", response.getOutputStream());
String resourse="\u7684\u4e00\u4e86\u6211\u4e0d\u5728\u4eec\u6765";

//獲取字元的長度
int length=resourse.length();
//隨機操作物件
Random r=new Random();
//儲存字元的物件
StringBuffer sb=new StringBuffer();


for(int i=0;i<4;i++){
//隨機產生數字
int index=r.nextInt(length);
//獲取字元
char c=resourse.charAt(index);
//拼接字元
sb.append(c);
}
g.setColor(Color.DARK_GRAY);
g.drawString(sb.toString(), 20, 20);
}
/***
* 繪製內容
* @param g
*/
private void drawContent(Graphics g) {





}


/***
* 繪製干擾線
* @param g
*/

private void drawDistbLine(Graphics g) {
g.setColor(Color.BLACK);
Random r=new Random();
for(int i=0;i<4;i++){
int x1=r.nextInt(WIDTH);
int y1=r.nextInt(HEIGHT);
int x2=r.nextInt(WIDTH);
int y2=r.nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}

}




private void setBorder(Graphics g) {
g.setColor(Color.black);
g.fillRect(0, 0, WIDTH-2,HEIGHT-2 );

}




private void setBackGroud(Graphics g) {
//繪製矩形
g.setColor(Color.BLUE);
g.fillRect(0, 0, WIDTH, HEIGHT);

}







}