手动去设置HTTP响应行、响应头、响应体

①手动去设置HTTP响应行中的状态码,这里用到了response的setStatus(int sc);这个方法

package com.itheima.line;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class StatusServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//手动去设置HTTP响应行中的状态码response.setStatus(1014);//这里的状态码设置为1014}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

建立的工程如下:

在这里插入图片描述

最后的结果如下:

在这里插入图片描述

②通过response设置响应头

addHeader(String name, String value)
addIntHeader(String name, int value)
addDateHeader(String name, long date)

setHeader(String name, String value) 重点
setIntHeader(String name, int value)
setDateHeader(String name, long date)

其中,add表示添加,而set表示设置

为编辑之前的在这里插入图片描述

在这里插入图片描述

package com.itheima.header;import java.io.IOException;
import java.util.Date;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class HeaderServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Date date = new Date();//设置响应头response.addHeader("name", "beyondyy");//若重复,则接着添加response.addHeader("name", "beyondwsq");response.addIntHeader("age", 19);response.addDateHeader("birthday", date.getTime());}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

编辑之后的结果:

在这里插入图片描述

同样的道理,add表示有相同的往后接着添加,set只保留一个,前面的会被后面的给取代。

③重定向(302)

老版

重定向:说白了就是,当你访问servlet1时,它没有资源,它给你说servlet2有,然后你就会再访问servlet2。

重定向 状态码 302
响应头 Location (代表重定向地址)
//servlet1
package com.itheima.header;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Servlet1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//没有响应资源 告知客户端去重定向到servlet2//1.设置状态码为302response.setStatus(302);//2.设置一个响应头Locationresponse.setHeader("Location", "/WEB14/servlet2");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
//servl2
package com.itheima.header;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Servlet2 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().write("hello beyondsq...");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

web.xml里面url分别设置为servlet1和servlet2

由于重定向的方法每次都那么写麻烦,javaEE进行封装成一个叫重定向的方法sendRedirect(url);

封装之后的servlet1

新版

//servlet1
package com.itheima.header;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Servlet1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//没有响应资源 告知客户端去重定向到servlet2//封装成一个重定向的方法sendRedirect(url);response.sendRedirect("/WEB14/servlet2");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

④定时刷新(跟重定向一样,就是多了一个时间延迟而已)

//refresh
package com.itheima.header;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class RefreshServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置定时刷新的头response.setHeader("refresh", "5;url=//www.baidu.com");//5s之后再跳转到url为百度的地址}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
} 

⑤js完成页面的定时跳转

案例:5秒后自动跳转到百度
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">window.onload = function(){var time = 5;var secondEle = document.getElementById("second");var timer = setInterval(function(){secondEle.innerHTML = time;time--;if(time==0){clearInterval(timer);	location.href="http://www.baidu.com";}},1000);//1000ms表示1s变一次}
</script>
</head>
<body>恭喜你,注册成功,<span style="color:red" id="second">5</span>秒后跳转。如不跳转,请点击<a href="http://www.baidu.com">这里</a>
</body>
</html>

⑥通过response设置响应体

//text
package com.itheima.content;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TextServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置response查询的码表response.setCharacterEncoding("UTF-8");//通过一个头Content-Type告知客户端使用何种码表进行解码response.setHeader("Context-Type", "text/html;charset=UTF-8");//文本为HTML类型,编码为UTF-8 PrintWriter writer = response.getWriter();writer.write("原谅我这一生不羁放纵爱自由wsq");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

在这里插入图片描述

工程创建在这里插入图片描述

新(进行代码封装之后)

package com.itheima.content;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TextServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//进行方法封装之后	response.setContentType("text/html;charset=UTF-8");PrintWriter writer = response.getWriter();writer.write("原谅我这一生不羁放纵爱自由wsq");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

牢记这行代码即可:

response.setContentType(“text/html;charset=UTF-8”);

⑦response的outputstream来获得服务器上的图片

响应头设置字节

ServletOutputStream getOutputStream()
获得字节流,通过该字节流的write(byte[] bytes)可以向response缓冲区中写入字 节,在由Tomcat服务器将字节内容组成Http响应返回给浏览器。

