Java能对get和post的网络方式做php post相同参数的处理吗?

GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上;POST可以比GET请求更大的数据…一般的回答都是这样。但是作为一个高端大气上档次的程序员,这样回答就弱爆了。为了搞清楚GET和POST的区别,下面写了一个Java程序来接收HTTP请求。HTTP是基于TCP协议的,所以可以使用Java最底层的Socket实现。下面的程序仅仅不到10行代码,舍去了异常处理、资源关闭的代码,所以它跟真正的HTTP服务器的差距还略遥远,这里有点标题党了。当然,不要在意这些细节。public static void main(String[] args) throws IOException { // 服务器监听端口号8081 ServerSocket serverSocket = new ServerSocket(8081); // 等待接收请求,这是一个阻塞的方法,当请求到来的时候才会继续向下执行 Socket socket = serverSocket.accept(); // 获取请求内容 InputStream is = socket.getInputStream(); InputStreamReader reader = new InputStreamReader(is); // 输出请求内容 while (true) {
System.out.print((char)reader.read()); }}HTTP服务器写好了,下面是客户端。浏览器就是HTTP客户端,不用自己去实现了,只需要写HTML就行。&form method=&get& action=&http://localhost:8081&& name:&input type=&text& name=&name& /&&br& age:&input type=&text& name=&age& /&&br& &input type=&submit& /&&/form&GET请求:设置form的method=&get&,启动Java程序,用浏览器打开HTML输入。提交后看Java程序输出:GET /?name=XXG&age=23 HTTP/1.1Host: localhost:8081Connection: keep-aliveAccept: text/html,application/xhtml+xml,application/q=0.9,image/webp,*/*;q=0.8User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0. Safari/537.36Accept-Encoding: gzip,deflate,sdchAccept-Language: zh-CN,q=0.8POST请求:设置form的method=&post&,启动Java程序,用浏览器打开HTML输入提交。Java程序输出:POST / HTTP/1.1Host: localhost:8081Connection: keep-aliveContent-Length: 15Accept: text/html,application/xhtml+xml,application/q=0.9,image/webp,*/*;q=0.8Origin: nullUser-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0. Safari/537.36Content-Type: application/x-www-form-urlencodedAccept-Encoding: gzip,deflate,sdchAccept-Language: zh-CN,q=0.8name=XXG&age=23两个实验可以看出,GET和POST参数所在请求数据中的位置不同,这才是GET和POST最基本的区别。这里科普一下HTTP协议,HTTP请求一般包含三个部分:Request-LineHeader&空行&Message-Body[GET请求不包含Message-Body]其中Request-Line,就是请求的第一行,例如上面两个请求:GET /?name=XXG&age=23 HTTP/1.1POST / HTTP/1.1它由三部分组成,请求Method(GET/POST/其他)、Request-URI、HTTP-Version,三个部分中间空格隔开。Header就是传说中的请求头,键值对的形式,每一条占一行。使用不同浏览器这部分的内容也不同。Message-Body是请求主体,POST请求参数就在这一部分,它与Header之间必须要用空行隔开,这样服务器才能分清楚Header和Body。Message-Body的长度就是Header中的Content-Length。一般GET请求中是没有这一部分的。上面POST请求中的参数就是Message-Body:name=XXG&age=23所以,如果再有人问GET请求和POST请求的区别,可以回答:GET请求的参数在URL中,在请求的第一行Request-Line中,而POST请求的参数在请求主体Message-Body中。是不是碉堡了,大家感受一下。作者:叉叉哥 & 转载请注明出处:post和get请求方式的区别
post和get请求方式的区别
  通过post方法传递来的字符串是: &〈B〉〈%= Request.Form(&Text&) %〉〈/B〉&〈BR〉
