HttpServletResponse

web服务器接收到客户的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse

  • 如果要获取客户端请求过来的参数:找HttpServletRequest
  • 如果要给客户端响应一些信息:找HttpServletResponse

1、简单分类

负责向浏览器发送数据的方法

ServletOutputStream getOutputStream() throws IOException;PrintWriter getWriter() throws IOException;

负责向浏览器发送一些响应头方法

    void setCharacterEncoding(String var1);void setContentLength(int var1);void setContentLengthLong(long var1);void setContentType(String var1);void setDateHeader(String var1, long var2);void addDateHeader(String var1, long var2);void setHeader(String var1, String var2);void addHeader(String var1, String var2);void setIntHeader(String var1, int var2);

响应的状态码

 int SC_CONTINUE = 100;int SC_SWITCHING_PROTOCOLS = 101;int SC_OK = 200;int SC_CREATED = 201;int SC_ACCEPTED = 202;int SC_NON_AUTHORITATIVE_INFORMATION = 203;int SC_NO_CONTENT = 204;int SC_RESET_CONTENT = 205;int SC_PARTIAL_CONTENT = 206;int SC_MULTIPLE_CHOICES = 300;int SC_MOVED_PERMANENTLY = 301;int SC_MOVED_TEMPORARILY = 302;int SC_FOUND = 302;int SC_SEE_OTHER = 303;int SC_NOT_MODIFIED = 304;int SC_USE_PROXY = 305;int SC_TEMPORARY_REDIRECT = 307;int SC_BAD_REQUEST = 400;int SC_UNAUTHORIZED = 401;int SC_PAYMENT_REQUIRED = 402;int SC_FORBIDDEN = 403;int SC_NOT_FOUND = 404;int SC_METHOD_NOT_ALLOWED = 405;int SC_NOT_ACCEPTABLE = 406;int SC_PROXY_AUTHENTICATION_REQUIRED = 407;int SC_REQUEST_TIMEOUT = 408;int SC_CONFLICT = 409;int SC_GONE = 410;int SC_LENGTH_REQUIRED = 411;int SC_PRECONDITION_FAILED = 412;int SC_REQUEST_ENTITY_TOO_LARGE = 413;int SC_REQUEST_URI_TOO_LONG = 414;int SC_UNSUPPORTED_MEDIA_TYPE = 415;int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;int SC_EXPECTATION_FAILED = 417;int SC_INTERNAL_SERVER_ERROR = 500;int SC_NOT_IMPLEMENTED = 501;int SC_BAD_GATEWAY = 502;int SC_SERVICE_UNAVAILABLE = 503;int SC_GATEWAY_TIMEOUT = 504;int SC_HTTP_VERSION_NOT_SUPPORTED = 505;

常用的响应状态码

200 : 请求响应成功 200

3xx : 请求重定向

  • 重定向:你重新到我给你新位置去;

4xx:找不到资源404

  • 资源不存在;

    5xx:服务器代码错误500 502:网关错误

常见应用:

向浏览器输出消息

下载文件

  1. 要获取下载文件的地址

  2. 下载的文件名是啥?

  3. 设置想办法让浏览器能够支持下载我们需要的东西

  4. 获取下载文件的输入流

  5. 创建缓冲区

  6. 获取OutputStream

  7. 将FileOutputStream流写入到buffer缓冲区

  8. 使用OutputStream将缓冲区中的数据输出到客户端!

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//        1. 要获取下载文件的地址String path = "D:\\JavaProject\\com.java.lixuan\\response\\src\\main\\resources\\繁芜.png";System.out.println("下载文件的地址"+path);//        2. 下载的文件名是啥?String filename = path.substring(path.lastIndexOf("\\") + 1);//        3. 设置想办法让浏览器能够支持(Content-disposition)下载我们需要的东西,中文文件名 URLEncoder.encode编码,否则有可能乱码resp.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(filename,"UTF-8"));//        4. 获取下载文件的输入流FileInputStream in = new FileInputStream(path);//        5. 创建缓冲区int len = 0;byte[] buffer = new byte[1024];//        6. 获取OutputStreamServletOutputStream out = resp.getOutputStream();//        7. 将FileOutputStream流写入到buffer缓冲区while((len=in.read(buffer))>0){out.write(buffer,0,len);}in.close();out.close();
}

验证码功能

验证怎么来的?

  • 前端实现
  • 后端实现,需要用到Java的图片类,生产一个图片
package com.lixuan.Servlet;import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;public class ImageServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//如何让浏览器5秒刷新一次;resp.setHeader("refresh","3");//在内存中创建图片BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);//得到图片Graphics2D g = (Graphics2D) image.getGraphics();g.setColor(Color.white);g.fillRect(0,0,80,20);//给图片写数据g.setColor(Color.blue);g.setFont(new Font(null,Font.BOLD,20));g.drawString(makeNum(),0,20);//告诉浏览器这个请求用图片的方式打开resp.setContentType("image/jpeg");//网站有缓存,不让浏览器缓存resp.setDateHeader("expries",-1);resp.setHeader("Cache-Control","no-cache");resp.setHeader("Pragma","no-cache");//把图片写给浏览器ImageIO.write(image,"jpg",resp.getOutputStream());}//生成随机数private String makeNum(){Random random = new Random();String num = random.nextInt(9999999) + "";StringBuffer sb = new StringBuffer();for (int i = 0; i < 7-num.length(); i++) {sb.append("0");}num = sb.toString() + num;return num;}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

实现重定向

一个web资源收到客户端请求后,他会通知客户端去访问另外一个web资源,这个过程叫做重定向

常见场景:

  • 用户登录

    void sendRedirect(String var1) throws IOException;
    
