http get post 请求(转)
Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:
1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。
2、 Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用 “&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。
3、 Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。 Post的所有操作对用户来说都是不可见的。
4、Get传输的数据量小,这主要是因为受URL长度限制(2048byte);而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。
5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
6、Get是Form的默认方法。
接受post请求的一端,为了便于大家理解,就作为服务器吧,上面的代码则作为客户端好了。服务器这边我们需要写一个servlet,这个servlet是服务器启动,就立即启动的,这个是在web.xml文件里配置,我想大家是会的。服务器端的代码如下所示:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class GetRequestServlet
*/
public class GetRequestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
//private static final Logger log = Logger.getLogger(GetRequestServlet.class);
/**
* @see HttpServlet#HttpServlet()
*/
public GetRequestServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String file = request.getParameter("file");
String sendTimeStr = request.getParameter("sendTime");
long sendTime = Long.valueOf(sendTimeStr);
response.setContentType("text/html;charset=utf-8");
System.out.println(file);
System.out.println("当前从发送到接受所用时间为:" + (System.currentTimeMillis() - sendTime));
//PrintWriter out = response.getWriter();
//out.println("hello world!" + file);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
大家运行会发现,如果读取的文件不大,是可以将读取的文件流输送到服务器的,但是一旦文件变大,就会出错。这一方面可能是post后缀的内容大小是被限定的吧,我是这么想的,如果有错误请纠正。