客户端浏览器和服务器Tomcat要进行基本的请求和响应的处理。

其实浏览器和服务器通信的数据的格式已经使用协议进行固定好了,只要双方发送固定格式的数据,那么就可以完成基本的通信。

如果开发者需要查看这样的数据格式,那么就需要安装一个浏览器的HTTP协议相关的插件。

如果要深入的学习浏览器和服务器通信的数据,那么需要详细的掌握他们之间发送的数据内容。

1  请求信息

GET / HTTP/1.1                             请求行
Accept: */*
Accept-Language: zh-cn,en-US;q=0.5  请求头
User-Agent: Mozilla/4.0
Accept-Encoding: gzip, deflate
Host: www.sina.com.cn
Connection: Keep-Alive
 空白行
uname=jack&upsw=jnb  请求体 提交的POST数据

2. 请求行

请求方式  GET和POST

请求资源  一般是以/开头就是需要访问的网站名和页面的名

协议信息  协议名/版本

2. 请求头

请求头是浏览器发送给服务器,那么就是浏览器想通知服务器做一些事情。

MIME类型指定是的什么样的文件格式需要使用什么样的应用打开。

Accept: text/html,image/*                 通知服务器浏览器接收的数据类型MIME
Accept-Charset: ISO-8859-1  通知服务器提交数据的编码方式
Accept-Encoding: gzip,compress  通知服务器浏览器支持数据的压缩
Accept-Language: en-us,zh-cn  通知服务器浏览器当前的语言信息
Host: www.it315.org:80  通知服务器要请求的主机名
If-Modified-Since: Tue, 11 Jul 2000 18:23:51  通知服务器资源的最新修改时间
Referer: http://www.it315.org/index.jsp  通知服务器本次请求来自于哪一个URL
User-Agent: Mozilla/4.0  通知服务器客户端使用的浏览器内核
Cookie  通知服务器请求中带有Cookie数据
Connection: close/Keep-Alive  通知服务器可以保持建立好的连接
Date: Tue, 11 Jul 2000 18:23:51 GMT  通知服务器发送请求的时间

请求是由浏览器发送的。那么我们程序员一般是修改不了这些请求头数据。但是在特定的情况下需要修改请求的头信息,那么此时就需要使用到JavaSE的网络编程知识的一些基础。

URL   主要使用该类来描述浏览器地址栏中的地址信息。

HttpURLConnection  主要描述的是客户端和服务器建立的连接对象

setRequestProperty()  可以设置请求头信息

3. 请求体

主要包含的是POST提交的数据。

4.多学一招: HTTP1.0和1.1的区别是什么。

HTTP1.0   该协议在发送请求的时候没有Host字段,浏览器为每一次请求建立独立的连接。

思考:如果需要浏览的页面中有3个图片。那么请问发送了几次请求?

4 = 1次文本+3次图片

HTTP1.1   提供了一个必须的Host字段,而且建立好一次连接之后可以重复使用。提高用户的上网体验。

5  响应信息

HTTP/1.1  OK                                  响应行
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=A8FB52…; Path=/day04  响应头
Content-Type: text/html;charset=ISO--
Content-Length:
Date: Fri, Jan :: GMT
 空白行
This is my JSP page.  响应体

1. 响应行

协议和版本

响应状态码  200 处理成功  302和304需要细化请求  404资源不存在 500服务器失败

状态码说明信息  OK

2. 响应头

Location: http://www.it315.org/index.jsp          通知浏览器需要进一步细化请求的路劲
Server:apache tomcat  通知浏览器服务器的名
Content-Encoding: gzip  通知浏览器响应数据类型是压缩格式
Content-Length:  通知浏览器数据的长度
Content-Language: zh-cn  通知浏览器语言
Content-Type: text/html; charset=GB2312  通知浏览器内容类型
Last-Modified: Tue, Jul :: GMT  通知浏览器资源最后一次修改的时间
Refresh: ;url=http://www.it315.org  通知浏览器自动定时刷新
Content-Disposition: attachment; filename=a.zip  通知浏览器数据的处理方式
Transfer-Encoding: chunked  通知浏览器数据是否切块
Set-Cookie:SS=Q0=5Lb_nQ; path=/search  通知浏览器需要使用Cookie存储数据
Expires: -  通知浏览器不要缓存页面
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive  通知浏览器服务器已经保持了连接
Date: Tue, Jul :: GMT  通知浏览器服务器处理的时间

3. 响应体

服务器发送给浏览器需要的资源数据

案例一: 使用动态网页开发技术实现图片的下载

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 通知浏览器以下载的方式打开美女
response.setHeader("content-disposition",
"attachment;filename=mv.jpg");
// 获取图片资源
InputStream in = this.getServletContext().getResourceAsStream("/0001.jpg");
// 获取输出到页面的输出流对象
OutputStream out = response.getOutputStream();
byte [] bs = new byte[];
int len = ;
while((len = in.read(bs)) != -){
out.write(bs, , len);
}
// 释放资源
in.close();
out.close(); }

总结:HTTP协议本身在传递数据的时候,数据时明码传输的。如果用户需要传输一些隐私的数据,那么需要进行加密。

方式1:使用各种语言支持的加密方式。

方式2:建立客户端和服务器端加密的通信连接。

HTTPS协议

加密的HTTP协议,客户端浏览器和服务器之间会建立一个加密的通道,在该通道下传递的数据都是安全的。

如:在线交易、网上银行。

那么我们就需要在Tomcat中实现HTTPS的搭建。

1. 生成证书

keytool -genkey -alias tomcat -keyalg RSA -keystore d:/tomcat.keystore

2. 在tomcat中引入证书

配置server.xml文件如下

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"

SSLEnabled="true"

maxThreads="150" scheme="https" secure="true"

clientAuth="false" sslProtocol="TLS"

keystoreFile="d:\tomcat.keystore"

keystorePass="123456"

/>

3. 使用浏览器建立安全的连接https://localhost:8443

问题:

  1. tomcat启动的时候一闪而过。

没有配置java_home环境变量。java_home=D:\jdk6.0

  1. 如果启动直接报错。

如果启动的时候发现错误信息后直接关闭了窗口,那么请查看日志信息文件。如果发现时地址冲突了,那么修改server.xml文件中的8080端口即可。

java学习笔记—HTTP协议(10)的更多相关文章

  1. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  2. 20155234 2016-2017-2第十周《Java学习笔记》学习总结

    20155234第十周<Java学习笔记>学习总结 教材学习内容总结 网络编程 在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定 ...

  3. 20155234 2610-2017-2第九周《Java学习笔记》学习总结

    20155234第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...

  4. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  5. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  6. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  7. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. 20145330第十周《Java学习笔记》

    20145330第十周<Java学习笔记> 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就 ...

随机推荐

  1. leetcode131

    深度优先遍历(DFS),先判断前一个部分是否是回文,如果是,则将其加进集合中,然后继续判断后面的回文串. 在回溯的时候,将之前加入集合的串删除,重新选择回文串.每到达一次叶子节点,得到一组结果. pu ...

  2. 提交iframe页面中的表单

    function getIframeDoc(id){             var doc;            if (document.all){//IE                 do ...

  3. np的归纳总结

    1. np.sqrt(input)    # 求数的开方 import numpy as np print(np.sqrt(2)) 2. np.square(3)   # 求数的平方 import n ...

  4. UNITY 打APK是如何确定哪些资源有用哪些无用的

    一切从build settings开始,它即是 构建列表,构建运行包当然从它开始. 1,只有在构建列表中的场景和场景引用资源才会被打进包里,其它资源除了2,3位置都不会被打包 2,streamming ...

  5. Oracle_in_not-in_distinct_minsu的用法

    create table a( id int, username ) ); create table b( id int, username ) ); ,'小明'); ,'小红'); ,'小君'); ...

  6. POJ1163 数学三角求最大路径

    描述:输入,行数,之后接数据,第一行一个数据,之后每行加一.5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 思路:简单动态规划问题.dp[i][j]定义为到这个数为止(包括这个数)的最 ...

  7. 二分图 and code1170 双栈排序

    6.6二分图 二分图是这样一个图: 有两顶点集且图中每条边的的两个顶点分别位于两个顶点集中,每个顶点集中没有边直接相连接. 无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶 ...

  8. 从YouTube改版看“移动优先”——8个移动优先网站设计案例赏析

    2011年,Luke Wroblewski大神提出了移动优先的设计理念.在当时看来这无疑是一个打破行业常规的新型设计原则.而在移动互联网大行其道的今天,谁遵守移动优先的设计理念,设计出最好的移动端网站 ...

  9. CSS中float和Clear的使用

    CSS中float和Clear的使用 本文和大家重点讨论一下CSS中Float和Clear属性的使用,一个float对象可以居左或居右,一个设置为float的对象,将根据设置的方向,左移或右移到其父容 ...

  10. app开发中如何利用sessionId来实现服务端与客户端保持回话

    app开发中如何利用sessionId来实现服务端与客户端保持回话 这个问题太过于常见,也过于简单,以至于大部分开发者根本没有关注过这个问题,我根据和我沟通的开发者中,总结出来常用的方法有以下几种: ...