Response对象(下)

一、服务器输出字符数据到浏览器步骤如下

1.获取字符流输出
2.输出数据
新建Servlet“ResponseDemo4”
@WebServlet("/ResponseDemo4")
public class ResponseDemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1、获取字符输出流
PrintWriter printWriter = response.getWriter();
// 2、输出数据
printWriter.write("hello response");
}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

测试结果:

如果想让输出字符变成一级标题加粗,则在输出中加标签<h1></h1>

@WebServlet("/ResponseDemo4")
public class ResponseDemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1、获取字符输出流
PrintWriter printWriter = response.getWriter();
// 2、输出数据
printWriter.write("<h1>hello response</h1>");
}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

测试结果:

注意:

但是出现输出中文有乱码怎么办?

一般出现乱码的原因:编解码使用的字符集不一致

printWriter.write("<h1>你好, response</h1>");

解决:

在获取流对象之前,设置流的默认编码:ISO-8859-1 设置为:GBK

@WebServlet("/ResponseDemo4")
public class ResponseDemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取流之前,要将流的默认编码:ISO-8859-1,设置为GBK
response.setCharacterEncoding("GBK");
// 1、获取字符输出流
PrintWriter printWriter = response.getWriter();
// 2、输出数据
printWriter.write("<h1>你好, response</h1>");
}

输出结果:

仅仅是这一步还不行,需要告诉浏览器,服务器发送的消息体数据的编码,建议浏览器使用该编码解码.

@WebServlet("/ResponseDemo4")
public class ResponseDemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取流之前,要将流的默认编码:ISO-8859-1,设置为GBK
response.setCharacterEncoding("utf-8");
// 告诉浏览器,服务器发送的消息体数据的编码,建议浏览器使用该编码解码
response.setHeader("content-type","text/html;charset=utf-8");// 不区分大小写,告诉浏览器,我使用的是"utf-8"
// 1、获取字符输出流
PrintWriter printWriter = response.getWriter();
// 2、输出数据
printWriter.write("<h1>你好, response</h1>");
}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

测试结果:

或者用简单的格式:

@WebServlet("/ResponseDemo4")
public class ResponseDemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取流之前,要将流的默认编码:ISO-8859-1,设置为GBK// 使用更简单的形式,设置编码
response.setContentType("text/html;charset=utf-8");
// 1、获取字符输出流
PrintWriter printWriter = response.getWriter();
// 2、输出数据
printWriter.write("<h1>你好吗? response</h1>");
}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

测试结果:

二、服务器输出字节数据到浏览器

步骤如下:

1.获取字节流输出

2.输出数据

@WebServlet("/ResponseDemo5")
public class ResponseDemo5 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.获取字节输出流
ServletOutputStream servletOutputStream = response.getOutputStream();
// 2.输出数据
servletOutputStream.write("<h1>hello</h1>".getBytes());
}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

测试结果:

同样出现乱码情况的解决

@WebServlet("/ResponseDemo5")
public class ResponseDemo5 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 告诉浏览器,服务器发送的消息体数据的编码,建议浏览器使用该编码解码
response.setContentType("text/html;charset=utf-8");
// 1.获取字节输出流
ServletOutputStream servletOutputStream = response.getOutputStream();
// 2.输出数据
servletOutputStream.write("<h1>你现在怎么样?</h1>".getBytes("utf-8"));
}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

三、验证码

1.本质:图片

@WebServlet("/checkCodeServlet")
public class checkCodeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int width = 100;
int height = 50;
// 1.创建对象,在内存中画图(验证码的图片对象)
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
// 2.美化图片
// 2.1 填充背景
Graphics g = image.getGraphics();// 画笔对象
g.setColor(Color.PINK);// 设置笔画颜色
g.fillRect(0,0,width,height);
// 3.图片输出
ImageIO.write(image,"jpg",response.getOutputStream());
}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

测试结果:

进一步设置:

@WebServlet("/checkCodeServlet")
public class checkCodeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int width = 100;
int height = 50;
// 1.创建对象,在内存中画图(验证码的图片对象)
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
// 2.美化图片
// 2.1 填充背景
Graphics g = image.getGraphics();// 画笔对象
g.setColor(Color.PINK);// 设置笔画颜色
g.fillRect(0,0,width,height);
// 2.2 画边框
g.setColor(Color.BLUE);
g.drawRect(0,0,width-1,height-1);
// 2.3 写验证码
g.drawString("A",20,25);
g.drawString("B",40,25);
g.drawString("c",60,25);
g.drawString("d",80,25);
// 3.图片输出
ImageIO.write(image,"jpg",response.getOutputStream());
}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

测试结果:

如何让验证码随机生成?

在原来代码的基础上加上以下代码:

String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; // 列出验证码所有可能出现的情况// 生成随机角标
Random ran = new Random();
for(int i = 0 ; i < 4;i++){
int index = ran.nextInt(str.length());
// 获取字符
char ch = str.charAt(index); // 随机字符
// 2.3 写验证码
g.drawString(ch+"",width/5*i,height/2);// 验证码字母的位置 20/40/60/80
}

加上干扰:

