news 2026/8/13 17:16:48

JavaWeb之HttpServletResponse

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaWeb之HttpServletResponse

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

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

简单分类

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

publicServletOutputStreamgetOutputStream()throwsIOException;publicPrintWritergetWriter()throwsIOException;

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

voidsetCharacterEncoding(Stringvar1);voidsetContentLength(intvar1);voidsetContentLengthLong(longvar1);voidsetContentType(Stringvar1);voidsetDateHeader(Stringvar1,longvar2);voidaddDateHeader(Stringvar1,longvar2);voidsetHeader(Stringvar1,Stringvar2);voidaddHeader(Stringvar1,Stringvar2);voidsetIntHeader(Stringvar1,intvar2);voidaddIntHeader(Stringvar1,intvar2);

响应的状态码

intSC_CONTINUE=100;intSC_SWITCHING_PROTOCOLS=101;intSC_OK=200;intSC_CREATED=201;intSC_ACCEPTED=202;intSC_NON_AUTHORITATIVE_INFORMATION=203;intSC_NO_CONTENT=204;intSC_RESET_CONTENT=205;intSC_PARTIAL_CONTENT=206;intSC_MULTIPLE_CHOICES=300;intSC_MOVED_PERMANENTLY=301;intSC_MOVED_TEMPORARILY=302;intSC_FOUND=302;intSC_SEE_OTHER=303;intSC_NOT_MODIFIED=304;intSC_USE_PROXY=305;intSC_TEMPORARY_REDIRECT=307;intSC_BAD_REQUEST=400;intSC_UNAUTHORIZED=401;intSC_PAYMENT_REQUIRED=402;intSC_FORBIDDEN=403;intSC_NOT_FOUND=404;intSC_METHOD_NOT_ALLOWED=405;intSC_NOT_ACCEPTABLE=406;intSC_PROXY_AUTHENTICATION_REQUIRED=407;intSC_REQUEST_TIMEOUT=408;intSC_CONFLICT=409;intSC_GONE=410;intSC_LENGTH_REQUIRED=411;intSC_PRECONDITION_FAILED=412;intSC_REQUEST_ENTITY_TOO_LARGE=413;intSC_REQUEST_URI_TOO_LONG=414;intSC_UNSUPPORTED_MEDIA_TYPE=415;intSC_REQUESTED_RANGE_NOT_SATISFIABLE=416;intSC_EXPECTATION_FAILED=417;intSC_INTERNAL_SERVER_ERROR=500;intSC_NOT_IMPLEMENTED=501;intSC_BAD_GATEWAY=502;intSC_SERVICE_UNAVAILABLE=503;intSC_GATEWAY_TIMEOUT=504;intSC_HTTP_VERSION_NOT_SUPPORTED=505;

Response下载文件

  1. 向浏览器输出消息
  2. 下载文件
    1. 要获取下载文件的路径
    2. 下载的文件名是啥?
    3. 设置想办法浏览器能够支持下载我们需要的东西
    4. 获取下载文件的输入流
    5. 创建缓冲区
    6. 获取OUtputStream对象
    7. 将FileOutputStream流写入到buffer缓冲区
    8. 使用OutputStream将缓冲区中的数据输出到客户端

publicclassFileServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{// a. 要获取下载文件的路径StringrealPath=this.getServletContext().getRealPath("WEB-INF/classes/img/头像.jpg");System.out.println("下载文件的路径:"+realPath);// b. 下载的文件名是啥?StringfileName=realPath.substring(realPath.lastIndexOf("\\")+1);// c. 设置想办法浏览器能够支持下载我们需要的东西,中文需要进行URL编码resp.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(fileName,"UTF-8"));// d. 获取下载文件的输入流FileInputStreamfileInputStream=newFileInputStream(realPath);// e. 创建缓冲区intlen=0;byte[]bytes=newbyte[1024];// f. 获取OUtputStream对象ServletOutputStreamoutputStream=resp.getOutputStream();// g. 将FileOutputStream流写入到buffer缓冲区while((len=fileInputStream.read(bytes))!=-1){outputStream.write(bytes,0,len);}// h. 使用OutputStream将缓冲区中的数据输出到客户端fileInputStream.close();outputStream.close();}}

web.xml

<servlet><servlet-name>file</servlet-name><servlet-class>com.cike.www.FileServlet</servlet-class></servlet><servlet-mapping><servlet-name>file</servlet-name><url-pattern>/file</url-pattern></servlet-mapping>·

访问浏览器可以成果看见下载文件

Response验证码实现

验证码怎么来的?

  • 前端实现
  • 后端实现,需要用到 Java 的图片类,生成一个图片
publicclassImageServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{// 如何让浏览器5秒自动刷新1次;resp.setHeader("refresh","5");// 在内存中创建一个图片BufferedImageimage=newBufferedImage(80,20,BufferedImage.TYPE_INT_RGB);// 得到图片Graphicsg=(Graphics2D)image.getGraphics();//笔// 设置图片的背景颜色g.setColor(Color.white);g.fillRect(0,0,80,20);// 给图片写入数据g.setColor(Color.BLUE);g.setFont(newFont(null,Font.BOLD,20));g.drawString(makeNum(),0,20);// 告诉浏览器,这个请求用图片的方式打开resp.setContentType("image/jpeg");// 网站存在缓存,不让浏览器存在缓存resp.setDateHeader("Expires",-1);resp.setHeader("Cache-Control","no-cache");resp.setHeader("Pragma","no-cache");resp.setHeader("Cache-Control","max-age=0");// 把图片写给浏览器ImageIO.write(image,"jpeg",resp.getOutputStream());}// 生成随机数privateStringmakeNum(){Randomrandom=newRandom();Stringnum=random.nextInt(99999999)+"";StringBuffersb=newStringBuffer();for(inti=0;i<-num.length();i++){sb.append("0");}returnsb.toString()+num;}}

web.xml

<servlet><servlet-name>img</servlet-name><servlet-class>com.cike.www.ImageServlet</servlet-class></servlet><servlet-mapping><servlet-name>img</servlet-name><url-pattern>/img</url-pattern></servlet-mapping>

Response重定向

B一个web资源收到客户端请求后,B他会通知A客户端去访问另外一个web资源C

,这个过程叫重定向

常见场景:

  • 用户登录
voidsendRedirect(Stringvar1)throwsIOException

测试:

publicclassRedirectServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{/* resp.setHeader("Location","/response/img"); resp.setStatus(HttpServletResponse.SC_FOUND); */// 设置的路径为网站访问的真实路径,也可以是Tomcat配置的路径为开始resp.sendRedirect("/response/img");}}

web.xml

<servlet><servlet-name>redirect</servlet-name><servlet-class>com.cike.www.RedirectServlet</servlet-class></servlet><servlet-mapping><servlet-name>redirect</servlet-name><url-pattern>/redirect</url-pattern></servlet-mapping>

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

  • 相同点:
    • 页面都会实现跳转
  • 不同点:
    • 请求转发的时候,url不会产生变化
    • 重定向的时候,url地址栏会发生变化

附加登录小实验-登录重定向Success

index.jsp

<%--CreatedbyIntelliJIDEA.User:Love_MengYaoDate:2025/11/6Time:11:02Tochangethistemplate useFile|Settings|FileTemplates.--%><%@ page contentType="text/html;charset=UTF-8"language="java"%><html><head><title>Admin</title></head><body><h1>HelloWorld!</h1><%--这里提交的路径,需要找到项目的路径--%><%--${pageContext.request.contextPath}代表当前项目的路径--%><form action="${pageContext.request.contextPath}/login"method="get">用户名:<input type="text"name="username"><br>密码:<input type="password"name="password"><br>登录:<input type="submit"></form></body></html>

success.jsp

<%@ page contentType="text/html;charset=UTF-8"language="java"%><html><head><title>Success</title></head><body><h1>Success</h1></body></html>

RequestTest.java

publicclassRequestTestextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{// 处理请求Stringusername=req.getParameter("username");Stringpassword=req.getParameter("password");System.out.printf(username+":"+password);// 重定向一定要注意路径,否则显示404resp.sendRedirect("/response/success.jsp");}}

web.xml

<servlet><servlet-name>request</servlet-name><servlet-class>com.cike.www.RequestTest</servlet-class></servlet><servlet-mapping><servlet-name>request</servlet-name><url-pattern>/login</url-pattern></servlet-mapping>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/13 16:47:39

高级前端 Input 公共组件设计方案(Vue3 + TypeScript)

一、设计核心目标 功能完备性&#xff1a;覆盖日常/复杂输入场景&#xff0c;支持多类型、校验、格式化等高频需求&#xff1b;可扩展性&#xff1a;预留插槽、配置项&#xff0c;支持业务定制化&#xff08;如前缀图标、后缀操作区&#xff09;&#xff1b;性能优化&#xff1…

作者头像 李华
网站建设 2026/8/14 3:35:56

前后端HTTPS及证书配置完整流程

前后端HTTPS及证书配置完整流程 mTLS双向认证请求测试 本文档详细记录前后端项目配置HTTPS协议、生成并部署证书、实现mTLS双向认证的全过程,适用于Vue3+Vite前端与NestJS后端架构(其他架构可参考核心逻辑)。配置完成后可实现前端与后端的安全HTTPS通信,并通过mTLS双向认证…

作者头像 李华
网站建设 2026/8/14 5:24:47

TIA博途虚拟机终极配置指南:V17+V16+V15.1全版本一键部署

TIA博途虚拟机终极配置指南&#xff1a;V17V16V15.1全版本一键部署 【免费下载链接】TIA博途虚拟机文件V17V16V15.1可直接使用 本仓库提供了一个TIA博途虚拟机文件&#xff0c;包含TIA Portal V17、V16和V15.1版本&#xff0c;用户可以直接使用这些虚拟机进行开发和测试。虚拟机…

作者头像 李华
网站建设 2026/8/13 20:07:24

【开题答辩全过程】以 基于Java的人体骨骼健康知识普及系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/8/14 5:24:47

企业微信开发总卡壳?试试cpolar,回调调试超顺畅

前言 企业微信开发中&#xff0c;回调功能用于接收服务器的通知和数据&#xff0c;比如审批结果、打卡信息等&#xff0c;是实现消息推送、OAuth2 授权等功能的关键。它适用于企业 IT 人员、开发者&#xff0c;能帮助企业搭建内部业务系统与企业微信的连接&#xff0c;优点是能…

作者头像 李华
网站建设 2026/8/14 1:59:49

ChatPPT:国内综合实力最强的AI PPT工具

&#x1f451; 第一名&#xff1a;ChatPPT&#xff08;www.chatppt.cn&#xff09; 综合多项评测&#xff0c;ChatPPT在2025年被认为是国内综合实力最强的AI PPT工具之一&#xff0c;其优势主要体现在以下几个方面。 海量模板与强大设计&#xff1a;ChatPPT拥有超过40万套模板…

作者头像 李华