response request

来源:互联网 发布:java编程基础 pdf 编辑:程序博客网 时间:2024/05/21 11:06

response对象

一、简介

 

lWeb服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。

lrequest和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。

1、 HttpServletResponse对象服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

 

void

  

setStatus(int  sc)
  Sets the status code for this response.

  

void

  

addHeader(java.lang.String  name, java.lang.String value)
  Adds a response header with the given name and value.

  

java.io.PrintWrite

  

getWriter()
  Returns a PrintWriter object that can send character text to the client.

  

ServletOutputStream

  

getOutputStream()
  Returns a ServletOutputStream  suitable for writing binary data in the response.

                

 

2、response常见应用

l向客户端输出中文数据

•分别以OutputStream和PrintWriter输出

解决浏览器乱码的方法:

方法一、

    private void test2(HttpServletResponse response)throws IOException {

        response.setHeader("content-type", "text/html;charset=gb2312");

        String str="中国人民";

        response.getOutputStream().write(str.getBytes());

    }

方法二、

    private void test1(HttpServletResponse response)throws IOException,

           UnsupportedEncodingException{

        response.setHeader("content-type", "text/html;charset=utf-8");

        String str="中国人民";

        response.getOutputStream().write(str.getBytes("utf-8"));

    }

 

 

方法三、•多学一招:使用HTML语言里面的<meta>标签来控制浏览器行为

    private void test3(HttpServletResponse response)throws IOException,

           UnsupportedEncodingException{

String data = "中国";

response.getOutputStream().write("<meta http-equiv='content-type'content='text/html;charset=UTF-8'>".getBytes());

        response.getOutputStream().write(data.getBytes("UTF-8"));

    }

 

 

•思考:用OutputStream输出1,为什么用户看到的不是1?

浏览器是字符显示的工具,浏览器得到的是数字1,的解码,但是显示时会从字符编码中寻找数字1所代表的字符,这时就不会看到1了,解决办法如下:

    response.getOutputStream().write("89".getBytes("utf-8"));

指定字符编码或者不指定均可

 

用字符输出流解决乱码问题:

 

private void test4(HttpServletResponse response)throws IOException {

        response.setCharacterEncoding("UTF-8");

        response.setHeader("content-type", "text/html;charset=UTF-8");

        //response.setContentType("text/html;charset=UTF-8");这一句等于上面两句。

      

      

        String data = "中国";

        PrintWriter writer =response.getWriter();

        writer.write(data);

    }

 

l文件下载和中文文件的下载

 

注意 String replaceAll(String regex,String replacement )的第一个参数是正则表达式

如果是中文文件名的话,文件名要经过url编码

    private void down(HttpServletResponse response)throws IOException,

           UnsupportedEncodingException,FileNotFoundException {

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

        String filepath = this.getServletContext().getRealPath("/download/7.jpg");

        OutputStream out =response.getOutputStream();

       File file = new File(filepath);

        if(!file.exists()){

           out.write("对不起,下载资源已被删除!!".getBytes("UTF-8"));

           return;

       }

        String filename =filepath.substring(filepath.lastIndexOf("\\")+1);

        filename = URLEncoder.encode(filename,"UTF-8");

        filename =filename.replaceAll("\\+", "%20");

      

        response.setHeader("content-disposition", "attachment;filename=" + filename);

      

      

        FileInputStream in = new FileInputStream(file);

        OutputStream os =response.getOutputStream();

      

       byte buffer[] = new byte[1024];

       int len = 0;

        while((len=in.read(buffer))>0){

           os.write(buffer, 0,len);

       }

      

        in.close();

    }

 

 

