您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页Get与Post区别与范例讲解

Get与Post区别与范例讲解

来源:华佗小知识
Get与Post区别与范例讲解

一、 J2EE WEB应用文件目录结构

Java Web应用由一组静态HTML页、Servlet、JSP和其他相关的class组成,它们一起构成一个大的工程项目。每种组件在Web应用中都有固定的存放目录。Web应用的配置信息存放在web.xml文件中。在发布某些组件(如Servlet)时,必须在web.xml文件中添加相应的配置信息

Java Web应用程序必须使用规范的目录结构

1. 应用程序根目录,可以取任意的名字,所有的HTML、JSP文件都放在这个目录下 1.1 WEB-INF目录: 必须目录

1.1.1 web.xml: Web应用部署描述文件,必须文件 1.1.2 classes目录:

1) 用于存放单个*.classes字节码文件,Servlet类文件也存放在这个目录下 1.1.3 lib目录:

1) 存放第三方类库文件,即打包后的JAR文件 1.1.4 TLD文件: 标签库描述文件 1.2 其他静态文件: 1.2.1 HTML 1.2.2 CSS

1.2.3 JavaScript

1.2.4 图片等

1.3 *.jsp: 存放任意多个JSP页面

很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序。浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法。 二、GET 方法

GET 方法向页面请求发送已编码的用户信息。页面和已编码的信息中间用 ? 字符分隔,如下所示:

http://www.test.com/hello?key1=value1&key2=value2

GET 方法是默认的从浏览器向 Web 服务器传递信息的方法,它会产生一个很长的字符串,出现在浏览器的地址栏中。如果您要向服务器传递的是密码或其他的敏感信息,请不要使用 GET 方法。GET 方法有大小:请求字符串中最多只能有 1024 个字符。

这些信息使用 QUERY_STRING 头传递,并可以通过 QUERY_STRING 环境变量访问,Servlet 使用 doGet() 方法处理这种类型的请求。 三、POST 方法

另一个向后台程序传递信息的比较可靠的方法是 POST 方法。POST 方法打包信息的方式与 GET 方法基本相同,但是 POST 方法不是把信息作为 URL 中 ? 字符后的文本字符串进行发送,而是把这些信息作为一个单独的消息。消息以标准输出的形式传到后台程序,您可以解析和使用这些标准输出。Servlet 使用 doPost() 方法处理这种类型的请求。 四、使用 Servlet 读取表单数据

Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析:

getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。

getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。 getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。 五、二者区别

首先:Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。 其次:Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度,只能传递大约1024字节.

再次:Post就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为http请求的内容,而Get是在Http头部传输的。

六、再说Servlet中的GET和POST之间的区别

get和post这是http协议的两种方法,另外还有head, delete等 。这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。

在servlet开发中,以doGet()和doPost()分别处理get和post方法。 另外还有一个doService(), 它是一个调度方法,当一个请求发生时,首先执行doService(),不管是get还是post。在HttpServlet这个基类中实现了一个角度,首先判断是请求时get还是post,如果是get就调用doGet(), 如果是post就调用doPost()。你也可以直接过载doService()方法,这样你可以不管是get还是post。都会执行这个方法。

GET和POST的本质区别是什么?

使用GET,form中的数据将编码到url中,而使用POST的form中的数据则在http协议的header中传输。在使用上,当且仅当请求幂等(字面意思是请求任意次返回同样的结果,本质是请求本身不会改变服务器数据和状态)时使用GET,当请求会改变服务器数据或状态时(更新数据,上传文件),应该使用POST。 区别使用GET,POST意义何在? 重复访问使用GET方法请求的页面,浏览器会使用缓存处理后续请求。使用POST方法的form提交时,浏览器基于POST将产生永久改变的假设,将让用户进行提交确认。当编成人员正确的使用GET,POST后,浏览器会给出很好的缓存配合,时响应速度更快。 在form提交阶段的差别

form提交的第一步是创建数据集,并根据ENCTYPE对数据集进行编码。ENCTYPE有两个值:multipart/form-data,application/x-www-form-urlencoded(默认值),前者可同时用于GET,POST,后者只用于POST。然后进行数据传输--对于GET方法,数据集使用content type application/x-www-form-urlencoded编码并附在url后面,在这种模式下,数据严格为ASCII码;对于POST,使用content type编码字符集并将其构造成消息发送。 在服务器处理部分的差别

原则上,除理GET和POST请求是没有分别的。但由于数据通过不同的方法编码,需要有不同的解码机制。所以,方法变化将导致处理请求的代码变化。比如对于cgi,处理GET时通过环境变量获得参数,处理POST请求时则通过标准输入(stdin) 获得数据。

从使用经验,我们有如下总结:

1、get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。 2、对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。两种方式的参数都可以用Request来获得。 3、get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受。但理论上,IIS4中最大量为80KB,IIS5中为100KB。 4、get安全性非常低,post安全性较高。

5、

跟是一样的,也就是说,action页面后边带的参数列表会被忽视;而跟是不一样的。 七、使用范例

在eclipse新建一个web工程,取名随便,然后添加web.xml index.jsp、还有servlet..结构如下:

本文工程免费下载

GetServlet.java代码如下: doGet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setConwww.baiyuewang.nettentType(\"text/html;charset=UTF-8\"); PrintWriter out = response.getWriter(); String name1 = request.getParameter(\"name1\"); String price1 = request.getParameter(\"price1\"); out.println(\"\"); out.println(\" A Servlet\"); out.println(\" \"); out.print(\" This is \"); out.print(this.getClass()); out.println(\ out.println(\"

\"); out.println(\"名称:\"+name1); out.println(\"

\"); out.println(\"价格:\"+price1); out.println(\" \"); out.println(\"\"); out.flush(); out.close(); } doPost protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType(\"text/html;charset=UTF-8\"); PrintWriter out = response.getWriter();

String name2 = request.getParameter(\"name2\"); String price2 = request.getParameter(\"price2\"); out.println(\"\");

out.println(\" A Servlet\"); out.println(\" \"); out.print(\" This is \"); out.print(this.getClass());

out.println(\out.println(\"

\"); out.println(\"名称:\"+name2); out.println(\"

\");

out.println(\"价格:\"+price2); out.println(\" \"); out.println(\"\"); out.flush(); out.close(); } index.jsp:

<%@ page language=\"java\" contentType=\"text/html\" pageEncoding=\"UTF-8\"%>

Insert title here 名称: 价格:

--------------------------------这是分割线-------------------------------------

名称: 价格:
web.xml:

index.html index.htm index.jsp

GetServlet

com.mucfc.chapter0.GetServlet

GetServlet

/servlet/GetServlet 然后就是运行了:

用get提交

用post提交

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务