Response基础(下)
Response对象(下)
一、服务器输出字符数据到浏览器步骤如下
@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基础(下)相关推荐
- 一种在外部中心化基础下的网络空间去中心化充盈区块链系统
本文是<赛博空间学与赛博学>的第四章 赛博空间充盈计划 第四章内容全部一起放出,请点击下面推送阅读.可辅助上一期视频理解:网络补全计划! 区块链技术本质上就是赛博空间学的产物.在区块链的区 ...
- (19)一篇掌握MySQL数据库基础下 基本操作(外键约束、建表原则、多表查询、子查询)
MySQL数据库基础下 一.修改表--添加外键约束 二.多表之间的建表原则 1.建数据库原则:通常情况下,一个项目/应用建一个数据库 2.多表之间的表原则: (1)一对多:分类和商品 (一个分类对应多 ...
- 第七章、 面向对象基础--下(续) 内部类、枚举、注解
文章目录 内容 学习目标 第七章 面向对象基础--下(续) 7.7 内部类 7.7.1 概述 7.7.1 非静态成员内部类 练习1:语法练习题 练习2:简单面试题 练习题3:高难面试题 7.7.2 静 ...
- UE官方教程笔记02-实时渲染基础下
对官方教程视频[官方培训]02-实时渲染基础下 | 陈拓 Epic的笔记 没听懂的地方就瞎写 反射 实时渲染中反射是一个非常有挑战的特性 UE中有多种不同的方案,各有各的优势和缺点 反射捕获 屏幕空间 ...
- Docker基础下(学习笔记)
5. Docker 容器数据卷 5.1 容器数据卷是什么 先来看看Docker的理念: 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的. 容器之间希望有可 ...
- javascript 基础下
五.函数式 这个可不是JavaScript的发明,它的发明人已经死了,而他的这个发明还在困扰着我们--如同爱迪生的灯 泡还在照耀着我们. 其实函数式语言很简单,它就是一种与命令式语言同样"完 ...
- SOA 开发基础 (下)
上篇中从我的理解向大家介绍了"什么是SOA",下篇还是继续原本的打算,梳理一下做SOA开发(本篇指的是智能座舱中SOA开发)需要具备的领域知识体系. 今天要做的梳理,没有思维导图, ...
- 八股文--Java基础下
目录 String相关 字符型常量和字符串常量的区别? 什么是字符串常量池? String str="aaa"与 String str=new String("aaa&q ...
- request和response基础知识总结
Request: request对象和response对象的原理 request和response对象是由服务器创建的.我们来使用它们 request对象是来获取请求消息,response对象是来设置 ...
最新文章
- Vue 第一天: 计算属性和观察者
- 【学习笔记】python - pyecharts
- Windows系统帮助中心程序的0day漏洞
- 吴恩达《Machine Learning》精炼笔记 3:回归问题和正则化
- ASP.NET缓存全解析4:应用程序数据缓存(转)
- rust挖油机怎么整_挖掘机发动机进气管断裂该怎么办?
- maven仲裁机制_maven仲裁机制
- Python学习笔记:requests库
- 网站优化如何创作优质的内容?
- 换了马甲也能认出“你” | 有了这个数据集,AI有望揪出变种勒索软件
- Java基础面试题整理
- kali-扫描主机-Nmap
- 杰瑞·卡普兰:人工智能并不可怕 未来将带来两大影响
- 八进制数转换为十进制计算机在线,在线十进制转成八进制
- C语言程序出现malloc(): corrupted top size异常中止
- 图表示学习之时序的事件和节点动态
- python绘制穿山甲字符画视频:这喝汤多是一件美逝
- 好用的 APISpace 车牌识别API
- Kafka实战《原理2》
- 聊聊​WebRTC之音频会话管理
热门文章
- 千万用户的乐走,决心广告变现了
- SSVEP方块闪烁刺激界面编写
- 1.数据仓库到底是解决什么问题的?
- Bezier曲线曲面绘制
- 前端——css相对定位,绝对定位,固定定位
- puma560的运动学及matlab实现(正解+逆解)
- Linux+MCSM9+Docker 搭建Minecraft基岩版BDS私服,我的世界基岩版开服教程
- 百度网盘平均提速3.2倍?官方新增免费提速功能,你知道吗?
- 兔子生崽-斐波那契数列
- Springboot毕设项目电子商城4dsz7(java+VUE+Mybatis+Maven+Mysql)