JavaWeb总结(四)
使用Servlet发送服务器端响应信息
Servlet API中定义一个专门的接口类javax.servlet.http.HttpServletResponse用于创建HTTP响应,包括HTTP协议的状态行、响应头以及消息体;
HTTP响应示例
设置响应状态行
- 状态行分为HTTP协议、状态码和状态描述三个部分
- 状态描述与状态码直接相关
- HTTP协议由服务器确定
- 通过设置状态码来实现许多重要功能(可以把用户重定向到另一个网站,可以指示附加的文档是图片、PDF或HTML……)
HTTP状态码:
100-199:表示信息性代码,标示客户端应该采取的其他动作,请求正在进行。
200-299:表示客户请求成功。
300-399:表示用于已经移走的资源文件,指示新的地址。
400-499:表示由客户端引发的错误。
500-599:表示由服务器端引发的错误。
设置状态码
- 使用HttpServletResponse的setStatus()方法
//setStatus方法的参数是一个整数 //使用HttpServletResponse中的常量 setStatus(HttpServletResponse.SC_NOT_FOUND );
- 设置状态代码返回描述信息
response设置状态码为404
未找到文件web服务器返回404应答
HTTP的响应信息是由状态行、响应头、空行和消息体(内容文档)按照次序组成并以流的方式向浏览器发送的。
HTTP响应信息按次序组成并向浏览器发送数据流
提示:在Servlet规范中没有规定Servlet必须缓存消息体,因而要在使用PrintWriter输出消息体前设置状态码。 |
HttpServletResponse为两种常见的情形提供了专用的方法:
- sendError方法
public void sendError(int code,String message)
该方法生成一个404应答,同时生成一个简短的HTML错误信息文档发生给客户。
response.sendError(404,"路径错误");
sendError结果示意图
-sendRedirect方法
Public void sendRedirect(String url)
该方法生成一个302应答,同时在Location头中指示新文档的URL路径(类似a标签跳转效果,会产生两次请求和响应)。
设置响应头
HttpServletResponse对象用于操纵响应的HTTP头
- containsHeader(String name):返回一个布尔值,指示是否设置了指定的响应头。
- setHeader(String name,String value):用一个给定的名称和字符串设置响应头的通用方式。如果响应头已经被设置,新的值将覆盖当前的值。在设置值之前可以用containsHeader判断头是否存在;
- setIntHeader(String name,int value):用一个给定的名称和整型值设置响应头。如果响应头已经被设置,新的值将覆盖当前的值。在设置值之前可以用containsHeader判断头是否存在;
- setDateHeader(String name,long date): 用一个给定的名称和日期值设置响应头。这里的日期值应该是反映自1970-1-1日(GMT)以来的精确到毫秒的长整型。如果响应头已经被设置,新的值将覆盖当前的值。在设置值之前可以用containsHeader判断头是否存在;
- addHeader(String name,String value):在response中添加一个给定名称和字符串值的响应头,而不管是否已经存放在同名的响应头。该方法允许响应头有多个值。
- addIntHeader(String name,intvalue):在response中添加一个给定名称和整型值的响应头。该方法允许响应头有多个值。
- addDateHeader(String name,long value):在response中添加一个给定名称和日期值设置响应头。这里的日期值应该是反映自1970-1-1日(GMT)以来的精确到毫秒的长整型。该方法允许响应头有多个值。
- setContentType(String mimeType):用于设置返回给客户端内容内容的MIME类型。
- addCookie(Cookie cookie):用于向set-Cookie插入一个Cookie。由于在HTTP响应中会存在多个Set-Cookie行,所以没有对应的setCookie方法。
目的用于告诉客户端
- 发送回来的内容的类型
- 有多少内容正被发送
- 发送内容的服务器的类型
设置响应消息体
- HttpServletResponse对象负责将信息返回给客户端
- HttpServletResponse对象只产生一个空的HTTP响应
- 传回自定义的内容需要使用getWriter()或者getOutputStream()方法
- getWriter()传送普通文本
- getOutputStream()传送二进制内容
传递文本流
getWriter()方法用于得到一个输出流
PrintWriter out = response.getWriter(); //与写HTML一样,不过需要println和print方法去拼写 out.println("<html>"); out.println("<head>"); out.println("<title>Hello World!</title>”); out.println("</html>"); out.println("</head>");
传递二进制流
getOutputStream()方法可以对发送到客户端的信息进行更多控制
该方法返回javax.servlet. ServletOutputStream对象
ServletOutputStream允许开发者写原始字节
OutputStream比使用PrinterWriter发送文本效率更高
可以动态地创建任何形式的数字内容
package com.java.downLoad;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class DownLaod
*/
public class DownLaod extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取文件名字
String filename = request.getParameter("filename");
//设置文件MIME类型
ServletContext sc = this.getServletContext();
response.setContentType(sc.getMimeType(filename));
//设置Content-Disposition,名字为当前时间毫秒数
InputStream fiels = null;
response.setHeader("Content-Disposition", "attachment;filename="+System.currentTimeMillis());
//获取文件并且转化为流
fiels = sc.getResourceAsStream("/downLoad/"+filename);
//传输流
ServletOutputStream out = response.getOutputStream();
byte[] buf = new byte[1024];
int length = 0;
while((length=fiels.read(buf))!=-1){
out.write(buf, 0 ,length);
}
//关闭流
if(out!=null){
out.close();
out.flush();
}
if(fiels!=null){
fiels.close();
}
}
}
设置请求重定向
- 可以选择别的服务器端程序来处理请求
- 把请求重定向到一个完全不同的URL上
重定向原理
浏览器发送HTTP请求
Servlet把302响应码和Location响应头发送给客户端和浏览器
浏览器根据Location头中新的URL重新发出HTTP请求
设置自动刷新和等待页
- 在指定时间内自动刷新当前页或到一个新的页面
- 根据时间来控制响应
- 想在响应中有一个短时间的暂停
response.setHeader("Refresh", "time; URL=url" );
JavaWeb总结(四)的更多相关文章
- JavaWeb总结(四)—JSP深入解析
一.JSP域对象 1.JSP属性范围(域对象范围) JSP提供了四个域对象,分别是pageContext.request.session.application. pageContext: 属性范围仅 ...
- JavaWeb 后端 <四> 之 Cookie HttpSession 学习笔记
一.会话管理概述 1.什么是会话? 好比一次通话.打开浏览器,点击多次链接(发出多次请求和收到多次的响应),关闭浏览器,这个过程就是一次会话. 有功能 可以 文件 新建会话 2.解决的问题是什么? ...
- JavaWeb(四)JDBC操作Oracle
JDBC:Java DataBase Connectivity(java数据库连接) SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC. jdbc是一套标准, ...
- JavaWeb(四)EL表达式
前言 前面详细的说明了什么是JSP和它的一些元素,这篇给大家介绍一下的是EL表达式. 用EL表达式,能更好的使用JSP中的各种内置对象和作用域. 楼主作为大四狗马上要出去面试了,内心很紧张!!! 一. ...
- JavaWeb学习 (四)————Http协议
一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...
- JavaWeb(四)Servlet-1
1.Servlet 简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中.Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet ...
- javaweb笔记四
得到表单数据:1.String str = request.getParameter(String)//根据表单名得到表单值,如果是多个同名的键值,返回第一个值.2.String[] str= req ...
- java学习笔记-JavaWeb篇四
86 文件上传基础 87 使用 fileupload 组件 88 文件上传案例_需求 89 文件上传案例_JS代码 90 文件上传案例_约束的可配置性 91 文件上传案例_总体步骤分析 92 文件上传 ...
- javaweb总结(四十)——编写自己的JDBC框架
一.元数据介绍 元数据指的是"数据库"."表"."列"的定义信息. 1.1.DataBaseMetaData元数据 Connection.g ...
- javaweb(十四)——JSP原理
一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...
随机推荐
- nginx 的socket 选项处理--TCP_DEFER_ACCEPT
在nginx listen配置项的说明中有一个选项: deferred -- indicates to use that postponed accept(2) on Linux with. the ...
- C# DataGridview用NPOI导出Excel文件
导出excel我用的是nuget 的NPOI,直接在项目中添加的,引用到项目中,下面是截图: 下面我把ExcelHelper贴出来 public static class ExcelHelper { ...
- 转:APPlication,Session和Cookie的区别
方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟 ...
- REST Framework 的用户认证组件
用户认证流程: 我们要知道这个流程是怎么走的? 认证之后做的什么? 怎么认证?这三个条件 认证流程:就是使用BaseAuthentication这个模块来做认证,判断你登陆成功传递过来的随机字符串是否 ...
- Linux ss命令详解
ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息 ...
- HTML基础标签的综合应用案例(颜色、斜体、加粗、下划线、a标签、无序列表、有序列表)
什么是HTML l HTML(HyperText Mark-up Language)即超文本标记语言或超文本标签语言. l 何为超文本:“超文本”可以实现页面内可以包含图片.链接,甚至音乐.程序等. ...
- c++与matlab联合编程,调用Deploytool 生成exe文件和dll文件(转)
转自:http://www.cnblogs.com/xlw1219/archive/2012/12/25/2832222.html 首先必须知道联合编程需要知道的一些命令解释: mcc 的作用是将 . ...
- (转)图形学理论知识 BRDF 双向反射分布函数(Bidirectional Reflectance Distribution Function)
BRDF理论 BRDF表示的是双向反射分布函数(Bidirectional Reflectance Distribution Function),它描述了光线如何在物体表面进行反射,可以用来描述材质属 ...
- RTCM32编解码中的一些概念及相关文献阅读
1. IODC和 IODE —— 导航电文相关.iode/iodc是在GPS系统的ICD2中定义的参数,iode指星历数据事件,iodc指星钟数据事件. IOD 是 issue of data ,数 ...
- nginx配置解析之客户端真实IP的传递
前后端分离之后,采用nginx作为静态服务器,并通过反向代理的方式实现接口跨域的方式,在降低开发成本的同时也带来了诸多问题,例如客户端真实IP的获取. 在一些特殊场景下,比如风控和支付流程,往往需要获 ...