My Calendar

2015年1月29日 星期四

HttpServletResponse

HttpServletResponse是Servlet處理好的內容發送到瀏覽器的一個物件.

發送數據到瀏覽器的方法








設定回應標頭的方法



















設定HTTP Status Code的方法






HTTP Status Code

HTTPServletResponse 定義了很多狀態碼













HttpServletResponse常見的應用

1.使用PrintWriter將資料回傳給瀏覽器
import java.io.IOException;
import java.io.PrintWriter;

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


@WebServlet("/demo")
public class Demo extends HttpServlet {

 private static final long serialVersionUID = -7819316605366593662L;

 public Demo() {
        super(); 
 }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  //設定UTF-8編碼
  response.setCharacterEncoding("UTF-8");
  //設定header告訴瀏覽器要以UTF-8的编码显示資料,如果沒有設定,瀏覽器顯示中文字將會出現亂碼
  response.setHeader("content-type", "text/html;charset=UTF-8");
  PrintWriter writer = response.getWriter();
  writer.println("你好");
 }

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

運行結果如下:










2.檔案下載

在網頁開發中下載檔案大家經常使用到的功能,使用HttpServletResponse就可以實現這個功能。話不多說直接上code.

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.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/demo")
public class Demo extends HttpServlet {

 private static final long serialVersionUID = -7819316605366593662L;

 public Demo() {
    super(); 
 }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
 { 
   //1.讀取檔案
   File downloadFile = new File("D:\\測試.jpg");
   //2.下載文件的名稱
   String fileName = downloadFile.getName();

   //3.設定content-disposition標頭讓瀏覽器以下载的形式打開文件
   response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
  
   int len;
   InputStream in = new FileInputStream(downloadFile);
   //3.設定緩衝區
   byte[] buffer = new byte[1024];
  
   //4. 透過response物件獲取OutputStream
   OutputStream os = response.getOutputStream();
 
   //5.將FileInputStream寫入到buffer緩衝區;
   while ((len = in.read(buffer)) > 0) {
    //6.使用OutputStream将緩衝區的資料输出到瀏覽器
    os.write(buffer, 0, len);
   }
  
   os.close();
   in.close();
}

P.S: 檔案是中文名稱要使用URLEncoder.encode方法進行編碼,否則會出現檔案名亂會是亂碼。

運行結果如下:



























3. 產生驗證碼.
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/demo")
public class Demo extends HttpServlet {

 private static final long serialVersionUID = -7819316605366593662L;

 public Demo() {
    super(); 
 }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  
  //设置refresh標頭讓瀏覽器每3秒钟刷新一次
  response.setHeader("refresh", "3");
  //在記憶體產生一張寬60高20的圖片
  BufferedImage image = new BufferedImage(60, 20, BufferedImage.TYPE_INT_RGB);
  Graphics2D g = (Graphics2D)image.getGraphics();//得到圖片
  g.setColor(Color.WHITE);//设置图片
  g.fillRect(0, 0, 60, 20);//背景顏色填滿
  //3.將一個亂數寫在圖片上
  g.setColor(Color.RED);//設定图片上字體的顏色
  g.setFont(new Font(null, Font.BOLD, 20));
  g.drawString(randomNum(), 0, 20);
     //4.設定標頭头控制瀏覽器以图片的方式打開
  response.setContentType("image/jpeg");
  //5.設定响应头控制浏览器不缓存图片数据
  response.setDateHeader("expries", -1);
  response.setHeader("Cache-Control", "no-cache");
  //6.將图片送出給瀏覽器
  ImageIO.write(image, "jpg", response.getOutputStream());
 }

 private String randomNum()
 {
  Random random = new Random();
  String num = random.nextInt(99999)+"";
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < 5-num.length(); i++) 
        sb.append("0");
  
  num = sb.toString()+num;
  return num;
 }

運行結果如下:






沒有留言:

張貼留言