Servlet_02(http基础与servlet乱码处理)

1. http协议

(1)什么是http协议?

是一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及相应的
数据包的结构。

注:
	tcp/ip 属于网络层和传输层协议,负责将数据可靠地从一台机器
	传递到另外一台机器。
	http 属于应用层协议,将数据打包之后,会将数据包交给tcp/ip
	来传递这些数据包。

1)浏览器与web服务器之间如何通信?

step1.建立连接。
step2.发送请求。
step3.发送响应。
step4.关闭连接。

如果浏览器要发送新的请求,需要重新建立新的连接,即
“一次请求,一次连接”。这样做的好处是服务器可以利用有
限的连接为尽可能多的请求服务。

在这里插入图片描述

2)数据包的结构

请求数据包:
	请求行 (请求方式 请求资源路径 协议和版本)
	若干消息头 
		注:
			消息头是一些键值对,使用": "分隔。通信的双方可以
		利用消息头来传递一些特定的消息。比如浏览器可以通过发送
		user-agent消息头来告诉服务器,浏览器的类型和版本。
	实体内容(消息正文)
		注:
			只有请求方式为post时,实体内容才会有数据。
			如果请求方式为get,实体内容为空。
	
响应数据包
	状态行(协议和版本 状态码 状态描述)
		注:
			状态码是一个三位数字,表示服务器处理请求的一种状态,
			常见的状态码:
				200  正常
				500  系统出错
				404  找不到对应的资源
	若干消息头
		注:
			服务器也可以发送一些消息头给浏览器,比如,
			发送content-type消息头,告诉浏览器,服务器
			返回的数据类型和编码。
	实体内容
		注:
			程序处理的结果,浏览器会解析出来,生成相应的页面。

(2)两种请求方式

1)get请求

a.哪些情况下,浏览器会发送get请求?
  a1.在浏览器地址输入某个地址。
  a2.表单默认的提交方式。
  a3.点击链接。

b.特点?
  a1.会将请求参数显示在浏览器地址栏,不安全。
	注:
		有一些网络设备,比如路由器,会记录请求地址。
  a2.会将请求参数添加到请求资源路径的后面,只能提交少量的
	数据给服务器。
	注:
		请求行大约只能存放2k左右的数据。

2)post请求

a.哪些情况下,浏览器会发送post请求?
 a1.将表单的method属性设置为post。
b.特点?
 b1.不会将请求参数显示在地址栏,相对安全一些。
 注:
	http协议并不会对数据包中数据进行加密,所以,对于
	敏感数据,一定要加密。
 b2.会将请求参数添加到实体内容里面,可以提交大量的数据
给服务器。

2.servlet输出中文,如何处理乱码问题?

(1)为什么会产生乱码?

out.println方法默认会使用iso-8859-1来编码。

(2)如何处理?

/*
 * 1.设置content-type消息头的值。
 * 2.out.println方法会使用指定的字符集来编码。
 */
response.setContentType("text/html;charset=utf-8");

3.读取请求参数值

(1)String request.getParameter(String paramName);

注:
	如果请求参数名与实际传递过来的请求参数名不一致,会获得
	null值。

(2)String[] request.getParameterValues(String paramName);

注:
	有多个请求参数名相同时,使用此方法。
	对于多选框,如果没有选择任何选项,会获得null值。

4.表单包含有中文参数值,如何处理乱码问题?

(1)为什么会有乱码?

表单提交时,浏览器会对中文参数值进行编码(比如,使用utf-8来编码),
服务器端默认会使用iso-8859-1来解码,所以,会产生乱码。

注:
	浏览器会使用打开该表单所在的页面时的字符集来进行编码。

(2)如何解决?

1)post请求

	/*
	 * 设置请求参数值的解码方式。
	 * 注:
	 * 	a.该方法一定要添加到所有的getParameter
	 * 方法的前面。
	 *  b.该方法只针对post请求有效。
	 */
	request.setCharacterEncoding("utf-8");

2)get请求

修改server.xml,<Connector URIEncoding="utf-8"/>
注:
	如果是tomcat8.0及以上版本,可以不用加。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值