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頭欄位中的字元編碼部分。
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.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);
}
}