發送數據到瀏覽器的方法
設定回應標頭的方法
設定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; }
運行結果如下:
沒有留言:
張貼留言