【Jsp】第三课 Servlet常用对象(三)

2024-05-11 17:18

本文主要是介绍【Jsp】第三课 Servlet常用对象(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Servlet技术的学习过程中,需要用到很多的常用对象,而且其用法也非常重要,这里介绍第二个常用对象,HttpServletResponse

概述

1. Servlet 收到浏览器的http请求后,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象
2. request和response对象即代表了请求和响应,那我们要获取浏览器提交过来的数据,只需要找request对象就可以了,Servlet要想将数据发送给浏览器上显示,只需要找response即可

1.response对象使用OutputStream发送数据给浏览器

} 使用OutputStream流向客户端浏览器输出中文数据
1. 设置编码格式
2. 通过HttpServletResponse对象获取流
3.通过流往页面写数据

新建一个项目,在src文件夹中新建com.servlet包,然后创建一个Servlet,命名为Servlet1。在doGet方法中定义一个字符串,然后通过response对象获得OutputStream输出流,将字符串的数据写出给浏览器。这里OutputStream写出数据需要将数据转换成字节数组才能完成。代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//因为浏览器发送请求的时候,默认是get请求,所有Servlet对应于doget方法接收浏览器的请求//假设当浏览器给该Servlet发送请求的时候String info="hello china";//从response对象中获得输出流OutputStream os= response.getOutputStream();//输入流:将数据从外部读取进来//输出流:将数据从自己写出去os.write(info.getBytes());}

 访问运行效果如下:

 一次请求访问的流程图如下:

如果需要发送中文数据给浏览器,需要设置编码格式。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置servlet要发给浏览器的数据要支持html文本格式//因为浏览器只能识别html代码response.setContentType("text/html");//设置servlet要发给浏览器的数据的编码格式一定要是UTF-8,因为UTF-8是国际编码格式response.setCharacterEncoding("UTF-8");//因为浏览器发送请求的时候,默认是get请求,所有Servlet对应于doget方法接收浏览器的请求//假设当浏览器给该Servlet发送请求的时候//String info="hello china";String info1="你好,<span style='color:red;'>中国</span>";//从response对象中获得输出流OutputStream os= response.getOutputStream();//输入流:将数据从外部读取进来//输出流:将数据从自己写出去os.write(info1.getBytes());}

 运行效果如下:

 2.response对象使用PrintWrite发送数据给浏览器

创建Servlet2类,在doGet方法中定义一个字符串,使用response对象获得PrintWrite对象。

} 使用PrintWriter流向客户端浏览器输出中文数据
1. 设置编码格式
2.通过HttpServletResponse对象获取流
3.通过流往页面写数据
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String info="abc";//从response中获得写的权限PrintWriter pw=response.getWriter();pw.print(info1);}

 这里就不展示运行效果,初学者可自行运行,观察运行效果。

PrintWrite对象可输出的数据类型多样化

如果使用PrintWrite发送中文数据给浏览器,与OutputStream执行代码类似,需要提前设置编码格式。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");response.setCharacterEncoding("UTF-8");String info1="软件1班";//从response中获得写的权限PrintWriter pw=response.getWriter();pw.print(info1);}

 3.使用OutputStream对象完成文件下载功能

创建Servlet3,并准备好一张图片存放至项目的WebContent文件夹下或者WebApp文件夹下。

 

} 文件下载
1.获取要下载的文件的绝对路径
2.获取要下载的文件名
3.设置content-disposition, attachment 响应头控制浏览器以下载的形式打开文件
4.获取要下载的文件输入流
5.创建数据缓冲区
6.通过response对象获取OutputStream流
7.将FileInputStream流写入到buffer缓冲区
8.使用OutputStream将缓冲区的数据输出到客户端浏览器

代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//要求servlet将图片以文件下载的方式发送给浏览器//设置响应头response.setHeader("content-disposition", "attachment;filename=flower.jpg");//1.servlet先要从磁盘中找到这张图片的绝对路径//先获得ServletContext对象ServletContext sc=getServletContext();String path=sc.getRealPath("/images/1.jpg");System.out.println(path);//2.将图片读取至servlet,输入流  字节流InputStream is=new FileInputStream(path);byte[] bytes=new byte[1024];int count=-1;OutputStream os=response.getOutputStream();while ((count=is.read(bytes))!=-1) {//读取了一部分图片的字节就把这部分发送出去os.write(bytes, 0, count);}}

 运行效果如下:

 

 打开已下载的图片,可观察到就是我们下载的图片

 4.使用response对象完成生成6位数随机验证码,并定时刷新

创建Servlet4,使用Math.random()产生【0-1】之间的随机数,因我们需要生成6位数的随机数,那么也就是需要【100000-1000000】之间产生随机数。其代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");response.setCharacterEncoding("UTF-8");//设置浏览器每隔3秒钟自动刷新浏览器页面response.setHeader("refresh", "3");//生成随机6位数的验证码  100000--1000000int i=(int)(Math.random()*900000+100000);//0--1:1以下的小数 0.123456789900//0-1 *900000=0--900000+100000=100000--1000000PrintWriter pw=response.getWriter();pw.print("您支付宝收到1000万到账,需要的验证码为:<span style='color:red'>"+i+"</span>,打死也不要告诉别人!!!!");}

运行效果如下:

 

 

 5.使用response对象完成Servlet之间的跳转

创建Servlet5,我们学习到目前为止,浏览器都是访问单独Servlet,并没有做过多个Servlet之间的跳转,那么这里开始学习第一种Servlet打开另一个Servlet的方法,这里称为重定向。

访问流程图如下:

代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//能不能使用servlet跳转到另一个servlet//改变浏览器的访问地址,称为重定向:重新制定访问的方向//当浏览器访问Servlet5的时候,可以使用response回复一个消息给浏览器,要求浏览器别再访问我,访问servlet1response.sendRedirect("Servlet1");//重定向的跳转方式://servlet指挥浏览器改变访问地址去访问其他的servlet//地址会改变//跳转servlet的方式,借用浏览器改变地址的方式切换访问servlet}

 这里不展示运行效果,初学者可自行运行,观察浏览器地址的变化,以及页面内容的展示情况,并总结重定向方式实现Servlet的跳转,并非是直接跳转,而是借助于浏览器改变请求地址实现的间接性的页面跳转。

 

这篇关于【Jsp】第三课 Servlet常用对象(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/980160

相关文章

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象