l输出随机图片

 

 

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.io.PrintWriter;

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 ResponsePic extends HttpServlet {

 

       privatestatic final int WIDTH = 130;

       privatestatic final int HEIGHT = 30;

      

      

      

       publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

             

              BufferedImage image = newBufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);

              Graphics graphics = image.getGraphics();

             

              setBackGround(graphics);

             

              setBorder(graphics);

             

              drawRandomLine(graphics);

             

              drawRandomNum((Graphics2D) graphics);

             

             

              response.setDateHeader("Expires",-1);

              response.setHeader("Cache-Control","no-cache");

              response.setHeader("Pragma","no-cache");

              response.setContentType("image/jpeg");

              ImageIO.write(image, "jpg",response.getOutputStream());

             

             

       }

      

       privatevoid setBackGround(Graphics graphics) {

              graphics.setColor(Color.WHITE);

              graphics.fillRect(0, 0, WIDTH, HEIGHT);

             

       }

      

       privatevoid setBorder(Graphics graphics) {

              graphics.setColor(Color.BLUE);

              graphics.drawRect(1, 1, WIDTH-2,HEIGHT-2);

       }

      

       privatevoid drawRandomLine(Graphics graphics) {

              graphics.setColor(Color.GREEN);

              for(inti=0;i<5;i++){

                     int x1 = new Random().nextInt(WIDTH);

                     int y1 = new Random().nextInt(HEIGHT);

                    

                     int x2 = new Random().nextInt(WIDTH);

                     int y2 = new Random().nextInt(HEIGHT);

                    

                     graphics.drawLine(x1, y1, x2, y2);

              }

       }

 

      

       //[\u4e00-\u9fa5]

       privatevoid drawRandomNum(Graphics2D graphics) {

             

              graphics.setColor(Color.RED);

              graphics.setFont(new Font("宋体",Font.BOLD,20));

             

              Stringbase ="\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u7740\u4e2a\u5730\u5230\u5927\u91cc\u8bf4\u5c31\u53bb\u5b50\u5f97\u4e5f\u548c\u90a3\u8981\u4e0b\u770b\u5929\u65f6\u8fc7\u51fa\u5c0f\u4e48\u8d77\u4f60\u90fd\u628a\u597d\u8fd8\u591a\u6ca1\u4e3a\u53c8\u53ef\u5bb6\u5b66\u53ea\u4ee5\u4e3b\u4f1a\u6837\u5e74\u60f3\u751f\u540c\u8001\u4e2d\u5341\u4ece\u81ea\u9762\u524d\u5934\u9053\u5b83\u540e\u7136\u8d70\u5f88\u50cf\u89c1\u4e24\u7528\u5979\u56fd\u52a8\u8fdb\u6210\u56de\u4ec0\u8fb9\u4f5c\u5bf9\u5f00\u800c\u5df1\u4e9b\u73b0\u5c71\u6c11\u5019\u7ecf\u53d1\u5de5\u5411\u4e8b\u547d\u7ed9\u957f\u6c34\u51e0\u4e49\u4e09\u58f0\u4e8e\u9ad8\u624b\u77e5\u7406\u773c\u5fd7\u70b9\u5fc3\u6218\u4e8c\u95ee\u4f46\u8eab\u65b9\u5b9e\u5403\u505a\u53eb\u5f53\u4f4f\u542c\u9769\u6253\u5462\u771f\u5168\u624d\u56db\u5df2\u6240\u654c\u4e4b\u6700\u5149\u4ea7\u60c5\u8def\u5206\u603b\u6761\u767d\u8bdd\u4e1c\u5e2d\u6b21\u4eb2\u5982\u88ab\u82b1\u53e3\u653e\u513f\u5e38\u6c14\u4e94\u7b2c\u4f7f\u5199\u519b\u5427\u6587\u8fd0\u518d\u679c\u600e\u5b9a\u8bb8\u5feb\u660e\u884c\u56e0\u522b\u98de\u5916\u6811\u7269\u6d3b\u90e8\u95e8\u65e0\u5f80\u8239\u671b\u65b0\u5e26\u961f\u5148\u529b\u5b8c\u5374\u7ad9\u4ee3\u5458\u673a\u66f4\u4e5d\u60a8\u6bcf\u98ce\u7ea7\u8ddf\u7b11\u554a\u5b69\u4e07\u5c11\u76f4\u610f\u591c\u6bd4\u9636\u8fde\u8f66\u91cd\u4fbf\u6597\u9a6c\u54ea\u5316\u592a\u6307\u53d8\u793e\u4f3c\u58eb\u8005\u5e72\u77f3\u6ee1\u65e5\u51b3\u767e\u539f\u62ff\u7fa4\u7a76\u5404\u516d\u672c\u601d\u89e3\u7acb\u6cb3\u6751\u516b\u96be\u65e9\u8bba\u5417\u6839\u5171\u8ba9\u76f8\u7814\u4eca\u5176\u4e66\u5750\u63a5\u5e94\u5173\u4fe1\u89c9\u6b65\u53cd\u5904\u8bb0\u5c06\u5343\u627e\u4e89\u9886\u6216\u5e08\u7ed3\u5757\u8dd1\u8c01\u8349\u8d8a\u5b57\u52a0\u811a\u7d27\u7231\u7b49\u4e60\u9635\u6015\u6708\u9752\u534a\u706b\u6cd5\u9898\u5efa\u8d76\u4f4d\u5531\u6d77\u4e03\u5973\u4efb\u4ef6\u611f\u51c6\u5f20\u56e2\u5c4b\u79bb\u8272\u8138\u7247\u79d1\u5012\u775b\u5229\u4e16\u521a\u4e14\u7531\u9001\u5207\u661f\u5bfc\u665a\u8868\u591f\u6574\u8ba4\u54cd\u96ea\u6d41\u672a\u573a\u8be5\u5e76\u5e95\u6df1\u523b\u5e73\u4f1f\u5fd9\u63d0\u786e\u8fd1\u4eae\u8f7b\u8bb2\u519c\u53e4\u9ed1\u544a\u754c\u62c9\u540d\u5440\u571f\u6e05\u9633\u7167\u529e\u53f2\u6539\u5386\u8f6c\u753b\u9020\u5634\u6b64\u6cbb\u5317\u5fc5\u670d\u96e8\u7a7f\u5185\u8bc6\u9a8c\u4f20\u4e1a\u83dc\u722c\u7761\u5174\u5f62\u91cf\u54b1\u89c2\u82e6\u4f53\u4f17\u901a\u51b2\u5408\u7834\u53cb\u5ea6\u672f\u996d\u516c\u65c1\u623f\u6781\u5357\u67aa\u8bfb\u6c99\u5c81\u7ebf\u91ce\u575a\u7a7a\u6536\u7b97\u81f3\u653f\u57ce\u52b3\u843d\u94b1\u7279\u56f4\u5f1f\u80dc\u6559\u70ed\u5c55\u5305\u6b4c\u7c7b\u6e10\u5f3a\u6570\u4e61\u547c\u6027\u97f3\u7b54\u54e5\u9645\u65e7\u795e\u5ea7\u7ae0\u5e2e\u5566\u53d7\u7cfb\u4ee4\u8df3\u975e\u4f55\u725b\u53d6\u5165\u5cb8\u6562\u6389\u5ffd\u79cd\u88c5\u9876\u6025\u6797\u505c\u606f\u53e5\u533a\u8863\u822c\u62a5\u53f6\u538b\u6162\u53d4\u80cc\u7ec6";

             

             

              //30*3.14/180

              intx = 10;

              for(inti=0;i<4;i++){

                     String ch = base.charAt(newRandom().nextInt(base.length())) + "";

                    

                     int degree = new Random().nextInt()%30;

                     graphics.rotate(degree*Math.PI/180, x,20);

                     graphics.drawString(ch, x, 20);

                     graphics.rotate(-degree*Math.PI/180, x,20);

                     x= x +30;

              }

       }

 

       publicvoid doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

 

              doGet(request, response);

       }

 

}

 

