JavaWeb 学习笔记(一)Tomcat与Web程序结构与Http协议

软件体系结构 B/S、C/S

1.常见软件体系结构

1.1 C/S

  • C/S结构即客户端/服务器,例如QQ;
  • 需要编写服务器端程序,以及客户端程序,例如我们安装的就是QQ的客户端程序;
  • 缺点是两端都需要更新,麻烦。优点就是安全性高

1.2 B/S (重点)

  • B/S结构即浏览器/服务器(Browser/Server);
  • 优点只需要编写服务器端程序;
  • 缺点是安全性差一些;

2.WEB资源

2.1 Web资源介绍

  • html:静态资源(浏览器可以看的懂)
  • JSP/Servlet:动态资源,有变量(需要先转换成html,再给浏览器)

2.2 静态资源和动态资源的区别

这里写图片描述

3 Web服务器

(1)Web服务器的啥作用是接收客户端的请求,给客户端作出相应。对于JavaWeb程序而言,还需要有JSP/Servlet容器,将动态资源转换成静态资源。当然容器的功能不止这些。所以需要使用的是Web服务器和JSP/Servlet容器,通常两者会集于一身。Tomcat(Apache)是当前应用的很广的JavaWeb服务器

(2)下载并配置Tomcat环境变量…
修改Tomcat端口号:打开其文件夹下的conf

这里写图片描述

找到这一项,并将8080改为需要的值
这里写图片描述

(3)Web应用(重点)

静态网站:

  • 在webapps目录下创建一个目录(命名必须不包含中文和空格),这个目录被称为项目目录;
  • 在项目目录下创建一个html文件;
  • 启动Tomcat;

这里写图片描述

启动Tomcat后在地址栏里输入http://localhost:8080/hello1/index.html即可看到自定义的html页面

这里写图片描述

动态网站:

  • 在webapps目录下创建一个目录(命名必须不包含中文和空格),这个目录被称为项目目录;
  • 在项目目录下创建如下内容:
    • WEB-INF目录;并在这个目录下创建web.xml文件;
    • 创建静态或者动态页面;
  • 启动Tomcat;

这里写图片描述

这里写图片描述

这样还没有体现动态网页的效果;在这个目录下创建个jsp文件,并写入相应的内容:

<%@page pageEncoding='utf-8'%>
<html>
 <head>
  <title>Hello2</title>
 </head>
 <body>
  <h1>Hello2</h1>
  <h3>${header['User-Agent']}<h3>
 </body>
</html>

在效果图里就可以看到一些由变量产生的值:

这里写图片描述

以上就是一些简单的使用Tomcat的例子,没有太多技术含量。

HTTP协议

协议:协议的甲乙双方分别是客户端和服务端,理解成双方通信的格式(无状态协议:一次一个请求,完事儿即结束)

  • 请求协议:客户端发送请求时;
  • 响应协议;

例如在浏览器中输入百度的地址,打开了百度的页面,这个页面的html是服务器给我们发送的一部分信息被称为响应体(响应正文)。当向百度搜索时,打开了一个页面,这个页面已经下载到了浏览器当中。打开浏览器的开发者工具查看

这里写图片描述

头的内容很多,选择性的记忆一些重要的:比如Accept-Language、Connection、Host等

(1)无状态:服务器给反馈以后,就断开了链接。再次访问时,再发送一个请求。每次请求服务器都不知道是谁发送的。而有状态则是保持链接,说明每次请求服务器都知道是谁发送的,例如FTP协议。

(2)一个get请求的格式:

  • 请求行
  • 多个请求头信息:头名称:头值
  • 空行
  • 请求体

浏览器并不会将以上内容显示出来,只是显示了响应正文这部分信息。

(3)用intellij写一个页面并打开,用表单标签提交到自定义的html页面并查看相应的请求和响应
这里写图片描述

有关intellij的tomcat部署还有使用请参考Mr_OOO的博客

打开开发者工具并查看请求及响应
这里写图片描述
这里写图片描述

这里写图片描述

正文(体),表单是一大堆内容,而发送给服务器的只有一行字符串:usr=123&pwd=sss,多个参数之间用&隔开。

