一、HTTP协议(超级重要:必须记住)
W3C组织制定的。HTTP协议默认监听80端口,默认端口
HTTP协议的具体组成:
一、请求部分(客户端向服务器发送的数据)
POST /App1/3.html HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*
Referer: http://localhost:8080/App1/login.html
Accept-Language: zh-CN,en-US;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 30
Connection: Keep-Alive
Cache-Control: no-cache
Warnning:val1
Warnning:val2
username=chenlili&password=321
分为三部分:
1、请求行:位于信息的第一行 GET /App1/2.html HTTP/1.1
GET:请求方式(method)。默认的请求方式。常用的还有POST等。(引入表单)
GET: GET /App1/3.html?username=chenlili&password=123 HTTP/1.1 提交的数据出现在请求行中。(不建议使用:消息行有长度限制;数据太不安全)
POST: 通过html中的form标签中的属性method指定。
/App1/2.html:访问的资源的URI(Union Resource Indentity)。
URL:(Union Resource Location)。协议+主机地址+资源地址
http://localhost:8080/App1/login.html
HTTP/1.1:客户端使用的协议
2、请求消息头:从第二行开始,至第一个空行结束。
*Accept:浏览器可接受的MIME类型 .(文件系统中采用扩展名区分不同的文件的。网络上是用MIME类型来区分不同的数据的、有一定的对应关系,Tomcat\conf\web.xml有)
MIME类型:大类型/具体类型
jpg:image/jpeg
bmp: image/bmp
Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
*Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 可以在浏览器中进行设置。
Host:初始URL中的主机和端口
*Referer:包含一个URL,取值为当前页面之前的那个页面地址
应用:看广告投放效果
防盗链
*Content-Type:请求正文内容类型
目前:只有通过表单提交数据,且请求方式是post时,才会出现请求正文内容,才会有该头。
默认值是:application/x-www-form-urlencoded
对应的是<form action="3.html" method="post" enctype="application/x-www-form-urlencoded">
常用可选值:multipart/form-data (上传文件使用)
If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。
User-Agent:浏览器类型.
Content-Length:表示请求正文的长度 ,数据字节长度。
Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
*****Cookie:这是最重要的请求头信息之一 (会话管理)
Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT
3、请求正文:第一个空行之后的所有内容。
只有通过表单,且请求方式是POST时才能看到正文。
当Content-Type是:application/x-www-form-urlencoded,表单提交的数据表现形式为
username=chenlili&password=321
username和password表单中输入域的name
chenlili和321就是用户输入的数据
多个输入域用&进行分割的。
二、响应部分(服务器向客户端发送的数据)
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"96-1377826062177"
Last-Modified: Fri, 30 Aug 2013 01:27:42 GMT
Content-Type: text/html
Content-Length: 96
Date: Fri, 30 Aug 2013 01:43:38 GMT
<html>
<head>
<title>2.html</title>
</head>
<body>
hello2<br/>aaa
</body>
</html>
分为三部分:
1、响应行:位于信息的第一行 HTTP/1.1 200 OK
HTTP/1.1:服务器使用的协议
200:响应码。(预留了500个,目前真正有意义的也就30个左右)
200:一切正常
302/307:临时重定向
304:未修改(缓存)
404:资源不存在
500:服务器内部错误(自己的程序出错了)。
OK:对错误的描述信息。
2、响应消息头:从第二行开始,至第一个空行结束。
*Location: http://www.it315.org/index.jsp指示新的资源的位置
302+该头:完成是请求的重定向。
Server:apache tomcat指示服务器的类型
*Content-Encoding: 告知客户端服务器发送的数据采用的编码类型gzip(压缩格式)
*Content-Length: 80 告诉浏览器正文的长度
Content-Language: zh-cn服务发送的文本的语言
*Content-Type: text/html默认的; 告知客户端请求正文的MIME类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间
*Refresh: 1;url=http://www.it315.org指示客户端刷新频率。单位是秒
*Content-Disposition: attachment; filename=aaa.zip指示客户端下载文件,并制定文件的位置
*****Set-Cookie:SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie(会话管理)
Expires: -1 控制浏览器不要缓存
Cache-Control: no-cache (1.1)
Pragma: no-cache (1.0)
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
3、响应正文:第一个空行之后的所有内容。
浏览器要显示的数据。在未压缩的前提下,与右键 查看源码完全对应。
二、Servlet概述
三、HelloServlet第一个Servlet
编写步骤:
1、编写一个类,直接或间接实现javax.servlet.Servlet接口(一般选择继承实现了该接口的类)
package com.itheima.servlet;
import javax.servlet.*;
import java.io.*;
public class HelloServlet extends GenericServlet{
public void service(ServletRequest req,ServletResponse res)
throws ServletException,IOException{
String data = "hello servlet";
res.getOutputStream().write(data.getBytes());
}
}
2、编译。进入源码所在的文件夹,执行javac(注意要把servlet-api.jar加入到构建路径中)
set classpath=%classpath%;C:\apache-tomcat-6.0.35\lib\servlet-api.jar
E:\ITHEIMA\JavaEE05\day03_httpServlet\资料\hello\WEB-INF\classes>javac -d . HelloServlet.java
3、对Servlet进行映射。修改web.xml,增加以下内容:
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
4、部署应用到Tomcat中
访问地址:http://localhost:8080/hello/Hello
http://localhost:8080/hello/WEB-INF/classes/com/itheima/servlet/HelloServlet(不对的)
四、GenericServlet和HttpServlet(模板方法设计模式)
五、Servlet生命周期
Servlet对象是在第一次访问时由容器创建,并完成初始化工作。
对于用户的多次请求,都会调用service为您服务,而不会再创建新的对象。
当应用被写在或者Tomcat关闭,就是执行destroy进行清理工作。
如果希望Tomcat在加载应用时就实例化并完成对Servlet的初始化。做如下配置:
web.xml
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
Tips:修改MyEclipse生成的Servlet模板
1、关掉MyEclipse
2、找到MyEclipse安装目录的上一次目录
搜索:com.genuitec.eclipse.wizards_*.jar
3、用压缩软件打开jar包。找到template/Servlet.java(模板文件),解压出来。
4、修改:修改前先备份。
5、把修改后的Servlet.java拖进去
6、重启MyEclipse,生效
六、ServletConfig配置
1、作用:针对某个Servlet的配置信息。
<servlet>
<servlet-name>ServletDemo3</servlet-name>
<servlet-class>com.itheima.servlet.ServletDemo3</servlet-class>
<init-param>
<param-name>aaa</param-name>
<param-value>bbb</param-value>
</init-param>
<init-param>
<param-name>xxx</param-name>
<param-value>yyy</param-value>
</init-param>
</servlet>
Tips:Servlet的映射细节。
1、可以把一个Servlet映射到多个地址上
<servlet-mapping><!-- 把一个Servlet映射到了多个地址上 -->
<servlet-name>ServletDemo4</servlet-name>
<url-pattern>/servlet/ServletDemo4</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo4</servlet-name>
<url-pattern>/servlet/ServletDemo44</url-pattern>
</servlet-mapping>
2、映射还可以使用通配符*
使用方式:
a、*.扩展名:必须以*开头,以某个扩展名结尾。比如*.do
b、/action/*:必须以/开头,*在末尾。比如/action/*
原则:b优先级比a高。如果都是a或都是b,从前往后匹配。
七、Servlet线程安全
由于Servlet在内存中只有一个实例,service又是多线程来调用的。
因此定义变量尽量使用局部变量;如果必须用实例变量,要做好同步处理(同步代码块尽量包围少的代码)
八、ServletContext详解
九、Servlet规范中核心接口类图
W3C组织制定的。HTTP协议默认监听80端口,默认端口
HTTP协议的具体组成:
一、请求部分(客户端向服务器发送的数据)
POST /App1/3.html HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*
Referer: http://localhost:8080/App1/login.html
Accept-Language: zh-CN,en-US;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 30
Connection: Keep-Alive
Cache-Control: no-cache
Warnning:val1
Warnning:val2
username=chenlili&password=321
分为三部分:
1、请求行:位于信息的第一行 GET /App1/2.html HTTP/1.1
GET:请求方式(method)。默认的请求方式。常用的还有POST等。(引入表单)
GET: GET /App1/3.html?username=chenlili&password=123 HTTP/1.1 提交的数据出现在请求行中。(不建议使用:消息行有长度限制;数据太不安全)
POST: 通过html中的form标签中的属性method指定。
/App1/2.html:访问的资源的URI(Union Resource Indentity)。
URL:(Union Resource Location)。协议+主机地址+资源地址
http://localhost:8080/App1/login.html
HTTP/1.1:客户端使用的协议
2、请求消息头:从第二行开始,至第一个空行结束。
*Accept:浏览器可接受的MIME类型 .(文件系统中采用扩展名区分不同的文件的。网络上是用MIME类型来区分不同的数据的、有一定的对应关系,Tomcat\conf\web.xml有)
MIME类型:大类型/具体类型
jpg:image/jpeg
bmp: image/bmp
Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
*Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 可以在浏览器中进行设置。
Host:初始URL中的主机和端口
*Referer:包含一个URL,取值为当前页面之前的那个页面地址
应用:看广告投放效果
防盗链
*Content-Type:请求正文内容类型
目前:只有通过表单提交数据,且请求方式是post时,才会出现请求正文内容,才会有该头。
默认值是:application/x-www-form-urlencoded
对应的是<form action="3.html" method="post" enctype="application/x-www-form-urlencoded">
常用可选值:multipart/form-data (上传文件使用)
If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。
User-Agent:浏览器类型.
Content-Length:表示请求正文的长度 ,数据字节长度。
Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
*****Cookie:这是最重要的请求头信息之一 (会话管理)
Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT
3、请求正文:第一个空行之后的所有内容。
只有通过表单,且请求方式是POST时才能看到正文。
当Content-Type是:application/x-www-form-urlencoded,表单提交的数据表现形式为
username=chenlili&password=321
username和password表单中输入域的name
chenlili和321就是用户输入的数据
多个输入域用&进行分割的。
二、响应部分(服务器向客户端发送的数据)
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"96-1377826062177"
Last-Modified: Fri, 30 Aug 2013 01:27:42 GMT
Content-Type: text/html
Content-Length: 96
Date: Fri, 30 Aug 2013 01:43:38 GMT
<html>
<head>
<title>2.html</title>
</head>
<body>
hello2<br/>aaa
</body>
</html>
分为三部分:
1、响应行:位于信息的第一行 HTTP/1.1 200 OK
HTTP/1.1:服务器使用的协议
200:响应码。(预留了500个,目前真正有意义的也就30个左右)
200:一切正常
302/307:临时重定向
304:未修改(缓存)
404:资源不存在
500:服务器内部错误(自己的程序出错了)。
OK:对错误的描述信息。
2、响应消息头:从第二行开始,至第一个空行结束。
*Location: http://www.it315.org/index.jsp指示新的资源的位置
302+该头:完成是请求的重定向。
Server:apache tomcat指示服务器的类型
*Content-Encoding: 告知客户端服务器发送的数据采用的编码类型gzip(压缩格式)
*Content-Length: 80 告诉浏览器正文的长度
Content-Language: zh-cn服务发送的文本的语言
*Content-Type: text/html默认的; 告知客户端请求正文的MIME类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间
*Refresh: 1;url=http://www.it315.org指示客户端刷新频率。单位是秒
*Content-Disposition: attachment; filename=aaa.zip指示客户端下载文件,并制定文件的位置
*****Set-Cookie:SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie(会话管理)
Expires: -1 控制浏览器不要缓存
Cache-Control: no-cache (1.1)
Pragma: no-cache (1.0)
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
3、响应正文:第一个空行之后的所有内容。
浏览器要显示的数据。在未压缩的前提下,与右键 查看源码完全对应。
二、Servlet概述
三、HelloServlet第一个Servlet
编写步骤:
1、编写一个类,直接或间接实现javax.servlet.Servlet接口(一般选择继承实现了该接口的类)
package com.itheima.servlet;
import javax.servlet.*;
import java.io.*;
public class HelloServlet extends GenericServlet{
public void service(ServletRequest req,ServletResponse res)
throws ServletException,IOException{
String data = "hello servlet";
res.getOutputStream().write(data.getBytes());
}
}
2、编译。进入源码所在的文件夹,执行javac(注意要把servlet-api.jar加入到构建路径中)
set classpath=%classpath%;C:\apache-tomcat-6.0.35\lib\servlet-api.jar
E:\ITHEIMA\JavaEE05\day03_httpServlet\资料\hello\WEB-INF\classes>javac -d . HelloServlet.java
3、对Servlet进行映射。修改web.xml,增加以下内容:
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
4、部署应用到Tomcat中
访问地址:http://localhost:8080/hello/Hello
http://localhost:8080/hello/WEB-INF/classes/com/itheima/servlet/HelloServlet(不对的)
四、GenericServlet和HttpServlet(模板方法设计模式)
五、Servlet生命周期
Servlet对象是在第一次访问时由容器创建,并完成初始化工作。
对于用户的多次请求,都会调用service为您服务,而不会再创建新的对象。
当应用被写在或者Tomcat关闭,就是执行destroy进行清理工作。
如果希望Tomcat在加载应用时就实例化并完成对Servlet的初始化。做如下配置:
web.xml
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
Tips:修改MyEclipse生成的Servlet模板
1、关掉MyEclipse
2、找到MyEclipse安装目录的上一次目录
搜索:com.genuitec.eclipse.wizards_*.jar
3、用压缩软件打开jar包。找到template/Servlet.java(模板文件),解压出来。
4、修改:修改前先备份。
5、把修改后的Servlet.java拖进去
6、重启MyEclipse,生效
六、ServletConfig配置
1、作用:针对某个Servlet的配置信息。
<servlet>
<servlet-name>ServletDemo3</servlet-name>
<servlet-class>com.itheima.servlet.ServletDemo3</servlet-class>
<init-param>
<param-name>aaa</param-name>
<param-value>bbb</param-value>
</init-param>
<init-param>
<param-name>xxx</param-name>
<param-value>yyy</param-value>
</init-param>
</servlet>
Tips:Servlet的映射细节。
1、可以把一个Servlet映射到多个地址上
<servlet-mapping><!-- 把一个Servlet映射到了多个地址上 -->
<servlet-name>ServletDemo4</servlet-name>
<url-pattern>/servlet/ServletDemo4</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo4</servlet-name>
<url-pattern>/servlet/ServletDemo44</url-pattern>
</servlet-mapping>
2、映射还可以使用通配符*
使用方式:
a、*.扩展名:必须以*开头,以某个扩展名结尾。比如*.do
b、/action/*:必须以/开头,*在末尾。比如/action/*
原则:b优先级比a高。如果都是a或都是b,从前往后匹配。
七、Servlet线程安全
由于Servlet在内存中只有一个实例,service又是多线程来调用的。
因此定义变量尽量使用局部变量;如果必须用实例变量,要做好同步处理(同步代码块尽量包围少的代码)
八、ServletContext详解
九、Servlet规范中核心接口类图