作者:禅楼望月(http://www.cnblogs.com/yaoyinglong

1. HTTP协议

HTTP协议是TCP/IP协议的上层协议。TCP负责确保从一个网络节点向另一个网络节点发送的文件能作为一个完整的文件到达目的地。IP是一个底层协议,负责把数据块(数据包)沿路/路由到目的地。HTTP是另一个网络协议,它要依赖TCP/IP从一处向另一处完整的传送请求和响应。

1.1 HTTP协议之URL

把URL作为第一个介绍是因为,只有你在浏览器中输入了url地址,才会有后面的HTTP请求和HTTP响应。

rul地址解析如下:

TCP端口只是一个16位数字而已,用于标识服务器硬件上一个特定的软件程序。从0到1023的TCP端口好已经保留。

1.2 HTTP协议之HTTP请求

请求流中关键要素为:

HTTP方法(主要的为GET和POST)

GET和POST的区别:

  • 从安全看 get<post 因为get 会把提交的信息显示到地址栏;

  • 从提交内容看 get<post get 一般不要大于2k, post理论上无限制,但是在实际开发中,建议不要大于64k;

  • 从速度看 get>post,get立即响应,post排队;

  • Get可以保留uri中的参数,利于收藏;

  • 如何使用:GET表示得到某些东西,对服务器不应该做任何改变,所以它是幂等的。POST是一个更新。使用POST体中的数据修改服务器上的某些东西,它是非幂等的;

注:幂等是指,一次和多次请求某一个资源应具有相同的副作用。

访问页面的URL;

表单参数;

Accept: text/html,image/*   [告诉服务器,我可以接受文本,网页,图片]

Accept-Charset: ISO-8859-1 [接受字符编码 iso-8859-1]

Accept-Encoding: gzip,compress [可以接受 gzip,compress压缩后数据]

Accept-Language: en-us,zh-cn [浏览器支持中,英文]

Host: www.sohu.com:80 [我要找主机是 www.sohu.com:80]

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT [ 告诉服务器,我的缓冲中有这个资源文件,该文件的时间是。。。]

Referer: http://www.sohu.com/index.jsp  [告诉服务器,我来自哪里,该消息头,常用于防止盗链]

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)[告诉服务器,浏览器内核]

Cookie [cookie]

Connection: close/Keep-Alive   [保持连接,发完数据后,我不关闭连接,30秒]

Date: Tue, 11 Jul 2000 18:23:51 GMT [浏览器发送该http请求的时间]

一个请求如下:

1.2 HTTP协议之HTTP响应

在接收和解释请求消息后,服务器返回一个HTTP响应消息。

关键要素为:

状态码:

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:

200 OK      //客户端请求成功

400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden  //服务器收到请求,但是拒绝提供服务

404 Not Found  //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

eg:HTTP/1.1 200 OK (CRLF)

Location: http://www.baidu.org/index.jsp  【让浏览器重新定位到该url】

Server:apache tomcat 【告诉浏览器我是tomcat】

Content-Encoding: gzip 【告诉浏览器我使用 gzip】

Content-Length: 80  【告诉浏览器回送的数据大小为80节】

Content-Language: zh-cn 【支持中文】

Content-Type: text/html; charset=GB2312 [内容格式text/html; 编码gab2312]

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【告诉浏览器,该资源上次更新时间】

Refresh: 1;url=http://www.baidu.com 【过多久去,刷新http://www.baidu.com】

Content-Disposition: attachment; filename=aaa.zip 【告诉浏览器,有文件下载】

Transfer-Encoding: chunked  [传输的编码]

Set-Cookie:SS=Q0=5Lb_nQ; path=/search[后面详讲]

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

Cache-Control: no-cache  [告诉浏览器如何缓存页面火狐]

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

Connection: close/Keep-Alive   [保持连接 1.1Keep-Alive]

Date: Tue, 11 Jul 2000 18:23:51 GMT

Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期的时间。eg:Expires:Thu,15 Sep 2006 16:23:12 GMT

一个请求响应如:

2. Web服务器

Web服务器最擅长提供静态Web页面,但是有时我们不仅仅从Web服务器获取一些动态的内容,这时Web服务器会调用服务器上另一个应用(Web容器,如Tomcat),然后从这些应用中取得相应的响应,再把它发送给客户。

Web容器就是一个动态网页的管理器和解释器,当向Web服务器请求一个Servlet时,Web服务器首先将这个请求交给部署该Servlet的容器。由容器向servlet提供HTTP请求和响应,而且由容器调用Servlet的方法。

容器处理请求的过程:

容器的作用:

1、提供Web服务器与Servlet的通信,无需我们自己写Scoket等内容。

2、管理Servlet的一生。

3、多线程支持;注意会有同步的问题。

4、将JSP翻译为Servlet

3. Tomcat

3.1 安装tomcat服务器

解压即可。

3.2 配置

①在环境变量中添加:JAVA_HOME= 指向你的jdk的主目录(并不是bin文件目录

注:如果没有在环境变量中配置JAVAHOME,则应该在tomcat的startup.bat文件中配置:

② 启动tomcat服务器

到 tomcat 主目录下 bin/startup.bat

③验证是否安装成功

http://localhost:8080(8080是默认端口如果该端口已经被占用需要修改端口)

如果您的机器的8080端口被占用,则无法启动,这是有两种解决方法:

1.关闭8080端口

使用netstat -an或者netstat -anb查看谁占用了8080端口,然后关闭它就可以了。

2.改变Tomcat的端口号

到 conf/server.xml 文件中修改

注意:tomcat有多个Connector,每个Connector代表不同protocol(协议),也是从不同的端口来访问的。如上面的Connector是从8088端口来访问tomcat的,并且只能接受HTTP/1.1协议。因此不要改错了。

3.3 Tomcat的目录结构

bin: 启动和关闭tomcat的bat文件

conf: 配置文件

        -->server.xml : 该文件用于配置server 相关的信息, 比如 tomcat启动端口号,配置Host, 配置Context, 即web应用(当把web应用放在别的地方而不是放在webapps中时就要用它了)

        -->web.xml : 该文件配置web应用(web应用就相当于是一个 web站点)

        -->tomcat-users.xml: 该文件用户配置tomcat 的用户密码 和 权限

lib 目录: 该目录放置运行tomcat 运行需要的jar包

logs 目录:存放日志, 当我们需要去查看日志的时候,很有用!当我们启动tomcat错误时候,可以查询信息.

webapps 目录: 该目录下,放置我们的web应用(web 站点)。

work: 工作目录: 该目录用于存放jsp被访问后生成的对应的server文件和.class文件

3.4 Web应用的目录规范结构及首页配置

一个完整的标准Web应用的目录规范结构如下所示:

在这个目录结构中:WEB-INF目录下的classes目录将来是存放.class文件;lib 目录用来存放.jar文件;web.xml 配置当前这个web应用的信息(目前我们只需要知道这几个就够了,随着不断的深入其他的目录的用途会被一一揭晓)。

假如我们想将index.jsp页面配置为该应用的首页,则应该在web.xml文件中进行如下配置:

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

这样当我们的网址中不带资源名称时Web服务器就会将首页返回给我们。

3.5 管理虚拟目录

大多数情况下,当我们把web 应用直接放到webapps目录下,这时,tomcat会自动管理,但是有时候如果我们希望tomcat也可以管理其它目录下的web应用,该怎么办呢?使用虚拟目录配置

假如我希望tomcat帮我管理我D:\Web2(这是一个web应用):

①在tomcat的conf目录下打开server.xml文件;

②找到Host节点,添加<Context path="/myweb2" docBase="d:\web2"/>

myweb2:是访问时输入的web名,实际取出的是d:\web2中的资源

"d:\web2":要管理的物理路径。

假如我们要访问d:\web2中的index.jsp文件,实际访问时输入的地址:http://localhost:8088/myweb2/index.jsp

③重启tomcat才生效(因为tomcat待用dom技术解析xml文件。)

1 Servlet开篇准备的更多相关文章

  1. Servlet开篇

    Servlet开篇 前面我已经说过好多遍了,如何学习好一个东西其实就是2个问题: 1,这个东西是干嘛的?为什么要玩这个东西? 2,怎么样就玩好这个东西了?具体的应该玩这个东西的什么? 其实现在对于我来 ...

  2. java web简易网上书店项目系列,使用MVC模式(servlet+jstl+dbutils),开篇

    一. 针对很多java web初学者入门困难的问题,笔者利用一个小型web项目,一步一步的展示java web开发方法,每一个章节引入一些java web开发的重点知识,让同学们可以将java web ...

  3. JSP学习 —— 开篇:JSP,servlet容器,Tomcat,servlet容器之间的关系

    JSP(JAVA SERVER PAGE)的缩写,其本身就是servlet的简化,是一种动态网页标准,其特点是在HTML代码中嵌入JAVA代码,JSP标签或用户标签来生成网页.至于它为什么会出现,主要 ...

  4. JSP入门:介绍什么是JSP和Servlet(转)

    转自:http://developer.51cto.com/art/200907/134506.htm JSP入门:什么是jsp? JSP(Java Server Pages)是由Sun Micros ...

  5. 从.Net到Java学习第一篇——开篇

    以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...

  6. Servlet、Tomcat访问(access)日志配置、记录Post请求参数

    一.运行环境: Maven:3.5.2(点击下载) ,下载页 Tomcat:8.5.29(点击下载) ,下载页 JDK:jdk1.7.0_80(点击下载) ,下载页 MavenDependency: ...

  7. Servlet容器请求处理

    红色部分为本章所述模块 所讲述的请求流程模块,大家已经很清楚了.那怎么给大家去讲的更清晰,大家理解的更容易呢?当然是,带着问题去学习,吸收或许会更快些啦.:) 开篇之前,给大家提以下几个问题,这些问题 ...

  8. 【Spring实战】----开篇(包含系列目录链接)

    [Spring实战]----开篇(包含系列目录链接) 置顶2016年11月10日 11:12:56 阅读数:3617 终于还是要对Spring进行解剖,接下来Spring实战篇系列会以应用了Sprin ...

  9. servlet基础梳理(一)

    将近一个月没看servlet了,再加上第一次学习也没有深入.仅仅是笼统的看了一遍,编了一点基础案例就过去了,如今再去看感觉跟没学过一样.这里再用一点时间把这些基础都梳理一下,加深印象并为以后高速复习做 ...

随机推荐

  1. Cluster群集

    Cluster群集一般来讲有四个功能1. 冗余功能,就是说在这个群集中的任何一台机器出现本机或网络故障时,整个网络仍不中断,对外的服务也不中断,网络有多个路线可以走,服务器也可以相互代替.2.负载均衡 ...

  2. Level shifting a +/- 2.5V signal to 0 - 5V

    Google : Op-Amp Level Shifter Level shifting a +/- 2.5V signal to 0 - 5V I have a front end module t ...

  3. 实现多项式的JAVA类

                                   p = coef[i] + (x * p);               }                           Poly ...

  4. django关闭debug后,静态文件的处理

    Django框架仅在开发模式下提供静态文件服务.当我开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供 ...

  5. [leetcode] Min Stack @ Python

    原题地址:https://oj.leetcode.com/problems/min-stack/ 解题思路:开辟两个栈,一个栈是普通的栈,一个栈用来维护最小值的队列. 代码: class MinSta ...

  6. fio terse输出详解

    fio, the flexible IO tester, is a very useful tool for benchmarking IO performance. It has an option ...

  7. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。

    import java.util.Scanner; /** * 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字. * 2+22+222+2222+22222(此时共有5个数 ...

  8. 【转】重新封装FetchUrl函数一枚,支持COOKIES,喜欢领走~!

    mjj520 发表于 2012-6-2 09:14 唉 cpu超级耗芸豆的 查了下开发文档,fetchurl原来是不算CPU的,是我误导了大家.  发表于 2012-6-1 17:30:17 |只看该 ...

  9. C++读取mysql中utf8mb4编码表数据乱码问题及UTF8转GBK编码

    数据库编码为utf8,但是由于某些表的一些字段存储了emoji字符,表采用了utf8mb4编码,默认情况下在C++代码中读出的中文字段值都变成了乱码. 解决方法为,在进行数据库查询前,在C++中执行一 ...

  10. swift 闭包

    闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着 这些常量和变量,俗称闭包. Swift标准库中提供了sort排序函数,sort函数的第二个参数是个闭包.和OC中的bl ...