1.什么是Servlet?
sun公司制订的一种用来扩展web服务器功能的组件规范。
(1)用来扩展web服务器功能
早期的web服务器(apache http server,iis等)只能够处理静态资源的请求(即需要事先写好并存放到硬盘上,比如html文件,图片等),不能够处理动态资源的请求(需要计算,然后生成相应的html),所以,需要扩展其功能。
早期使用CGI程序来扩展。
CGI(了解):
Common Gateway Interface(通用网关接口),可以使用
c/c++,perl等语言来开发CGI程序。因为可移植性差,性能
也不是很好,所以现在用得很少了。
(2) 组件规范
1)什么是组件?
符合规范,实现部分功能的,并且需要部署到容器里面才能
运行的软件模块。
Servlet就是一个组件,需要部署到Servlet容器里面才能运行。
2)什么是容器?
符合规范,为组件提供运行环境的程序。
比如Tomcat(雄猫)就是一个Servlet容器。
2.如何写一个Servlet?
step1. 写一个java类,实现Servlet接口或者继承
HttpServlet类。
step2.编译。
step3.打包。
创建一个具有如下结构的文件夹:
appname (应用名,可以自定义)
WEB-INF
classes (放 .class文件)
lib (可选的,放.jar文件)
web.xml (部署描述文件)
step4.部署
将step3创建好的文件夹拷贝到容器指定的某个位置。
注:可以使用jar命令将step3创建好的文件夹进行压缩
(压缩成.war为后缀的文件),然后再拷贝。
step5.启动容器,访问Servlet
http://ip:port/appname/url-pattern
注: url-pattern在web.xml中设置。
3.Servlet是如何运行的?
比如,在浏览器地址栏输入 http://ip:port/appname/hello
step1.浏览器依据ip,port建立与服务器之间的连接。
step2.浏览器会将请求数据打包(即按照http协议的要求制作
请求数据包),然后将该数据包发送给服务器。
step3.服务器拆包(即按照http协议将请求数据包中的数据解析出来),
并将解析到的数据添加到request对象上,同时,创建一个response
对象。
step4.服务器创建servlet实例,然后调用其service方法。
注:服务器会将request对象和response对象作为参数传进来,
可以通过request对象获取请求相关的数据(比如,获得请求参数值),然后将处理结果写到response对象上。
step5.服务器将response对象上的数据取出来,打包(即按照http协议要 求制作响应数据包),然后将数据发送给浏览器。
step6.浏览器拆包,生成相应页面。
4.常见的错误
(1)404
1)含义: 依据请求路径,找不到对应的资源(
比如,找不到对应的servlet)。
注:404是一个状态码(状态码是一个三位数字,由http协议规定其含义,
表示服务器处理请求的一种状态)。
2)错误原因:
a.应用部署失败。
b.请求路径写错。
(2)500
1)含义:系统出错。
2)错误原因:
a.描述文件写错,比如,类名不正确。
b.源代码有问题。
(3)405
1)含义:找不到处理方法。
2)错误原因:
service方法不符合规范。
5.http协议(了解)
(1)什么是http协议?
是一种网络应用层协议,规定了浏览器与web服务器之间如何通信
以及相应的数据包的格式。
(2)如何通信?
step1.建立连接。
step2.发送请求数据包。
step3.发送响应数据包。
step4.关闭连接。
一次请求,一次连接。如果浏览器要向服务器发送新的请求,就需要
重新建立新的连接。
优点:服务器可以利用有限的连接为尽可能多的请求服务。
(3)数据包的格式
1)请求数据包
a.请求行 (请求类型 请求资源路径 协议类型和版本)
b.若干消息头
(了解)
消息头是一些键值对(使用": "分隔),由http协议
规定其含义,浏览器和服务器之间可以利用消息头来传递一些
特定的消息。比如浏览器可以通过发送"user-agent"消息头
来告诉服务器,浏览器的类型和版本。
c.实体内容
只有当请求类型为post时,实体内容才会有数据。
2)响应数据包
a.状态行 (协议类型和版本 状态码 状态描述)
注: 200 正常
b.若干消息头
服务器也可以发送一些消息头给浏览器,比如发送
content-type消息头,告诉浏览器,服务器返回的
数据的类型(MIME类型)。
c.实体内容
程序处理的结果,浏览器会解析出来,然后生成相应的
页面。
(4)请求类型
1)get请求
a.哪些情况下,浏览器会发送get请求?
直接在浏览器地址栏输入某个地址。
点击链接。
表单默认的提交方式。
b.特点
会将请求参数添加到请求资源路径的后面,只能提交
少量数据给服务器。
注:请求行大约只能存放约2k左右的数据。
会将请求参数显示在浏览器地址栏,不安全。
注:比如路由器就会记录请求地址(包含了请求参数)
2)post请求
a.哪些情况下,浏览器会发送post请求?
将表单的method属性设置为"post"。
b.特点
会将请求参数放到实体内容里面,能够提交大量数据
给服务器。
不会将请求参数显示在浏览器地址栏,相对安全。
注:post请求和get请求都不会对请求参数加密。
我是初学者,如有更新不好的,欢迎这位大神指出,谢谢大家!
更多精彩以后更新,转载注明!