您的位置:首页 > 理论基础 > 计算机网络

http协议和servlet入门笔记

2016-01-11 21:51 351 查看
一、HTTP协议

1.1协议的作用及版本

1.1.1HTTP是Hyper Text Transfer Protocol(超文本--html传输协议)。

1.1.2HTTP协议的作用用户描述客户端与服务器间的数据传递的。

1.1.3:Http协议的版本:

1.0:特点:每次请求服务器上的资源都要建立新的连接,响应完毕后都会关闭连接。是无状态的协议。

1.1:特点:在一次TCP/IP连接的基础上可以发出多次请求和得到多次的响应。比1.0多了一些请求和响应头。

1.2协议的组成

1.2.1请求部分:

GET /App1/1.html HTTP/1.1

Accept: */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)

Host: localhost:8080

Connection: Keep-Alive

username=admin&password=123

请求部分由三部分组成的:

请求行:位于第一行

请求消息头:从第二行开始至第一个空行结束

请求正文:从第一个空行之后的都是正文

1.2.2响应部分:

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Accept-Ranges: bytes

ETag: W/"65-1366335797484"

Last-Modified: Fri, 19 Apr 2013 01:43:17 GMT

Content-Type: text/html

Content-Length: 65

Date: Fri, 19 Apr 2013 02:06:23 GMT

Warnning:w1

Warnning: w2

hello http

<a href="b.html">click</a>

<img src="1.jpg"/>

响应部分由三部分组成的:

响应行:位于第一行

响应消息头:从第二行开始至第一个空行结束

响应正文:从第一个空行之后的都是正文

1.3协议详细讲解

请求行:GET /App1/1.html HTTP/1.1

GET:请求方式。默认的请求方式。其他常用的请求方式还有POST。

GET的特点:默认的请求方式。

/App1/c.html?username=sdsfds&password=234324

把表单的请求的数据放在了请求的URI的后面。?username=sdsfds&password=234324

这样不好:暴露数据;请求行长度有限。

POST的特点(经常使用的):借助HTML中的form表单。<form action="c.html" method="post">

请求参数出现在正文部分。长度木有限制。相对安全。

---------------------------

/App1/1.html:请求的资源的URI。

---------------------------

HTTP/1.1:客户端使用的协议的版本

响应行:HTTP/1.1 200 OK

HTTP/1.1:服务器用的协议版本

200:响应码。代表服务器处理的结果的一种表示

200:正常

302/307:重定向

304:服务器的资源没有被修改

404:请求的资源不存在

500:服务器报错了

OK:响应码描述

请求消息头:向服务器传递附加信息

Accept:通知服务器,浏览器可以接受的MIME类型。(文件系统中用文件扩展名区分数据的类型。网络上用MIME类型来区分数据类型。Tomcat

\conf\web.mxl)

MIME类型名称:大类型/小类型

Accept-Charset:通知服务器,浏览器支持的字符集

Accept-Encoding:通知服务器,浏览器能够解码的数据压缩方式。比如:gzip

Accept-language:通知服务器,所希望的语言

Host:请求的主机和端口

*Referer:是一个URL地址。取值是当前页面之前的那个页面地址的。防盗链

*Content-Type:通知服务器,请求正文的MIME类型。

取值:application/x-www-form-urlencoded默认值

对应的是form表单的enctype属性

If-Modified-Since:通知服务器,缓存的文件的最后修改时间。

User-Agent:通知服务器,浏览器类型.

Content-Length:表示请求消息正文的长度

Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连



*****Cookie:这是最重要的请求头信息之一(会话有关)

响应消息头:

*Location:通知客户端,指示新的资源的位置(结合302/307来用。请求重定向)

Server:通知客户端,服务器的类型

*Content-Encoding:通知客户端,响应正文的压缩编码方式。常用的是gzip。

*Content-Length:通知客户端响应正文的数据大小

*Content-Type:通知客户端响应正文的MIME类型

