【JavaWeb】JavaWeb入门之Tomcat详解

目录

[1.Java Web前奏](#1.Java Web前奏)

1.1.C/S结构

1.2.B/S结构

1.3.静态网页和动态网页

1.4.常见的网页

1.5.Web服务器

2.HTTP协议

2.1.HTTP协议概念

2.2.无状态协议

2.3.HTTP1.0和HTTP1.1

2.4.请求协议和响应协议

2.5.请求协议

2.5.1.GET请求

2.5.2.POST请求

2.6.响应协议


1.Java Web前奏

1.1.C/S结构

C/S即客户端/服务器(Client/Server)例如QQ就是C/S结构的。我们可以在电脑上安装QQ的客户端,客户端软件向服务器端软件发送请求,服务器端给客户端返回响应

但是,因为客户端需要不断的更新,用户使用起来就比较麻烦。现在的C/S结构的客户端已经好多了,可以提示用户更新,用户只需要点击更新就可以了。最早时需要用户自己去官网上下载最新客户端,然后把老版本卸载,再去安装新版本

1.2.B/S结构

B/S结构即浏览器/服务器(Browser/Server),例如网站都是B/S结构的。当然,网站也只是B/S结构体系软件中的一种而已

B/S结构的好处在于不需要用户更新客户端,客户端只需要有一个浏览器就OK。当软件需要更新时,开发人员只需要关心服务器端就行。就像你在浏览器中访问百度时,发现百度的主页发生了变化,但你也不需要更新什么

1.3.静态网页和动态网页

早期在Internet上都是静态网页,即html页面。静态网页的数据都是不能自动变化的,例如网页上的当前用户信息:"欢迎XXX登录本系统",这说明当前用户名为XXX。如果有其他用户登录系统就应该显示其他用户的名字,而且无需修改页面。说白一点,用户名应该是变量,而不是常量,这是静态网页做不到的

动态网页可以中包含变量,数据的变化就不是问题了。但动态网页只能在服务器端使用,客户端浏览器只能识别静态网页。所以,如果用户请求的是动态网页,那么就需要服务器先把动态网页转换成静态网页发送给客户端浏览器

动态网页必须由服务器来处理

1.4.常见的网页

  • 静态网页:htm、html

  • 动态网页:php、asp、aspx、jsp、do、action

我们要学习的是JSP(Java Server Pages),与其相关的是do(struts1)、action(struts2)

1.5.Web服务器

Web服务器的作用是接收客户端的请求,给客户端做出响应

Tomcat(Apache):免费、开源

JBoss(Redhat红帽)

Weblogic(Orcale):付费。使用Tomcat开发,项目写完后放到Weblogic上运行

Websphere(IBM):付费。与Weblogic相似

2.HTTP协议

2.1.HTTP协议概念

HTTP,即超文本传输协议。所有浏览器都可以发出http协议

协议就是规定的文本格式。例如写本书有格式,写总结也有格式。当然客户端发送请求也要有格式,这个格式是已经约定的格式,所以服务器端按请求格式来获取请求信息,然后服务器端再按照响应格式来响应,当然客户端还要按响应的格式来解析

2.2.无状态协议

HTTP是无状态协议,所谓无状态是指客户端发送一个请求,服务器返回一个响应,然后就断开连接了。无状态的好处是效率高,用户连接一下就断开,当用户再次发送请求时,再连接,然后在响应之后再次断开。如果用户在服务器上找到了自己想看的小说,那么服务器只是把小说的内容(html)发送给用户的浏览器,然后用户的浏览器显示已经发送到本地的html,其实这时已经与服务器断开连接了。用户可能会看很久,但这不会占用服务器的任何资源

2.3.HTTP1.0和HTTP1.1

HTTP现在有两个版本,HTTP1.0和HTTP1.1

HTTP1.0:响应结束后会马上断开

HTTP1.1:必须在请求中包含Host(主机)头信息,响应结束后不会马上断开,会有一个超时时间,可能会在超时之前完成多个请求/响应,当超时的时候就断开

2.4.请求协议和响应协议

无论是请求协议还是响应协议,都是由如下部分构成的:

  • 请求(或响应)首行

  • 请求(或响应)头信息

  • 空行

  • 请求(或响应)正文

请求:GET/POST

只有表单才可能是POST,其他都是GET

POST有正文,即表单内容:username=zhangSan&password=123

GET没有正文,但是空行可是有的

请求首行:(GET/POST) URL HTTP/1.1

**响应首行:**HTTP/1.1 状态码 状态码的解释

响应的正文就是HTML

2.5.请求协议

请求是客户端给服务器的。我们可以通过浏览器来监视请求和响应,获取完整的请求和响应信息

2.5.1.GET请求

下面是通过浏览器获取到的请求信息,这就是浏览器发送给服务器的全部请求信息内容。请求的地址是:http://localhost/hello/index.jsp

//请求首行
GET /hello/index.jsp HTTP/1.1
//下面全部是请求头信息,因为GET请求没有正文
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98
//空行,因为GET没有正文,所以下面没有东西了

**GET /hello/index.jsp HTTP/1.1:**GET请求,请求服务器路径为/hello/index.jsp,协议为1.1

**Host:localhost:**请求的主机名为localhost

**User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0:**与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8: 告诉服务器,当前客户端可以接收的文档类型,其实这里包含了*/*,就表示什么都可以接收

**Accept-Language: zh-cn,zh;q=0.5:**当前客户端支持的语言,可以在浏览器的工具->选项中找到语言相关信息

**Accept-Encoding: gzip, deflate:**支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送

**Connection: keep-alive:**客户端支持的链接方式,保持一段时间链接,默认为3000ms

**Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:**因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送去过,这个Cookie的名字为JSESSIONID

Get请求没有正文,只有头信息,请求参数是在请求的首行的url中传递的。请求的参数的容量是有限的,不能超过1024kb

2.5.2.POST请求

// 请求首行
POST /hello/index.jsp HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://localhost/hello/index.jsp
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98
Content-Type: application/x-www-form-urlencoded 
Content-Length: 14 
// 这里是空行
//POST有请求正文
username=hello

**Referer: http://localhost/hello/index.jsp:**请求来自哪个页面。这个值说明请求是从index.jsp页面发送出去的。如果这个表单的作用是下载,那么在给用户提供资源之前可以去判断请求是从哪个页面发送过来的,如果不是从本网站发送过来的,那么就可以拒绝下载,例如盗链

**Content-Type: application/x-www-form-urlencoded:**表单的数据类型,说明会使用URL格式的UTF-8编码数据。URL编码的数据都是以"%"为前缀,后面跟随两位的16进制

**Content-Length:14:**表示请求数据的长度,这里表示14个字节

**username=hello:**这是请求正文,username是文本框的名字,hello是在表单中输入的数据

2.6.响应协议

响应是服务器给客户端的

html 复制代码
// 响应首行
HTTP/1.1 200 OK
// 响应头信息
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 777
Date: Sat, 09 Feb 2012 18:30:52 GMT
// 空行,下面是响应正文,即HTML代码
​
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="http://localhost:80/hello/">
    
    <title>My JSP 'index.jsp' starting page</title>
  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">    
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
  <!--
  <link rel="stylesheet" type="text/css" href="styles.css">
  -->
  </head>
  
  <body>
    This is my JSP page. <br>
    
    <form method="post" action="index.jsp">
      <input type="text" name="username" /><br/>
      <input type="submit" value="SUBMIT"/>
    </form>
  </body>
</html>

**HTTP/1.1 200 OK:**响应协议为HTTP1.1,状态码为200,表示请求成功,OK是对状态码的解释

**Server: Apache-Coyote/1.1:**这是服务器的版本信息

**Content-Type: text/html;charset=UTF-8:**请求正文使用的编码为UTF-8

**Content-Length: 777:**响应的内容为777字节

**Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello:**响应给客户端的Cookie

**Date: Sat, 09 Feb 2012 18:30:52 GMT:**响应的时间,这可能会有8小时的时区差

常见的状态码:

  • 404 not found:没有找到

  • 500 error:找到了,但内部出错

  • 200 ok:成功

相关推荐
落霞的思绪18 分钟前
苍穹外卖08——(涉及接收日期格式数据、ApachePOI导出报表、sql获取top10菜品数据)
java·spring boot·后端·mybatis·苍穹外卖
小陈的知识分享24 分钟前
微服务保护
java·微服务
目目沐沐25 分钟前
过滤器模式
android·java·windows
爱是小小的癌25 分钟前
Java-数据结构-链表(LinkedList)-双向链表
java·数据结构·链表
兩尛1 小时前
Web后端开发总结(day14)
java·开发语言
昔我往昔1 小时前
Spring Boot项目中如何使用日志记录
java·spring boot·后端
:-)1 小时前
美化IDE之修改IDEA启动界面logo图片
java·ide·python·pycharm·intellij-idea
master-dragon1 小时前
spring mvn 国际化配置
java·后端·spring
Cikiss1 小时前
Git分支——《Pro Git》
java·git·后端
Eddy5x1 小时前
Maven多模块项目如何灵活构建
java·maven