Servlet总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、SERVLET基础
1 .组件是什么?
是符合一定规范,实现了部分功能的软件模块,组件需要部署到相应的容器里面才能运行。
2 容器是什么?
是符合一定规范,提供组件运行环境的程序。
3、什么是servlet?
sun公司制订的一种用来扩展web服务器功能的组件规范。偏重于业务逻辑的实现4、什么是servelet容器?
是符合一定规范,为servlet组件提供运行环境的程序。
5、如何写一个servlet?
step1,写一个java类,要实现Servlet接口或者继承HttpServlet抽象类。
step2,编译。(javac -cp servlet-api.jar -d . 类名.java)
step3,打包。
创建一个符合如下结构的文件夹:
appname (应用名)
WEB-INF
classes(放字节码文件)
lib(可选,放.jar文件)
web.xml(部署描述文件)
注:一般在开发完成之后,交付给用户去使用时,
会使用jar命令将以上文件夹压缩成一个以".war"
为后缀的文件。
step4,部署
将step3创建好的文件夹或者压缩文件(.war文件)
拷贝到servlet容器指定的文件夹下面(比如,
拷贝到tomcat的webapps文件夹)。
step5,访问
http://ip:port/appname/servlet-url
servlet-url在web.xml文件当中有相应的配置。
5、servlet如何运行的?
比如,在浏览器地址栏输入
http://ip:port/web01/hello?name=sally
参考day01的servlet2.jpg图片
步骤如下:
1)在浏览器中输入地址确认,浏览器根据IP地址与port号与服务器建立连接
2)浏览器将请求资源路径与请求参数根据http协议打包,生成一个请求数据包
3)浏览器向服务器发送请求(请求数据包)
4)Servlet服务器收到请求后,根据http协议进行解析(拆包)
5)Servlet服务器创建request和response对象,将解析后的请求数据保存在request对象内
6)Servlet服务器根据请求资源路径和web.xml文件找到对应的servlet类,对其实例化7)Servlet服务器创建ServletConfig对象
8)Servlet服务器调用servlet对象的init()方法,将ServletConfig对象作为参数传入,对servlet对象进行初始化
9)Servlet服务器调用servlet对象的service()方法,并将request对象和response对象作为参数传入进来
10)Servlet对象从request对象中获得请求参数,进行处理
11)将处理后的结果保存到response对象中。
12)Servlet服务器从response对象获得处理后的结果
13)Servlet服务器将获得的结果根据http协议进行打包,生成一个响应数据包
14)Servlet服务器向浏览器发送响应(响应数据包)
15)浏览器收到响应,并对响应数据包解析
16)浏览器根据解析后的数据生成新的页面
17)(服务器关闭或服务器超时)调用destroy()方法销毁实例
6、servelet常见的状态码
404、405、500、200、302
7、http(hypertext transfer protocol)协议是什么?
由w3c制订的一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及相应的数据格式。
“一次请求,一次连接"。
优点:高效(即服务器可以利用有限的连接为尽可能多的客户端服务)。
缺点:状态管理的问题。
1)如何通信
step1,浏览器建立与服务器之间的连接。
step2,浏览器将请求数据打包并发送。
step3,服务器将响应数据打包并发送。
step4,服务器立即关闭连接。
如果浏览器要发送新的请求,需要重新建立新的连接。
2)数据格式
a,请求数据包
请求行: 请求方式请求资源路径协议类型和版本
消息头: 是一些键值对,表示特定的含义,浏览器与服务器之间都可以发
送。比如,浏览器可以发送一个"User-Agent"消息头,告诉服务
器,浏览器的类型和版本。
实体内容:只有当请求方式为post的时候,实体内容才有数据(请求参数),
如果请求方式是get,请求参数会添加到请求资源路径的后面。
b,响应数据包
状态行: 协议及版本状态码状态描述
消息头:服务器也可以发送一些消息头给浏览器,比如"content-type",告
诉浏览器,服务器返回的数据类型和字符集。
实体内容:程序处理的结果。
8、get请求与post请求
1)哪一些情况下,浏览器会发送get请求?
a,直接在浏览器地址栏输入某个地址
b,点击链接
c,表单默认的提交方式
2)get请求的特点
a,会将请求参数添加到请求资源路径的后面,因为请求行最多只能存放2k左右的
数据,所以,get请求只能发送少量的请求参数。
b,会将请求参数显示在浏览器地址栏,不安全。比如,路由器会记录访问地址。
3)哪一些情况,浏览器会发送post请求
设置了表单的method="post"。
4)post请求的特点
a,将请求参数放到实体内容里面,所以,可以提交大量的数据给服务器。
b,不会将请求参数显示在浏览器地址栏,相对安全(不会加密,对于敏感数据,需
要加密)。如果要加密,可以使用https协议
9、servlet如何输出中文?
(1)常识
a,java语言使用unicode字符集来保存字符。
b,编码:将unicode字符集对应的字节数组转换成
某种本地字符集(gbk,utf-8等等)对应的字节数组。
c,解码:某种本地字符集(gbk,utf-8等等)对应的
字节数组转换成unicode字符集对应的字节数组。
(2)乱码问题产生的原因:
out.println输出时,容器默认会使用"iso-8859-1"去编码。
(3)解决方式:
response.setContentType("text/html;charset=字符集");
字符集必须支持中文,比如"gbk","utf-8"
二、SERVLET核心
10、表单处理:
(1)如何获得请求参数值。
a,String request.getParamter(String paramName);
注意:如果参数名写错(paramName与实际的参数名不一致),返回null。
b,String[] request.getParameterValues(String paramName);
注意:当有多个参数名相同,用此方法。
(2)如何读取中文参数值
1)乱码问题产生的原因
表单提交时,浏览器会对表单中的中文参数值进行编码(会使用打开表单所在的
页面时的字符集来编码)。服务器端默认情况下,会使用"iso-8859-1"去解码。
2)解决方式
step1,保证浏览器按照指定的字符集来编码:
step2,服务器端,按照指定的字符集去解码:
方式一: request.setCharacterEncoding("utf-8");
注意:该方法只对post请求有效。
方式二: new String(name.getBytes("iso-8859-1"),"utf-8");
11、servlet输出中文,要注意什么?
response.setContentType("text/html;charset=utf-8");