public class RedirectServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {/*resp.setHeader("Location","/r/img");resp.setStatus(302);*/resp.sendRedirect("/r/img");//重定向}

面试题:请你聊聊重定向和转发的区别?

相同点

  • 页面会实现跳转

不同点

  • 请求转发的时候,url不会发生变化
  • 重定向的时候,url地址栏会发生改变
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("pwd");PrintWriter out = resp.getWriter();out.println("username");out.println("password");//重定向的时候一定要注意路径问题,否则会404resp.sendRedirect("/Success.jsp");}//Success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>成功</title><h1>Success</h1>
</head>
<body>
</body>
</html>

提交后进入Success.jsp页面

HttpServletRequest

HttpServletRequest 代表客户端的请求,用户通过Http协议访问服务器,Http请求中的所有信息都被封装到HttpServletRequest ,通过这个HttpServletRequest 方法,获取客户端的所有信息;

1、获取前端传递的参数,请求转发

//返回String[]
req.getParameterValues(String s)
//返回String
req.getParameter(String s)
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setCharacterEncoding("UTF-8");String username = req.getParameter("username");String password = req.getParameter("password");String[] hobbies = req.getParameterValues("hobby");System.out.println(username);System.out.println(password);System.out.println(Arrays.toString(hobbies));//请求转发req.getRequestDispatcher("/Success.jsp").forward(req,resp);
}

面试题:请你聊聊重定向和转发的区别?

相同点

  • 页面会实现跳转

不同点

  • 请求转发的时候,url不会发生变化 307
  • 重定向的时候,url地址栏会发生改变 302

HttpServletResponse相关推荐

  1. HttpServletResponse对象(一)

    web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象. request和response对象既然代表请求和响应,那么我 ...

  2. HttpServletResponse,HttpServletRequest详解

    HttpServletResponse,HttpServletRequest详解 1.相关的接口 HttpServletRequest HttpServletRequest接口最常用的方法就是获得请求 ...

  3. Maven项目下HttpServletRequest 或 HttpServletResponse需引用的依赖包

    转载: http://xyly624.blog.51cto.com/842520/865630/ Maven项目下HttpServletRequest 或 HttpServletResponse需引用 ...

  4. 服务器响应的生成:HTTP响应报头——HttpServletResponse接口的应用

    一,响应报头 响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息 常用的响应报头 Location Content-T ...

  5. 跟小博老师一起学Servlet ——Servlet之HttpServletResponse

    2019独角兽企业重金招聘Python工程师标准>>> 通过前面的学习,我们知道请求到达容器后容器会创建HttpServletRequest实例,并将请求的信息保存到实例中.在创建请 ...

  6. javaWeb学习总结(4)- HttpServletResponse

    一.简介: Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和 ...

  7. Struts2教程6:在Action类中获得HttpServletResponse对象的四种方法

    在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得H ...

  8. HttpServletrequest 与HttpServletResponse总结

    转载 http://www.cnblogs.com/liuyandeng/p/5336649.html HttpServletrequest 与HttpServletResponse总结 如果说DOM ...

  9. Servlet--05--HttpServletRequest; HttpServletResponse

    HTTP Servlet Request方法详解: 我们创建一个Request Servlet类,并使其继承HTTP Servlet类,然后重写service方法. 通过下列的各方法,我们可以获取,浏 ...

  10. javaweb学习总结(八)——HttpServletResponse对象(二)

    一.HttpServletResponse常见应用--生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类, 生成随机图片范例: 1 package gacl ...

最新文章

  1. 全球最大规模学术不端调查显示,53%的博士生会从事有问题的研究
  2. ***正传——著名网络安全人士郭鑫成长经历
  3. typedef的详细用法
  4. 香帅的北大金融学课笔记16 -- 公司决策
  5. 接口-----java
  6. 面试题,你手里有几个offer?
  7. Docker学习总结(43)——Docker Compose 搭建Mysql主从复制集群
  8. 《编码规范和测试方法——C/C++版》作业 ·003——宏定义作用整理、设计删除数组元素的函数
  9. Qt5中this application has requested the runtime to terminate it in an unusual way 无法运行问题的解决
  10. 基于Flask框架实现Mock Server
  11. 【Lintcode】350. Slash Separating
  12. miR数据分析处理流程
  13. 矩阵标准型的系数是特征值吗_Jordan 标准型
  14. 微信安装旧版本方法(抓包必备)
  15. 操作MySQL出错提示“BLOB/TEXT column used in key specification without a key length”解决办法
  16. 关于技术学习的一点思考
  17. 在vc2008中用_crtBreakAlloc调试内存泄漏
  18. 设计原则之 SOLID 原则
  19. 电荷放大器的原理与应用
  20. java表格中添加按钮_如何在JavaFX表视图中添加按钮

热门文章

  1. 火车头采集器计划任务设置时间间隔无效问题解决
  2. 苹果计算机开机进入安全模式,苹果电脑开机步骤
  3. 信用卡逾期怎么办,如何让信用卡不逾期?
  4. 迪卡侬中国与阿里云达成合作;咖世家与恒天然在中国推出益生菌咖啡;默克高性能材料业务更名为电子科技 | 美通企业日报...
  5. 记一次OpenStack排错Exceeded maximum number of re tries. Exhausted all hosts available for retrying build
  6. Local Maximum Mean Discrepancy
  7. 磁盘 I/O 和网络
  8. s3c2440存储控制器详解
  9. Windows语言栏不见了,解决办法。任务栏的语言栏没了、不显示了。语言栏异常导致不能输入中文。默认中文输入法设置。
  10. 计算机图形学一:变换矩阵-Transformation Matrices