html调用页面:

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

  <head>

    <title>login.html</title>

    <meta http-equiv="keywords"content="keyword1,keyword2,keyword3">

    <meta http-equiv="description"content="this is my page">

    <meta http-equiv="content-type"content="text/html; charset=UTF-8">

   

    <script type="text/javascript">

     functionchangeImage(img){

         img.src=img.src + "?" + new Date().getTime();

     }

    </script>

 

  </head>

 

  <body>

    <form action="">

     用户名:<input type="text"name="username"><br/>

     密码:<input type="password"name="password"><br/>

     认证码:<input type="text"name="checkcode"><img src="/day05/servlet/ResponseDemo4"alt="换一张" style="cursor:hand"onclick="changeImage(this)"><br/>

     <input type="submit" value="登陆">

   

    </form>

  </body>

</html>

l发送http头,控制浏览器定时刷新网页(REFRESH)

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

      

        System.out.println("处理登陆!!");

      

        String message = "<meta http-equiv='refresh'content='3;/day05/index.jsp'>恭喜您,登陆成功!!本浏览器将在3秒后跳转,如果没有跳,就点......";

      

        this.getServletContext().setAttribute("message", message);

    this.getServletContext().getRequestDispatcher("/message.jsp").forward(request, response);

 

 

l发送http头,控制浏览器禁止缓存当前文档内容