〈% End If %〉
把上面的代码保存为getpost.asp,然后运行,首先测试post方法,这时候,浏览器的url并没有什么变化,返回的结果是:
通过post方法传递来的字符串是: &Hello World&
然后测试用get方法提交,请注意,浏览器的url变成了:
而返回的结果是:
通过get方法传递来的字符串是: &Hello World&
最后再通过post方法提交,浏览器的url还是:
而返回的结果变成:
通过get方法传递来的字符串是: &Hello World&
通过post方法传递来的字符串是: &Hello World&
通过get方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过get方法提交数据时,用户名和密码将出现在URL上。如果:
1、 登陆页面可以被浏览器缓存;
2、 其他人可以访问客户的这台机器。
那么,别人即可以从浏览器的历史记录中,读取到此客户的账号和密码。所以,在某些情况下,get方法会带来严重的安全性问题。
在Form中,建议使用post方法。
get与post的区别2
get:是以实体的方式得到由请求URI所指定资源的信息,如果请求URI只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。
post:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URI所指定资源的附加新子项,post被设计成用统一的方法实现下列功能:
1:对现有资源的解释
2:向电子公告栏、新闻组、邮件列表或类似讨论组发信息。
3:提交数据块
4:通过附加操作来扩展数据库
从上面描述可以看出,get是向服务器发索取数据的一种请求;而post是向服务器提交数据的一种请求,要提交的数据位于信息头后面的实体中。
很理论化,但是很标准,method=&get&并不是从服务器上获取数据,get和post 只是发送机制不同,并不是一个取一个发!
get方法会在IE地址栏里显示表示你提交时候所带的值;post方法不会
1、get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
2、对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。两种方式的参数都可以用Request来获得。
3、get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
4、get安全性非常低,post安全性较高。
5、 〈form method=&get& action=&a.asp?b=b&〉跟〈form method=&get&action=&a.asp&〉是一样的,也就是说,action页面后边带的参数列表会被忽视;而〈formmethod=&post& action=&a.asp?b=b&〉跟〈form method=&post&action=&a.asp&〉是不一样的。
另外,get请求有如下特性:它会将数据添加到URL中,通过这种方式传递到服务器,通常利用一个问号?代表URL地址的结尾与数据参数的开端,后面的参数每一个数据参数以&名称=值&的形式出现,参数与参数之间利用一个连接符&来区分。
post请求有如下特性:数据是放在HTTP主体中的,其组织方式不只一种,有&连接方式,也有分割符方式,可隐藏参数,传递大批数据,比较方便。
post 地址栏不会出现一大串?bjnghfgreygt这样的东西
如果是get,就会出现了
1、get 方法通过 URL 请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于 action 属性所指程序的 url后,如,数据都会直接显示在 url 上,就像用户点击一个链接一样;post 方法通过 HTTP post 机制,将表单内各字段名称与其内容放置在 HTML表头(header)内一起传送给服务器端交由 action属性能所指的程序处理,该程序会通过标准输入(stdin)方式,将表单的数据读出并加以处理
2、 get 方式需要使用 Request.QueryString 来取得变量的值;而 post 方式通过 Request.Form 来访问提交的内容
3、 get 方式传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比 post 方法好;而 post方式传递的数据量相对较大,它是等待服务器来读取数据,不过也有字节限制,这是为了避免对服务器用大量数据进行恶意攻击,根据微软方面的说法,微软对用 Request.Form() 可接收的最大数据有限制,IIS 4 中为 80 KB 字节,IIS 5 中为 100 KB 字节
建议:除非你肯定你提交的数据可以一次性提交,否则请尽量用 post 方法
4、 get 方式提交数据,会带来安全问题,比如一个登陆页面,通过 get 方式提交数据时,用户名和密码将出现在 URL上,如果页面可以被缓存或者其他人可以访问客户这台机器,就可以从历史记录获得该用户的帐号和密码,所以表单提交建议使用 post 方法;post方法提交的表单页面常见的问题是,该页面如果刷新的时候,会弹出一个对话框
1、get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
2、 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。两种方式的参数都可以用Request来获得。
3、get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
4、get安全性非常低,post安全性较高。
5、〈form method=&get& action=&a.asp?b=b&〉跟〈form method=&get&action=&a.asp&〉是一样的,也就是说,action页面后边带的参数列表会被忽视;而〈formmethod=&post& action=&a.asp?b=b&〉跟〈form method=&post&action=&a.asp&〉是不一样的。
&&&主编推荐
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
港口与航道工程建设工程法规及相关知识建设工程经济考试大纲矿业工程市政公用工程通信与广电工程
操作系统汇编语言计算机系统结构人工智能数据库系统微机与接口
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
Powerpoint教程WPS教程
电子政务客户关系管理首席信息官办公自动化大数据
职称考试题目
就业指导签约违约职业测评
招生信息考研政治
网络安全安全设置工具使用手机安全
3DMax教程Flash教程CorelDraw教程Director教程
Dreamwaver教程HTML教程网站策划网站运营Frontpage教程
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
互联网电信IT业界IT生活
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
组织运营财务资本
视频播放文件压缩杀毒软件输入法微博
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&JAVA教程:Tomcat在处理GET和POST请求时产生的乱码问题_武汉北大青鸟鲁广校区官方招生网
中国IT职业教育知名品牌
华中地区北大青鸟校区IT集训营
> JAVA教程:Tomcat在处理GET和POST请求时产生的乱码问题
JAVA教程:Tomcat在处理GET和POST请求时产生的乱码问题
导读:有个朋友写JSP程序时,在Servlet中取请求参数时出现了乱码,当然,这种乱码问题再简单不过了。那么究竟这个乱码是怎么产生的?怎么自查呢?怎么解决呢?北大青鸟鲁广校区专业老师为你详细解析!
  有个朋友写JSP程序时,在Servlet中取请求参数时出现了乱码,当然,这种乱码问题再简单不过了。由于在JSP中使用了GBK作用页面的编码,那么提交的中文信息自然也会被按着GBK进行编码,为%xx格式的GBK编码。
  要解决这个问题可以说是方法多多。最简单的就是使用request.setCharacterEncoding方法设置编码格式,如下面的代码所示:
  request.setCharacterEncoding(&GBK&);
  在设置完编码格式之后,就可以直接通过request.getParameter方法来获得请求参数中的中文信息了。当然,为了方便,还可以在过滤器中加入上面的语句,这样所有的Servlet都可以直接使用 request.getParameter方法来获得请求参数中的中文信息了。 除了这两种方法,还可以不使用request.setCharacterEncoding(&GBK&),而使用下面的语言来转换编码:
  String name = new String(request.getParameter(&name&).getBytes(&ISO-8859-1&), &GBK&);
  但为了更快解决这个问题,我就直接告诉这位朋友使用了setCharacterEncoding方法来设置编码。但是说来奇怪,还是出现乱码,没有任何解决问题的迹象。 最郁闷的事就是使用了自己认为100%能解决问题的方法,而这种方法却一点都没起作用。
  最后又让朋友试了最后一种方法,说来奇怪,竟然好使了。当然,这也没什么可奇怪的,本来就应该好使,但奇就奇在setCharacterEncoding方法并没有去掉,也就是说,同时使用了下面两条语句,竟然得到了正常的中文请求参数值:
  request.setCharacterEncoding(&GBK&);
  String name = new String(request.getParameter(&name&).getBytes(&ISO-8859-1&), &GBK&);
  System.out.println(name); // 正常输出中文请求参数
  按着常理来说,这是不可能的,既然使用了setCharacterEncoding方法设置成了GBK,再使用new String(request.getParameter(&name&).getBytes(&ISO-8859-1&), &GBK&)来转换,得到的应该是?????,不可能是正常的中文,只有将setCharacterEncoding方法去了,以ISO-8859-1格式保存的字符串才可以用ISO-8859-1格式还原,再用GBK重新保存成Java字符串(这一步实际上就是GBK转Unicode)。
  但经过仔细思考后,决定看下JSP代码是如何写的。不看不知道,一看吓一跳,原来
  在提交时使用的是GET,而未用POST,这当然没什么了不起的,用什么都可以,但对编码就有问题了。自从Tomcat5.x开始,GET和POST方法提交的信息,Tomcat采用了不同的方式来处理编码,对于POST请求,Tomcat会仍然使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使用默认的iso-8859-1编码。而GET请求则不同,Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码,而这位朋友使用的正好是GET请求,因此,tomcat将会使用iso-8859-1将提交的字节转换成字符串。
  解决的方法有两个:
  1. 将GET请求改成POST请求,然后就可以使用request.setCharacterEncoding方法设置编码,并使用request.getParameter方法直接获得中文请求参数了。
  2. 不用改GET请求,在Servlet中使用如下的代码来得到中文请求参数。
  String name = new String(request.getParameter(&name&).getBytes(&ISO-8859-1&), &GBK&);
  综上所述,如果使用了GET请求,则setCharacterEncoding方法不起作用,只能使用上面的代码来解决,而使用POST请求,尽管setCharacterEncoding方法起作用,但使用上面的代码仍然好使(在这时不能使用setCharacterEncoding方法将编码格式设置成非iso-8859-1格式)。因此,如果想让Servlet可以同时处理GET和POST请求中的中文信息,除了判断这两种方法外,还可以使用上面的代码来同时处理这两种请求的中文信息。
  笔者建议使用如下的代码来获得中文请求参数:
  String name = new String(request.getParameter(&name&).getBytes(&ISO-8859-1&), &GBK&);
  因为上面的代码是利用了Java的编码能力,对于所有的Web服务器都会有效,而setCharacterEncoding方法是通过Web服务器支持的,并不是所有的Web服务器都会对该方法有很好的支持。
  ,专业老师会帮你找到适合自己学习的课程和就业方向,详细了解JAVA教程中的小问题,现在就与专业老师在线老师沟通或拨打电话:027-,或QQ咨询:027-.
下一篇:没有了
告诉我们,你现在最想了解什么?
精彩专题——96%的同学看到这里都会点击下面的专题
北大青鸟(武汉宏鹏)鲁广北校区
地址:武汉市洪山区珞瑜路724号武汉数码港三楼
电话:027-
北大青鸟(武汉宏鹏)鲁广南校区
地址:武汉市洪山区民族大道湖北广播电视大学远程教育大楼二楼
电话:027-
北大青鸟(武汉宏鹏)鲁广学士后校区
地址:武汉市洪山区珞瑜路724号武汉数码港五楼
电话:027-
课工场武汉光谷线下服务中心
地址:武汉市洪山区珞瑜路718号春和天地3-302号
电话:027-两天热门文章
最新推荐文章

我要回帖

更多关于 php post相同参数 的文章

 

随机推荐