http协议相关和servlet处理中文乱码的处理

  1. 什么是http协议?
  2. http协议和tcp/ip协议的区别?
  3. http协议的特点和好处?
  4. http协议网络传输时,两种数据包的结构
  5. http协议网络传输时两种请求方式的原因和特点
  6. Servlet输出中文时,会出现什么问题,如何处理
  7. Servlet如何获取请求单个参数值和多个参数值?
  8. 表单提交包含有中文参数时,会出现什么问题,对于post请求和get请求如何处理?

 

 

  1. http是一种网络应用层协议,规定了浏览器和web服务器之间通信方式以及相应数据包的结构.
  2. TCP/IP协议:负责保证数据包可靠地传递

          Http协议:将数据包打包之后,交给tcp/ip协议来传输这些数据包

  •     http协议的特点是一次请求,一次连接,好处是服务器可以利用有限的连接尽可能地处理更多的请求
  •     http协议网络传输时的两种数据包结构:

             1)请求数据包

               请求行(请求方式 请求路径资源 协议和版本)

               消息头(消息头是一些键值对,使用”: ”分开,用来传递一些特定的信息,比如通过user-agent告诉服务器浏览器的版本和类型)

               实体内容(当请求方式为get,实体内容为空;当请求方式为post,实体内容为请求的参数)

             2)响应数据包

               状态行(协议和版本 状态码 状态描述)(状态码是一个三位数字,表示服务器处理请求的一种状态,200代表正常,500代表系统出错,404代表依据请求路径找不到对应的资源)

                消息头(服务器通过消息头给浏览器发送一些信息,比如发送content-type就是告诉浏览器服务器返回的数据类型)

                实体内容(程序返回的处理结果,浏览器解析出来之后,生成相应的页面)

 

  1. http协议的请求方式主要的有两种,一种是get,一种是post.当在地址栏输入某个地址,点击网址链接和表单的默认提交方式,都是发送get请求,get请求会将参数显示在浏览器地址栏,由于一些网络设备比如路由器会将记录其请求地址,所以这种请求方式不安全,并且请求参数会存放到请求行的请求路径资源里,只能提交少量的数据;而post请求只有在一种情况下才能发送post请求,也就是将表单的请求方式method改为post,post的请求方式不会将参数显示在浏览器地址栏,相对来说安全,而且会将请求参数添加到实体内容里面,不再是资源路径那里,可以提交无限制的数据.
  2. 通过servlet的输出流输出中文时,会出现乱码,原因是输出流在调用println方法把内容显示到浏览器时,浏览器默认使用的是iso8859-1来编码.该字符集不支持中文,所以会出现乱码.这种情况的处理方式是将通过设置响应消息头的content-type的值,告知浏览器服务器将要返回的数据类型.即response.setContentType(“text/html; charset=utf-8”),这样输出流的println方法也会按照响应的数据类型进行编码.
  3. 服务器获取请求参数分为两种情况,第一种情况当参数是一个值的时候,这时直接调用String request.getParameter(String paramName)来获取,如果参数名写错了,会得到null值,如果没有填写任何数据提交,那么会获得一个空字符串;第二种情况当参数是得到多个不同的值时,比如多选框的提交,这时调用String[] request.getParameterValues(String paramName)方法,返回一个字符数组,加入用户一个都不选提交表单,那么服务器服务器获得一个null值,与第一种情况是不一样的.
  4. 表单包含有中文参数,由于浏览器会按照该表单所在页面的字符集来编码该参数(比如按照utf-8),而服务器会默认是用iso8859-1进行解码和编码,这样就产生了乱码.当使用get请求方式时,tomcat8.0版本以上的默认是使用utf-8来解码,这里只需要按照第六题那里一样设置下输出流的消息头编码数据类型即可.如果请求方式是post时,在request.getParameter方法前,使用指定的字符集对请求参数进行解码,调用request.setCharacterEncoding(“utf-8”);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值