[toc]
## HTTP简介
WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。
HTTP是 hypertext transfer protocol(超文本传输协议)的简写,它是 TCP/IP 协议集中的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。
## HTTP 的会话方式
四个步骤:
![](https://box.kancloud.cn/4a448c710d4e266debc91469fff706a4_396x128.png)
浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。
## GET和POST请求
1.GET方法
GET方法是从指定的资源请求数据。<b>请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的。</b>
有关 GET 请求的其他一些注释:
* GET 请求可被缓存
* GET 请求保留在浏览器历史记录中
* GET 请求可被收藏为书签
* GET 请求不应在处理敏感数据时使用
* GET 请求有长度限制
* GET 请求只应当用于取回数据
2.POST方法
post方法是向指定的资源提交要被处理的数据,<b>请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的。</b>
有关 POST 请求的其他一些注释:
* POST 请求不会被缓存
* POST 请求不会保留在浏览器历史记录中
* POST 不能被收藏为书签
* POST 请求对数据长度没有要求
## 如何在Servlet中获取信息
这里我们可以新建一个Servlet(eclipse中直接有Servlet选项)。
~~~
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("get");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("post");
}
}
~~~
在之前我们自己写的Servlet当中,处理请求的service()方法,在这里其实也是,之所以能没有出现service()方法,是因为HttpServlet这个类已经对原来不完整且代码冗余的Servlet接口进行了实现和封装。这里doGet和doPost分别对应接受get和post请求,方便、简单。
这里可以对之前的表单进行验证,看请求是否能够发到对应的方法中。其中,方法的参数**HttpServletRequest request**和**HttpServletResponse response**封装了**请求和响应**信息
#### 一.如何获取请求信息
**HttpServletRequest**常用的方法:
①**String getParameter(String name)**
\--根据请求参数的名字,返回参数值,特别常用
~~~
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String user = request.getParameter("user");
String password = request.getParameter("password");
System.out.println(user+" "+password);
}
~~~
②**String\[\] getParameterValues(String name)**
\--根据请求参数的名字,返回请求参数对应的字符串数组(例如:一组复选框-->名字是一样的)
~~~
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String intrests[] = request.getParameterValues("hobby");
for(String str:intrests) {
System.out.println(str);
}
}
~~~
③Map getParameterMap()
\--返回请求参数的键值对:key:参数名,value:参数值(String数组)
#### 二.如何获取响应信息
**HttpServletResponse**常用的方法:
①getWriter()方法
\--返回PrintWriter对象,调用这个对象的println()方法可以将信息直接打印在客户的浏览器上
~~~
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("hello...");
}
~~~
②setContentType()方法
\--设置响应的类型
~~~
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/msword");
PrintWriter out = response.getWriter();
out.println("hello...");
}
~~~
③getOutputStream()方法,文件下载时讲解使用。