首页 > 代码库 > Servlet开篇准备

Servlet开篇准备

作者:禅楼望月(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可以保留uri中的参数,利于收藏

访问页面的URL;

表单参数;

Accept请求报头域用于指定客户端接受哪些类型的信息。eg:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本;

Accept-Charset请求报头域用于指定客户端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受;

Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。eg:Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受;

Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证;

Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的;

Cache 头域

  If-Modified-Since

  作用: 把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。

If-None-Match

  作用: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag.  使用这样的机制将提高网站的性能。

Cache-Control

  作用: 这个是非常重要的规则。 这个用来指定Response-Request遵循的缓存机制。各个指令含义如下

  Cache-Control:Public   可以被任何缓存所缓存()

  Cache-Control:Private     内容只缓存到私有缓存中

  Cache-Control:no-cache  所有内容都不会被缓存

一个请求如下:

技术分享

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)

Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding这样用于记录文档的压缩方法,eg:Content-Encoding:gzip

Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。

Last-Modified实体报头域用于指示资源的最后修改日期和时间。

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

HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。eg:为了让浏览器不要缓存页面,我们也可以利用Expires实体报头域,设置为0,jsp中程序如下:response.setDateHeader("Expires","0");

一个请求响应如:

技术分享

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文件。)

Servlet开篇准备