response.setDateHeader("expires",System.currentTimeMillis()+3600*1000);

String data = "abcddddd";

response.getWriter().write(data);

l通过response实现请求重定向。

•请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。

l应用场景:用户登陆。

 

l实现方式

•response.sendRedirect()

•实现原理:等同于以下代码

•302状态码和location头即可实现重定向

response.setStatus(302);

response.setHeader("location","/day05/login.html");

 

重定向特点:

 

*1.重定向会导致浏览器向服务器发2次请求,(服务器会创建2个request和response)

*2.重定向时,浏览器地址栏会发生变化

 

response细节

lgetOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。

lgetOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。 

例如、

response.getWriter();

response.getOutputStream();

 

lServlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。

lSerlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果7的4g变3g了怎么办 华为路由器的登录密码忘记了怎么办 华为手机有4g但不能上网怎么办 移动4g 手机开密码忘了怎么办 华为安卓8.0屏幕上圆怎么办 苹果5s不能用4g怎么办 电动车的锁住了钥匙丢了怎么办 小米蓝牙耳机青春版开不了机怎么办 小米蓝牙耳机进水了开不了机怎么办 新买的蓝牙耳机开不了机怎么办 蓝牙耳机长时间不用开不了机怎么办 瑞和宝pos机无法连接蓝牙怎么办 手机做话筒连蓝牙音箱不同步怎么办 荣耀畅玩7x触屏不灵怎么办 华为6x屏幕点没反应怎么办 苹果耳机按一下就挂断电话怎么办 华为畅享7忘记账号密码怎么办 华为荣耀8手机外放声音小怎么办 安卓手机耳机减音量不能用怎么办 苹果手机微信语音是耳机模式怎么办 平果手机没声音出现耳机模式怎么办 苹果6s进水了一直耳机模式怎么办 华为手机没声音显示耳机模式怎么办 华为手机没声音出现耳机模式怎么办 安卓手机全民k歌耳返延迟怎么办 华为手机双清后手机开不了机怎么办 荣耀9上面有个耳机标志怎么办 华为p9耳机有一个没有声音怎么办 小米5c手机gps信号弱怎么办 华为8手机时常听常音乐声怎么办 手机用久了变慢了怎么办 免税店买的皮带太短了怎么办 小米手机自拍照片是反的怎么办 华为p20旅行助手被删了怎么办 假如手机点击一个链接是病毒怎么办 华为手机自带铃声没了怎么办 华为手机升级后铃声没了怎么办 华为平板电脑激活锁忘记了怎么办 华为手机不小心删了系统应用怎么办 华为畅想6s开机键坏了怎么办 浏览网页是进入有病毒的网页怎么办