Servlet相关知识2
1、Http协议
(1)是什么?
hypertext transfer protocol 超文本控制传输协议。
(W3C)定义了浏览器与web服务器之间数据传输的方式与数据格式。
(2)数据传输的方式
a、浏览器请求建立连接。
b、浏览器向服务器发送请求。
c、服务器处理请求。
d、服务器发送响应,然后立即关闭连接。
如果浏览器想向服务器再发送一个请求,需要重新请求建立连接。
(3)数据格式
a、请求数据包
1)请求行
请求方式(get/post) 请求资源的路径 http协议版本
2)若干消息头
浏览器与服务器之间通讯的一些约定
比如:浏览器会告诉服务器用的是什么浏览器,是否缓存等。
3)实体内容
如果是post方式,请求数据会存放到实体内容里面
如果是get方式,会放到请求行中的请求资源路径后面
b、响应数据包
1)状态行
协议版本号 状态码 状态码描述
状态码:
200 OK(正常)
404 Not Found(找不到资源)
500 Internal Server Error(服务器内部错误)
2)若干消息头
比如服务器可以向浏览器发送cookie
3)实体内容
服务器处理完之后的结果,一般要求浏览器显示的数据
2、get/post请求方式
(1)get方式:
a、表单默认提交的方式
b、直接在浏览器地址栏输入地址
c、通过链接访问某个地址
(2)get方式的特点:
在地址栏会显示请求数据。
请求数据会放到请求资源路径的后面
get方式一般用于向服务器获取资源
浏览器有可能缓存get方式访问过的资源
(3)post方式:
设置表单method="post"
(4)post方式的特点:
a、数据不会在地址栏显示
b、数据会存放在实体内容里
c、post方式一般用于向服务器提交数据
(5)有缺点比较
get方式提交数据有两个缺点:
a、提交的数据量有限制(因为只能存放到请求行之后)
b、不安全(在浏览器地址栏能看到数据)
post方式提交数据有优点:
a、数据量大(因为存放在实体内容里面)
b、相对安全(但是实体内容里面的数据仍然没有加密,可以借助工具查看)
3、重定向
(1)什么是重定向:
服务器向浏览器发送一个状态码302及一个消息头location,浏览器会立即向location所指定的地址发送一个新的请求。
(2)编程:
response.sendRedirect(重定向的地址);
(3)重定向的特点及注意事项:
a、重定向的地址是任意的;
b、浏览器地址栏的地址会变成重定向的地址;
c、一件事情已经做完。
d、在重定向之前,不能够有任何的输出。如果缓存当中有数据,重定向之前会先清空缓存中的数据。
4、服务器如何处理url地址
比如在浏览器地址栏输入http://ip:port/appname/abc.html
浏览器会依据ip、port连接服务器,然后,会将/appname/abc.html存放到请求数据包的请求行。
服务器如何处理"/appname/abc.html"?
step1 服务器会查看有没有appname对应的应用存在,若没有,则返回404;
若有,则进行下一步。
step2 在web.xml中,使用"/abc.html"与url-pattern进行匹配:
a、精确匹配:要求精确匹配。
b、模糊匹配(使用通配符*)
* 代表任意的字符串。
比如:/some /some/* /some/dsfk/fdksjk 以上三种均对应同一个Servlet地址
c、后缀匹配
不能以"/"开头 比如: *.do 表示以.do结尾的请求
step3 如果仍然不匹配,会查询静态资源。
如果能找到该资源,则返回,找不到,返回404
5、servlet的生命周期与核心的类与接口
(1)核心的类与接口
Servlet接口
a、所有的Servlet,必须实现该接口;
b、该接口定义了三个方法:
init(ServletConfig config) 初始化方法
service(ServletRequest request, ServletResponse response) 处理请求
destroy() 销毁资源
Genericervlet抽象类,部分实现了Servlet接口,实现了init、destroy方法。
HttpServlet抽象类,继承Genericervlet,实现了service()方法。
service(HttpServletRequest request, HttpServletResponse response);
HttpServletRequest是ServletRequest子接口
HttpServletResponse是ServletResponse子接口
(2)生命周期
什么是生命周期:Servlet容器如何去创建Servlet实例,分配资源,调用其方法,最后销毁的整个过程。
分四个阶段:
a、实例化:调用缺省的构造器,创建对象。
创建对象的时机:
1)当请求到达Servlet容器时,如果要访问的servlet没有对应的实例,则会创建;
2)当服务器启动时会,会检查web.xml中的配置,如果<load-on-startup>1</load-on-startup>
"1"表示优先级,值越小、优先级越高。
b、初始化:分配资源
Servlet容器创建servlet实例后一定会执行init()方法。
默认的init()由GenericServlet来实现。如果想定义自己的初始化过程,可以override init()方法。
方式一:override init(ServletConfig config)
public void init(ServletConfig config) {
this.config = config;
this.init();
}
方式二:override init()
//空方法!“钩子方法”,由子类实现
public void init() {
}
最好使用方式二。初始化只有一次。
c、就绪,执行service()方法
HttpServlet的service()方法,会依据get/post请求,分别调用对应的doGet()和doPost()方法。
我们开发的servlet,可以override service();或者override doGet()/doPost();
d、销毁:容器依据自己的算法,会删除servlet实例,在删除之前,会调用destory()方法,释放资源。
该方法只会执行一次。
第6天:Servlet相关知识(二)
最新推荐文章于 2013-01-08 16:28:30 发布