*Refresh:让浏览器自动刷新。取值为整数(刷新的时间间隔,单位是秒)

Refresh:3

Refresh:3;URL=其他资源的URI

*Content-Disposition:通知客户端,以下载的方式打开资源。

Content-Disposition:attachment;filename=1.jpg

*****Set-Cookie:SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie(会话有关)

*Expires: -1 网页的有效时间。单位是毫秒

*Cache-Control: no-cache (1.1)

*Pragma: no-cache (1.0) 通知客户端不要缓存

二、Servlet概述

1、Servlet是SUN公司制定的一套开发动态网页的技术。

2、JavaEE相关的类,包名一般都是以javax开头

三、编写第一个Servlet案例应用

1、建立一个标准的JavaWeb应用目录

FirstApp:

WEB-INF:

classes:

lib:

web.xml

2、进入classes目录,建立一个文本文件(所有的Servlet类都必须间接或直接实现javax.servlet.Servlet接口)

package cn.itcast.servlet;

import java.io.*;

import javax.servlet.*;

public class FirstServlet extends GenericServlet{

public void service(ServletRequest req,

ServletResponse res)

throws ServletException,

java.io.IOException{

OutputStream out = res.getOutputStream();

out.write("Hello Servlet".getBytes());

out.close();

}

}

3、进入classes目录,对FirstServlet进行编译:

前提:把servlet-api.jar加入到你的构建路径中.set classpath=%classpath%;C:\apache-tomcat-6.0.35\lib\servlet-api.jar

执行:javac -d . FirsetServlet.java

4、修改web.xml,对FirsetServlet进行url地址映射,配置如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">

<servlet>

<servlet-name>FirstServlet</servlet-name>

<servlet-class>cn.itcast.servlet.FirstServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>FirstServlet</servlet-name>

<url-pattern>/hello</url-pattern>

</servlet-mapping>

</web-app>

5、把你的应用部署到Tomcat中。

6、访问地址:http://localhost:8080/FirstApp/hello就可以看到写的Servlet类的输出结果了。

四、Servlet的生命周期

容器最终要调用service方法为客户进行服务

1、Servlet接口中的常用方法:

public void init(ServletConfig config):初始化。Servlet类被实例化后就执行,且执行一次。由容器进行调用

public void destroy():销毁Servlet对象。由容器进行调用

在内存中一个Servlet只有一个实例。针对不同的用户请求,容器采用多线程的机制调用service方法的。

Servlet实例对象和初始化方法,默认情况下,只有第一次访问时才执行,且只执行一次。

希望在应用被Tomcat加载完毕后(此时还没有任何人访问),就实例化并完成初始化Servlet的工作?

<servlet>tartup>

</servlet>

<servlet-name>FirstServlet</servlet-name>

<servlet-class>cn.itcast.servlet.FirstServlet</servlet-class>

<load-on-startup>2</load-on-s

五、Servlet(模板方法设计模式)

如果设计与HTTP协议有关的Servlet,一般选择集成javax.servlet.http.HttpServlet.

不要覆盖其中的service(ServletRequest req,ServletResponse resp)方法,而应该覆盖掉,doXXX方法。

doXXX就是根据你的请求方式来的。

HttpServlet中的service方法是典型的模板方法设计模式的具体应用。

六、Servlet配置

1、一个Servlet可以被映射到多个URL地址上

2、URL地址映射还支持通配符*

方式一:以*开头,以扩展名结尾。比如 <url-pattern>*.do</url-pattern>

方式二:以/前缀开头,以*结尾。 比如<url-pattern>/action/*</url-pattern>

3、多个Servlet使用通配符时,有可能有多

以"/"开头(方式二)要比"*"开头(方式一)优先级高

都以"/"开头,还是有多个匹配,找最匹配的

4、如果一个Servlet的映射为一个"/",就称之为默认的Servlet,它负责处理没有映射路径的URL请求的响应。

个配置的Servlet,到底执行哪一个?

原则:优先级

绝对匹配
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: