Java Web -- Servlet(9) Http协议详细分析--HTTP响应部分(Refresh、Content-Disposition、缓存例子)(2)

三、HTTP响应

一个HTTP响应代表服务器向客户端回送的数据,它包括:

一个状态行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

(1)状态行

状态行用于描述服务器对请求的处理结果。

(2)消息头

消息头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

(3)实体内容

代表服务器向客户端回送的数据。

状态行

格式:HTTP版本号
状态码
原因叙述

举例:HTTP/1.1
200
OK

状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类。

http响应的状态行举例说明

200:请求和响应没有错误,这个最常见

302:表示当你请求一个资源的时候,服务器返回302表示,让浏览器转向到另外一个资源。

//告诉浏览器我的状态码为302,是要跳转到另外一个资源的。

response.setStatus(302);

//把HTTP响应的Location设置为...

response.setHeader(“Location”,”/web应用/web资源”);

//上面两行代码与response.sendRedirect(“/web应用/web资源”);
(实际是调用了上面两行码)是一样的。

这个时候返回两个状态码
302 200

第一个是这个Servlet1要转向Servlet2,第二是要把Servlet2返回给浏览器,而这个Servlet2没有错误。

404:找不到资源

500:服务器错误

Http响应消息头详解:

Location: ....
(让浏览器重新定位到URL)

Content-Length: gzip
(告诉浏览器我的压缩方式)

Content-Language: zh-cn
(支持中文)

Content-Length: 43
(告诉浏览器回送的数据大小是多少字节)

Content-Type: image/gif
(内容格式
image/gif
还有text/html等等)

Last-Modified:...
(告诉浏览器,该资源上次更新时间)

Pefresh:5,url=http://www.baidu.com
(告诉浏览器,5秒后,刷新到百度)

Content-Disposition: attachment; filename=name.zip
(告诉浏览器,有文件下载,名字为name)

Transfer-Encoding:chunked (传输的编码)

Date: Sat, 16 Apr 2016 04:16:36 GMT
(请求日期)

Expires: -1
(告诉浏览器如何缓存页面)

Pragma: no-cache
(告诉浏览器如何缓存页面)

Cache-Control: private, max-age=0, no-cache
(告诉浏览器如何缓存页面)

Server: apache
(告诉浏览器我的服务器是Apache)

Connection:close/Keep-Alive
(长连接--保持连接)

X-Content-Type-Options: nosniff
(通过为网站提供对更多的文件及主域名进行最严格的审核,加强了安全性。)

---------------------------------------------------------------------------------------

Refresh使用:

Refresh:可延时跳转到某个页面,也可定时刷新本页面。

两种方式如下:

如:response.setHeader(“Refresh”,”秒数;url=
/Web应用/Servlet名称”);

response.setHeader(“Refresh”,”10;url=www.baidu.com”);

//10秒后跳转到百度

//如果url是本地的资源,即定时刷新本页面

Content-Disposition文件下载:

添加一个images文件夹,复制2.jpg到该目录下。

创建demo3.java,代码如下:

package com.focus.Thread;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class demo3 extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

//PrintWriter out = response.getWriter();

response.setHeader("Content-Disposition", "attachment; filename=2.jpg");

//获取下载文件的绝对路径

String path = this.getServletContext().getRealPath("/images/2.jpg");

//System.out.println(path);
路径输出是绝对路径

//创建文件输入流

FileInputStream fis = new FileInputStream(path);

//做一个缓冲字节数组

byte buff[] = new byte[1024];

int len = 0;
//表示实际每次读取了多少个字节

//获取输入流

ServletOutputStream os = response.getOutputStream();

//以字节的形式输出

while((len = fis.read(buff)) > 0){

os.write(buff,
0, len);

}

os.close();

fis.close();

}

}

可弹出下载窗口,下载下来即是您的2.jpg图片文件。

缺点:没有图标。

---------------------------------------------------------------------------------------

缓存问题举例:

浏览器的默认情况下,是会缓存我们的页面,这样可以节省带宽,和提高访问速度。但有些情况我们不想让本页面缓存(如股票、基金)。

创建一个Servlet(dome3.java)代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

out.println("本网站是股票网站,时刻保持更新"+new
java.util.Date().toString());

}

在缓存文件中查看,可找到缓存文件。文件为无期。

当加入如下代码时,可取消缓存。

//指定该页面不缓存(针对IE浏览器)

response.setHeader("Expires",
"-1");

//为了保证兼容性(火狐浏览器...)

response.setHeader("Cache-Control:",
"no-cache");

response.setHeader("Pragma",
"no-cache");

在缓存文件中查看不到该网页的缓存文件。

设置合理的缓存时间值,可以避免浏览器频繁向服务器发送请求,提升服务器的性能,又可以不要无限期的缓存。

加入代码如下:

package com.focus.Thread;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class demo3 extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

//
//指定该页面不缓存(针对IE浏览器)

//
response.setHeader("Expires", "-1");

//
//为了保证兼容性(火狐浏览器...)

//
response.setHeader("Cache-Control:", "no-cache");

//
response.setHeader("Pragma", "no-cache");

//设置缓存的时间,设置为一个小时。

response.setDateHeader("Expires", System.currentTimeMillis()+1000*3600);

PrintWriter out = response.getWriter();

out.println("本网站是股票网站,时刻保持更新"+new
java.util.Date().toString());

}

}

当查看缓存文件时,可以看到该缓存到期时间是一个小时。

当在地址栏中单击回车键时,如果该页面没有更新,则该页面是没有变化的,因为该页面是从缓存文件中取。

时间没有任何更新:

时间: 2024-10-12 22:36:47

Java Web -- Servlet(9) Http协议详细分析--HTTP响应部分(Refresh、Content-Disposition、缓存例子)(2)的相关文章

Java Web(1):HTTP协议

HTTP协议 HTTP(HyperText Transfer Protocol)协议是应用层协议,是一个基于请求(request)/响应(response)模式的.无状态的(stateless)协议 HHTP URL http://hostname[:port][abs_path] 浏览器与服务器连接的一般过程 ServerSocket serverSocket = new ServerSocket(80); serverSocket.accept(); /* www.baidu.com:80

Java Web -- Servlet(1) 必备知识

学习Java WEB开发必备的基本概念: 1.WEB 本意是蜘蛛网和网的意思,在网页设计中我们称为网页的意思.现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本(hypertext).超媒体(hypermedia).超文本传输协议(HTTP)等. 2.静态网页(可简单理解为html) 是指网页的内容是固定的,不会根据浏览器者的不同需求而改变.(实实在在保存在服务器上的文件) 3.动态网页 是指在接到用户访问要求后动态生成的页面,页面内容会随着访问时间和访问者发生变化(并不是独立存在于服务

Java Web servlet理解

一.有两种应用程序 1.桌面应用程序:需要下载,安装,更新等.如QQ,office等 2.web应用程序:就是我们开发的web项目,这不需要用户下载,只需要用户客户端联网,访问相应的互联网资源. 二.Http协议 HTTP是一个属于应用层的面向对象的超文本传输协议,基于TCP/IP协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.HTTP特点: (1)无连接:分为4个阶段:建立连接.发送请求.等待响应.关闭连接 优点:快速.简单.不占用网络服务器资源 缺点:速度由网络来决定,每次传输数据

JAVA WEB SERVLET 基础知识点

Servlet Servlet Servlet API 概述 Servlet 编写基础的Servlet应用程序 1编写和编译Servlet类 2应用程序的目录结构 3调用Servlet ServletRequest ServletResponse ServletConfig ServletContext GenericServlet 1 HTTPServlet 2 HttpServletRequest 3 HttpServletResponse 处理HTML表单 使用部署描述符 掌握Servle

在linux环境下搭建java web测试环境(非常详细!!)

一.项目必备软件及基本思路 项目必备:虚拟机:VMware Workstation (已安装linux的 CentOS6.5版本) 项目:java web项目 (必须在本地部署编译后选择项目的webRoot,改为ROOT(ROOT包含下面四个关键文件),放到tomcat下的webapps下即可,因为tomcat启用一个工程的时候,就是发布了除了JSP以外的,所有已被编译过的java文件,所以只能放在本地部署生成编译后的class文件).java环境配置:配置JDK服务器:tomcat数据库:My

MVC模式在Java Web应用程序中的实例分析

MVC作为软件架构中及其重要的一种架构思想,在实际的java web项目开发中被开发者们广泛的应用.遵循MVC思想的所产生的解决方法也可以因实际情况的不同来进行不同的选择.这里以一个应用struts+hibernate+jsp的实例来进一步认识MVC. 学生管理系统中添加学生模块的的MVC架构: Model(系统的业务逻辑):Hibernate进行管理的数据实体+定义的业务逻辑的体现--------数据库操作类,也就是通常所说的Dao层 数据实体(PO,Entity): package PO;

Java Web -- Servlet(10) 中文乱码处理专题

一.产生乱码的原因: 当浏览器通过http协议访问web服务器时,假设此时浏览器的编码是utf-8,当把请求发给web服务器时,web服务器却以ISO-8859-1编码接收,所以就产生了乱码. //设置web服务器接收时,以utf-8形式接收,如下: request.setCharacterEncoding("utf-8"); //编码方式设置和浏览器一样(还有常见的gbk.gb2312) //设置浏览器显示时,以utf-8显示. response.setContentType(&qu

Java Web —— servlet 容器

要想了解什么是 Servlet 容器,我们得先了解什么的 Web 服务器. 一.Web 服务器 Web 服务器是使用 HTTP 协议来传输数据的,其中最简单的一种情况就是用会在 client 中输入一个 URL ,然后通过网页进行浏览,在网页中可以看到你编写的界面,因此,服务器的工作就是发送网页到客户端. 二.Servlet 容器 单单使用 Web 服务器的话,我们会发现用户和客户端只能向服务器请求静态的网页.如果说用户想根据自己的输入来读取网页的话就不能单单需要 Web 服务器来发送网页,这个

[Java.Web] Servlet 的一些细节

本文来自 传智播客视频PPT 1. 由于客户端是通过 URL 地址访问 web 服务器中的资源,所以 Servlet 程序若想被外界访问,必须把 servlet 程序映射到一个 URL 地址上,这个工作在 web.xml 文件中使用 <servlet> 元素和 <servlet-mapping> 元素完成. 2. <servlet> 元素用于注册 servlet ,它包含有两个主要的子元素:<servlet-name> 和<servlet-class&