(4)个别请求头介绍

  • Referer:请求来自哪个页面,例如你在百度上点击链接到了这里,那么Referer:https://www.baidu.com/;如果在浏览器的地址栏中直接输入地址,就没有Referer这个请求头;例子:比如直接输入某些网站的地址无法访问,然后在其所属的主页中点击超链接就可以访问,这就是通过设置Referer来实现的,通过判断是否是从其主页发出的请求;这个请求头可以统计访问量
  • Content-Type:application/x-www-form-urlencoded:表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以%为前缀,后面跟随两位的16进制
  • Content-Length:请求体的长度

Referer是一个比较有用的请求头,它可以应该做统计工作,也可以用来做防盗链。
统计工作:公司在百度上做了广告,但是不知道在百度的广告对访问量是否有影响,那么可以对每个请求中的Referer进行分析,如果百度的很多就说明用户都是通过百度找到的。
防盗链:一个公司网站上有一个下载链接,而其他网站盗链了这个地址,那么其他网站就盗本公司的资源。这是就可以使用Referer进行防盗链,在资源被下载前,对Referer进行判断。如果请求来自本网站,则允许下载。

(5)常用响应头介绍
响应协议的格式如下:

  • 响应行(协议/版本 状态码 状态码的解析),状态码以2开头都是成功
  • 响应头(key/value的格式)
  • 空行
  • 响应正文

对一些响应进行解释:

  • HTTP/1.1 200 OK:响应协议是HTTP1.1,状态码200表示请求成功,OK是对状态码的解释;
  • Server:Apache-Coyote/1.1:服务器的版本信息;
  • Content-Type:text/html;charset=UTF-8:响应体使用的编码为UTF-8;
  • Cookie:JSESSIONID=EC0A658A9BB4B186CC4900F39A170CB7:响应给客户端的Cookie;
  • Date:Thu, 01 Jun 2017 07:03:25 GMT:响应时间,这可能会有8小时的时区差;

响应码:响应头对浏览器来说很重要,它说明了响应的真正含义。例如200表示响应成功了,302表示重定向,这说明浏览器需要再发一个新的请求。

  • 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
  • 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
  • 500:资源找到了,但服务器内部出现了错误;
  • 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发送一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;
  • 304:当用户第一次请求index.html时,服务器会添加一个名为Last-Modified响应头,这个头说明了index.html的最后修改时间,浏览器会把index.html和最后响应时间缓存下来,当用户第二次请求index.html时,在请求中包含一个名为If-Modified-Since请求头,它的值就是第一次请求时服务器通过Last-Modified响应头发送给浏览器的值。If-Modified-Since请求头就是在告诉服务器,我这里缓存的index.html最后修改时间是这个,你看看现在的最后修改时间是不是这个,如果还是那么就不用响应这个index.html内容了,浏览器直接将缓存显示出来,而服务端会获取If-Modified-Since值,与index.html最后修改时间比对,如果相同服务器就会响应304,表示index.html与浏览器上次缓存的相同,无需再次发送,浏览器可以显示自己的缓存页面;如果比对不同,说明这个页面做了修改,服务端会响应200。

404的效果:访问一个不存在的页面

这里写图片描述

这里写图片描述

500效果:提交表单的页面中插入了一段Java代码,这个代码的运行结果有错

html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h1>
    Hello1
  </h1>
<%
  int a = 10/0;
%>
  </body>
</html>

在第一个页面填写用户名和密码:
这里写图片描述
点击sub以后:
这里写图片描述
以及响应:
这里写图片描述

302效果:暂时以图片的形式解释一下原理;302的重点是记住Location响应头
这里写图片描述
304效果:暂时以图片的形式解释一下原理:
这里写图片描述
(6)其他响应头
告诉浏览器不要缓存的响应头:

  • Expires:-1;
  • Cache-Control:no-cache
  • Pragma:no-cache

自动刷新响应头,浏览器会在3秒之后请求www.baidu.com

  • Refresh:3;url=http://www.baidu.com

(7)HTML中指定响应头
在html页面中可以使用<meta http-equiv=” content=”>来指定响应头,例如上例中就可以写成<meta http-equiv=’Refresh’ content=’3;url=http://www.baidu.com‘>

以上都是一些简单的演示和介绍,详细的操作会在后面的学习笔记中写

本人是菜鸟一枚,当做学习笔记写博客。谢谢各路大咖驻足审阅

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值