//byte
package com.itheima.content;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class ByteServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//使用response获得字节输出流ServletOutputStream out = response.getOutputStream();//获得服务器上的图片String realPath = this.getServletContext().getRealPath("a.jpg");//相对地址,相对web应用的InputStream in = new FileInputStream(realPath);int len = 0;byte[] buffer = new byte[1024];while((len = in.read(buffer))>0){out.write(buffer,0,len);}in.close();out.close();	}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基本的二分查找、寻找第一个和最后一个数的二分查找

二分查找1 二分查找的框架2 寻找一个数&#xff08;基本的二分搜索&#xff09;3 寻找左侧边界的二分搜索4 寻找右侧边界的二分查找5 合并二分查找场景&#xff1a;有序数组寻找一个数、寻找左侧边界&#xff08;有序数组第一个等目标数的下标&#xff09;、寻找右侧边界&#…

Linux内核设计与实现---中断和中断处理程序

中断和中断处理程序1 中断异常2 中断处理程序上半部与下半部的对比3 注册中断处理程序释放中断处理程序4 编写中断处理程序重入和中断处理程序共享的中断处理程序中断处理程序实例5 中断上下文6 中断处理机制的实现7 中断控制禁止和激活中断禁止指定中断线中断系统的状态8 总结…

response细节点

一、 1&#xff09;、response获得的流不需要手动关闭&#xff0c;Tomcat容器会帮你自动关闭 2&#xff09;、getWriter和getOutputStream不能同时调用 //error package com.itheima.content;import java.io.IOException; import javax.servlet.ServletException; import java…

linux内核设计与实现---下半部和推后执行的工作

下半部和推后执行的工作1 下半部为什么要用下半部下半部的环境内核定时器2 软中断软中断的实现软中断处理程序执行软中断使用软中断3 tasklettasklet的实现使用taskletksoftirqd4 工作队列工作队列的实现工作、工作队列和工作者线程之间的关系使用工作队列5 下半部机制的选择6 …

Mac VSCode配置C语言环境(可以调试)

Mac VSCode配置C语言环境c_cpp_properties.jsontasks.jsonlaunch.json新建一个文件夹&#xff0c;用vscode&#xff0c;然后再新建一个test.c文件。 #include <stdio.h>int main(void) {int a1,b1;int cab;printf("%d\n",c);return 0; }这篇文章说怎么配置c_c…

vShpere Client在win 7 RC下和2008下 无法正常连接esx主机之解决办法

vShpere Client在win 7 RC下和2008下 无法正常连接esx主机之解决办法 在win7下和2008下打开client后连接esx主机会出现2个错误提示, 第一个是 第二个是 然后就连接失败了,开始以为是CC的esx主机安装有问题,后来找了找,借助了强大google工具,终于找到解决办法.解决办法如下: 1.从…

localhost与127.0.0.1之间的关系更改

其实localhost的默认IP地址为127.0.0.1&#xff0c;因为这是一种映射关系。 更改步骤如下&#xff1a; C:\Windows\System32\drivers\etc 下的hosts 打开hosts可以看到 更改即可

Linux内核设计与实现---内核同步方法

内核同步方法1 原子操作原子整数操作原子性与顺序性的比较原子位操作2 自旋锁自旋锁是不可递归的其他针对自旋锁的操作自旋锁和下半部3 读-写自旋锁4 信号量创建和初始化信号量使用信号量5 读-写信号量6 自旋锁和信号量7 完成变量8 互斥锁互斥锁API9 禁止抢占10 顺序和屏障1 原…

UNIX环境高级编程---进程间通信总结

进程间通信1 管道匿名管道命名管道2 消息队列3 信号量POSIX信号量有名信号量无名信号量有名信号量和无名信号量的公共操作4 共享内存5 信号相关函数6 套接字针对 TCP 协议通信的 socket 编程模型针对 UDP 协议通信的 socket 编程模型针对本地进程间通信的 socket 编程模型总结L…

搜索---广度优先遍历、深度优先遍历、回溯法