// 画干扰线
g.setColor(Color.GREEN);
// 随机生成坐标点
for(int i = 0 ;i< 10;i++){
int i0 = ran.nextInt(width);
int i1 = ran.nextInt(width);
int i2 = ran.nextInt(width);
int i3 = ran.nextInt(width);
g.drawLine(i0,i1,i2,i3);
}

2.验证码的切换

新建register.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
window.onload = function(){
// 获取图片对象
var img = document.getElementById("checkCode");
// 绑定单击事件
img.onclick = function(){
// 加一个时间戳
var date = new Date().getTime();img.src = "/day04/checkCodeServlet?"+date;
}
}
</script>
</head>
<body>
<img id = "checkCode" src="/day04/checkCodeServlet" />
<a id = "change" href="">看不清换一张?</a></body>
</html>

以下,点击即可切换验证码

Response基础(下)相关推荐

  1. 一种在外部中心化基础下的网络空间去中心化充盈区块链系统

    本文是<赛博空间学与赛博学>的第四章 赛博空间充盈计划 第四章内容全部一起放出,请点击下面推送阅读.可辅助上一期视频理解:网络补全计划! 区块链技术本质上就是赛博空间学的产物.在区块链的区 ...

  2. (19)一篇掌握MySQL数据库基础下 基本操作(外键约束、建表原则、多表查询、子查询)

    MySQL数据库基础下 一.修改表--添加外键约束 二.多表之间的建表原则 1.建数据库原则:通常情况下,一个项目/应用建一个数据库 2.多表之间的表原则: (1)一对多:分类和商品 (一个分类对应多 ...

  3. 第七章、 面向对象基础--下(续) 内部类、枚举、注解

    文章目录 内容 学习目标 第七章 面向对象基础--下(续) 7.7 内部类 7.7.1 概述 7.7.1 非静态成员内部类 练习1:语法练习题 练习2:简单面试题 练习题3:高难面试题 7.7.2 静 ...

  4. UE官方教程笔记02-实时渲染基础下

    对官方教程视频[官方培训]02-实时渲染基础下 | 陈拓 Epic的笔记 没听懂的地方就瞎写 反射 实时渲染中反射是一个非常有挑战的特性 UE中有多种不同的方案,各有各的优势和缺点 反射捕获 屏幕空间 ...

  5. Docker基础下(学习笔记)

    5. Docker 容器数据卷 5.1 容器数据卷是什么 先来看看Docker的理念: 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的. 容器之间希望有可 ...

  6. javascript 基础下

    五.函数式 这个可不是JavaScript的发明,它的发明人已经死了,而他的这个发明还在困扰着我们--如同爱迪生的灯 泡还在照耀着我们. 其实函数式语言很简单,它就是一种与命令式语言同样"完 ...

  7. SOA 开发基础 (下)

    上篇中从我的理解向大家介绍了"什么是SOA",下篇还是继续原本的打算,梳理一下做SOA开发(本篇指的是智能座舱中SOA开发)需要具备的领域知识体系. 今天要做的梳理,没有思维导图, ...

  8. 八股文--Java基础下

    目录 String相关 字符型常量和字符串常量的区别? 什么是字符串常量池? String str="aaa"与 String str=new String("aaa&q ...

  9. request和response基础知识总结

    Request: request对象和response对象的原理 request和response对象是由服务器创建的.我们来使用它们 request对象是来获取请求消息,response对象是来设置 ...

最新文章

  1. Vue 第一天: 计算属性和观察者
  2. 【学习笔记】python - pyecharts
  3. Windows系统帮助中心程序的0day漏洞
  4. 吴恩达《Machine Learning》精炼笔记 3:回归问题和正则化
  5. ASP.NET缓存全解析4:应用程序数据缓存(转)
  6. rust挖油机怎么整_挖掘机发动机进气管断裂该怎么办?
  7. maven仲裁机制_maven仲裁机制
  8. Python学习笔记:requests库
  9. 网站优化如何创作优质的内容?
  10. 换了马甲也能认出“你” | 有了这个数据集,AI有望揪出变种勒索软件
  11. Java基础面试题整理
  12. kali-扫描主机-Nmap
  13. 杰瑞·卡普兰:人工智能并不可怕 未来将带来两大影响
  14. 八进制数转换为十进制计算机在线,在线十进制转成八进制
  15. C语言程序出现malloc(): corrupted top size异常中止
  16. 图表示学习之时序的事件和节点动态
  17. python绘制穿山甲字符画视频:这喝汤多是一件美逝
  18. 好用的 APISpace 车牌识别API
  19. Kafka实战《原理2》
  20. 聊聊​WebRTC之音频会话管理

热门文章

  1. 千万用户的乐走,决心广告变现了
  2. SSVEP方块闪烁刺激界面编写
  3. 1.数据仓库到底是解决什么问题的?
  4. Bezier曲线曲面绘制
  5. 前端——css相对定位,绝对定位,固定定位
  6. puma560的运动学及matlab实现(正解+逆解)
  7. Linux+MCSM9+Docker 搭建Minecraft基岩版BDS私服,我的世界基岩版开服教程
  8. 百度网盘平均提速3.2倍?官方新增免费提速功能,你知道吗?
  9. 兔子生崽-斐波那契数列
  10. Springboot毕设项目电子商城4dsz7(java+VUE+Mybatis+Maven+Mysql)