HTTP协议:
协议的概念:
规定被约束的对象需要遵守的规则!!!
HTTP协议:
HTTP协议:超文本传输协议(HTTP,HyperTextTransfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。
HTTP协议规定 浏览器(客户端)向服务器发送 何种格式的数据. 服务器 会处理数据. 向浏览器(客户端)作出响应.(向客户端发送何种格式的数据)
HTTP协议的特点:
* HTTP协议遵守一个请求响应模型.
* 请求和响应必须成对出现.
* 必须先有请求后有响应.
* HTTP协议默认的端口:80
HTTP协议的请求部分
客户端向服务器发送的数据的格式:
GET请求方式的抓包:
GET /WEB09/demo1/subSucc.html?username=aaa&password=123HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
X-HttpWatch-RID: 63397-10023
Referer:http://localhost:8080/WEB09/demo1/demo1.html
Accept-Language: zh-Hans-CN,zh-Hans;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64;Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
POST方式的抓包:
POST /WEB09/demo1/subSucc.html HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
X-HttpWatch-RID: 63397-10049
Referer: http://localhost:8080/WEB09/demo1/demo1.html
Accept-Language: zh-Hans-CN,zh-Hans;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64;Trident/7.0; rv:11.0) like Gecko
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 25
Connection: Keep-Alive
Cache-Control: no-cache
username=aaa&password=123
【请求行】
请求方式 请求路径协议版本
* 请求方式:请求方式有很多种 常用的是GET和POST.
* GET和POST区别?
* GET:请求参数会显示到地址栏.GET方式有大小的限制.GET方式没有请求体
* POST:请求参数不会显示到地址栏.在请求体中.POST没有大小限制.POST方式有请求体.
* 只有表单设置为method=”post”才是post请求.其他的都是get请求
【请求头】
* 请求头通常都是key:value的键值对的形式.一般情况下一个key对应一个value但也有一个key对应多个value的情况.
* Referer:网站的来源.防盗链.
* User-Agent:获得客户端浏览器的信息.(文件下载:IE:URL编码 火狐Base64)
* If-Modified-Since :和响应中一个头一起使用 完成本地缓存的查找.
【请求体】
POST方式 提交的请求参数
HTTP协议的响应部分
服务器向客户端发送的数据的格式:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"147-1455670867735"
Last-Modified: Wed, 17 Feb 2016 01:01:07 GMT
Content-Type: text/html
Content-Length: 147
Date: Wed, 17 Feb 2016 01:17:06 GMT
【响应行】
协议版本 状态码状态码描述
200:响应成功
302:重定向
304:查找本地缓存
404:浏览资源不存在.
500:服务器内部错误.
【响应头】
一个key对应一个value,也有一个key对应多个value的头.
Last-Modified :最后的修改文件的事件.与If-Modified-Since一起使用.
Refresh :定时刷新.
Location :重定向的路径.
Content-Disposition:文件下载的时候使用的头信息.
禁用浏览器缓存:
Pragma
Expires
Cache-Control
【响应体】
页面要显示的内容.
【Servlet的概述】
什么是Servlet:
是运行在服务器端的一小的Java程序,接收和响应从客户端发送请求.
Servlet的作用:
处理客户端的请求,并且对请求作出响应.
使用Servlet:
Servlet的入门:
* 编写一个类实现Servlet接口.
public class ServletDemo1 implements Servlet{
@Override
publicvoid service(ServletRequest request, ServletResponse response) throwsServletException, IOException {
// System.out.println("");
response.getWriter().println("HelloServlet...");
}
...
}
* 配置Servlet到WEB服务器.
<!-- 配置Servlet -->
<servlet>
<!-- Servlet的名称 -->
<servlet-name>aaa</servlet-name>
<!-- Servlet的类的全路径 -->
<servlet-class>com.itheima.servlet.demo1.ServletDemo1</servlet-class>
</servlet>
<!-- 配置Servlet的映射 -->
<servlet-mapping>
<!--Servlet的名称 -->
<servlet-name>aaa</servlet-name>
<!-- Servlet的访问路径 -->
<url-pattern>/servletDemo1</url-pattern>
</servlet-mapping>
Servlet的生命周期
生命周期:
指的是一个对象从创建到销毁的过程.
Servlet的生命周期,Servlet对象从创建到销毁的过程.
客户端第一次访问该Servlet的时候才会创建一个Servlet的对象,那么Servlet中的init方法就会执行.任何一次从客户端发送的请求,那么服务器创建一个新的线程执行Servlet中service方法为这次请求服务.
service方法的内部根据请求的方式的不同调用不同doXXX的方法.当Servlet从服务器中移除或者关闭服务器的时候Servlet对象就会被销毁.destroy的方法就会执行.
Servlet的接口的实现:
Servlet 接口
|
GenericServlet 通用的Servlet
|
HttpServlet HttpServlet
配置Servlet的启动时加载:
在web.xml中<servlet>标签中配置
<load-on-startup>2</load-on-startup>
配置url-pattern
【完全路径匹配】
* 以/开头 如:/aaa /aaa/bbb
【目录匹配】
* 以/开头 以*结尾 如:/* /aaa/*/aaa/bbb/*
【扩展名匹配】
* 不能以/开始的 需要以*开始 如:*.jsp *.do *.action
完全路径匹配 > 目录匹配 > 扩展名匹配
有如下的一些映射关系:
Servlet1 映射到 /abc/*
Servlet2 映射到 /*
Servlet3 映射到 /abc
Servlet4 映射到 *.do
问题:
当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。
当请求URL为“/abc”时,“/*”和“/abc”都匹配,哪个servlet响应
Servlet引擎将调用Servlet3。
当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet1。
当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2.
当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
Servlet引擎将调用Servlet2。
WEB开发中的路径的问题:
相对路径:不是以 / 开始的路径.
* localhost:8080/WEB09/servletDemo5
* localhost:8080/WEB09/demo2/demo1.html
绝对路径:
通常都是以 / 开始的路径.
【ServletContext】
ServletContext :Servlet中全部的内容ServletContext都了解.一个WEB应用只有一个ServletContext对象.服务器启动的时候,服务器为每个WEB工程创建一个属于自己项目的ServletContext对象.服务器关闭的时候或者项目从服务器中移除ServletContext才会被销毁.如果将值保存在ServletContext中.值就有一个作用的范围.所以这个对象称为”域对象”.
* 保存全局性信息和数据:
* 网站的访问次数:
* 聊天室:
* 在Servlet中获得ServletContext:
* ServletContextgetServletContext();
* 操作这个对象的方法:
* voidsetAttribute(String name,Object value);
* ObjectgetAttribute(String name);
* voidremoveAttribute(String name);
ServletConfig:(了解)
这个对象可以获得到Servlet的配置信息:
String servletName =this.getServletConfig().getServletName();
System.out.println(servletName);
// 获得初始化参数:
String username =this.getServletConfig().getInitParameter("username");
String password =this.getServletConfig().getInitParameter("password");
System.out.println(username+" "+password );
// 获得所有初始化参数的名称
Enumeration<String> names =this.getServletConfig().getInitParameterNames();
while(names.hasMoreElements()){
Stringname = names.nextElement();
Stringvalue = this.getServletConfig().getInitParameter(name);
System.out.println(name+" "+value);
}
ServletContext:
1.获得文件的MIME的类型. -- 文件上传和下载.
2.获得全局初始化参数:
3.作为域对象存取数据:
4.读取WEB项目的文件:(***)
使用类加载器获得web项目的文件.