参考文章&#xff1a;https://github.com/CyC2018/CS-Notes/blob/master/notes/Leetcode%20%E9%A2%98%E8%A7%A3%20-%20%E6%90%9C%E7%B4%A2.md 广度优先搜索&#xff08;BFS&#xff09; 广度优先搜索是按层来处理顶点的&#xff0c;距离开始点最近的那些顶点首先被访问&#…

如何更改Visual Studio 2008中类文件引用的默认名称空间?

在编写程序的时候&#xff0c;如果某些名称空间经常用到&#xff0c;每次创建一个文件的时候&#xff0c;都需要手工添加名称空间&#xff0c;是不是很烦人呢&#xff1f;多说人会回答&#xff1a;是的。如果新建文件的时候就自动加上自己需要的名称空间该多好啊。&#xff1a;…

Linux内核设计与实现---内存管理

内存管理1 页2 区3 获得页获得填充为0的页释放页4 kmalloc()gfp_mask标志kfree()5 vmalloc()6 slab层slab层的设计7 slab分配器的接口8 在栈上的静态分配9 高端内核的映射永久映射临时映射10 每个CPU的分配11 新的每个CPU的接口编译时的每个CPU数据运行时每个CPU数据12 使用每个…

多语言开发 之 通过基页类及Session 动态响应用户对语言的选择

在用户通过UserLogin.aspx登录系统时 提供其对语言的选择选择后 将所选存入Session 以便登录系统后的其他页面进行按语言显示当然相关页面需要支持多语言具体信息可参看使用 根据语言环境不同 而显示不同的 资源本地化 ASP.NET 网页 App_Code下定义基页类 BasePage.cs Codeusin…

Linux内核设计与实现---虚拟文件系统

虚拟文件系统1 通用文件系统2 文件系统抽象层3 Unix文件系统4 VFS对象及其数据结构其他VFS对象5 超级快对象超级块操作6 索引节点对象索引节点操作7 目录项对象目录项状态目录项缓存目录项操作8 文件对象9 和文件系统相关的数据结构10 和进程相关的数据结构11 Linux中的文件系统…

Java里面的几种路径的区别

1&#xff0c;相对路径 相对路径就是指由这个文件所在的路径引起的跟其它文件&#xff08;或文件夹&#xff09;的路径关系。 也就是说&#xff1a; 对于如图所示&#xff1a;一news.html为例 在WEB15工程下的WebContent下的WEB-INF下的news.html 当我访问的news.html的时候…

Linux内核设计与实现---块I/O层

块I/O层1 解刨一个块设备2 缓冲区和缓冲区头3 bio结构体新老方法对比4 请求队列5 I/O调度程序I/O调度程序的工作Linus电梯最终期限I/O调度程序预测I/O调度程序完全公正的排队I/O调度程序空操作的I/O调度程序I/O调度程序的选择系统中能够 随机访问 固定大小数据片的设备被称为块…

算法---数

数1 最大公约数2 最小公约数3 进制转换4 阶乘统计阶乘尾部0的个数5 字符串加法减法二进制加法6 多数投票问题数组中出现次数多于n/2的元素7 相遇问题改变数组元素使所有元素都相同1 最大公约数 欧几里得算法&#xff1a;两个整数的最大公约数等于其中较小的那个数和两数相除余…

Linux内核设计与实现---进程地址空间

进程地址空间1 内存描述符分配内存描述符销毁内存描述符mm_struct与内核线程2 内存区域VMA标志VMA操作内存区域的树形结构和内存区域的链表结构3 操作内存区域find_vma()find_vma_prev()find_vma_intersection()4 mmap()和do_mmap()&#xff1a;创建地址空间mmap&#xff08;&a…

JavaScript中带有示例的Math.log10()方法

JavaScript | Math.log10()方法 (JavaScript | Math.log10() Method) Math operations in JavaScript are handled using functions of math library in JavaScript. In this tutorial on Math.log10() method, we will learn about the log10() method and its working with e…

JSP技术

一、jsp脚本和注释 jsp脚本&#xff1a; 1&#xff09;<%java代码%> ----- 内部的java代码翻译到service方法的内部 2&#xff09;<%java变量或表达式> ----- 会被翻译成service方法内部out.print() 3&#xff09;<%!java代码%> ---- 会被翻译成servlet的成…