HTTP协议
- HTTP协议就是浏览器和服务器之间通信的规范,它规定了通信的方式以及数据格式
- 通信方式
*建立连接
*浏览器向服务器发送请求
*浏览器接收服务器的响应
*关闭连接
*该方式的特点:一次请求需建立一次连接,其目的是为了降低服务器压力 - 数据格式
1)请求数据包
*请求行:请求的基本信息
*消息头:数据的描述信息
*实体内容:数据
2)响应数据包
*状态行:响应的基本信息
*消息头:数据的描述信息
*实体内容:数据 - requset-服务器获取请求数据
1)请求行
*协议类型: req.getProtocol()
*请求方式: req.getMethod()
*Servlet路径: req.getServletPath()
2)消息头(按照键值对的形式来存数据 key-value)
*Enumeration e=getHeaderNames()返回所有key的迭代器
*Enumeration是比Iterator更古老的迭代器
*e.hasMoreElements()判断迭代器中是否有东西
*String key=e.nextElement().toString()
*String value=req.getHeader(key) - response-服务器输出响应数据
1)状态行:由服务器自动写
2)消息头:res.setContentType(“text/html”);//声明数据格式 ,其它的由服务器写
3)实体内容: 用流向浏览器写 PrintWriter pw=res.getWriter()
Servlet工作原理
- Servlet如何获取请求参数,通过request获取请求数据
*getParameter(name) 返回String 参数不存在返回null
*getParameterValues(name) 返回String[] 参数不存在返回null - 请求方式
1)浏览器向服务器传递数据的方式 ,有多种传递数据的方式,其传递数据的能力不同,请求方式也不同
2)GET:
*采用URL(路径,网名)传参,参数可见
*缺点:隐私性差,因为路径大小有限制(2k),因此数据大小受限制
*默认的所有请求都是GET请求(网址,超链接,提交表单)
3)POST
*采用实体内容传参,参数不可见
*隐私性好
*实体内容专门用来传参,大小不受限制
*设置POST请求方式可使用 method=”post”
4)使用场景:
*向服务器索取(查询)数据时通常用GET
*向服务器提交(保存)数据时通常用POST - 解决中文乱码
1)解决服务器出现乱码方式一:
eg:code=new String(code.getBytes(“iso8859-1”),”utf-8”);
将乱码接收,然后再将乱码字符串以iso8859-1还原为byte,再将此byte按照UTF-8编码方式重新编码
优点:万能 缺点:麻烦
2)解决服务器出现乱码方式二:
*只对GET有效:修改tomcat目录下的conf目录下的server.xml 在65行加URLEcoding=”UTF-8”,即对路径采用UTF-8解码
优点:简单 缺点:该tomcat内的项目都受影响
*只对POST有效:在接收请求参数前,设置实体内容的解码: req.setCharacterEncoding(“UTF-8”);
3)解决浏览器端出现乱码:
*res.setContentType(“text/html;charset=utf-8”);在浏览器解决,一般用这个
*res.setCharacterEncoding(“UTF-8”);在服务器解决
4)GET请求避免传中文,采用POST请求传中文