仓酷云

标题: 来看post是甚么意义 [打印本页]

作者: 飘灵儿    时间: 2015-1-18 11:34
标题: 来看post是甚么意义
ruby里有这些工具吗?又要简单多少?我没有用过这两门语言,我估计在这些语言力没有很统一的这种标准,或者根本就没有提供。
在很多使用程序中利用GET都没有成绩。可是,GET请求经由过程一个情况变量将本人的数据传送给CGI程序。但假设GET字串太长,有些Web服务器大概用光本人的情况空间(若字串长度凌驾200字符,就应入手下手体贴这方面的成绩)。CGI为此供应了一个办理计划:POST。经由过程POST,数据能够编码,并按与GET不异的办法保持起来。但POST使用尺度输出将编码事后的查询字串传送给CGI程序。我们要做的全体事变就是判别查询字串的长度,而这个长度已在情况变量CONTENT_LENGTH中保留好了。一旦晓得了长度,便可自在分派存储空间,并从尺度输出中读进指定命量的字符。
对一个用来把持POST的CGI程序,由CGITools.h供应的Pair和CGI_vector都可不加涓滴改动地利用。上面这段程序展现了写如许的一个CGI程序有何等复杂。这个例子将接纳“纯”C++,以是studio.h库被iostream(IO数据流)取代。关于iostream,我们可使用两个事后界说好的对象:cin,用于同尺度输出毗连;和cout,用于同尺度输入毗连。有几个举措可从cin中读进数据和向cout中写进。但上面这个程序筹办接纳尺度办法:用“<<”将信息发给cout,并用一个成员函数(此时是read())从cin中读进数据:
  1. //:POSTtest.cpp
  2. //CGI_vectorworksaseasilywithPOSTasit
  3. //doeswithGET.Writtenin"pure"C++.
  4. #include<iostream.h>
  5. #include"CGITools.h"
  6. voidmain(){
  7. cout<<"Content-type:text/plain
  8. "<<endl;
  9. //ForaCGI"POST,"theserverputsthelength
  10. //ofthecontentstringintheenvironment
  11. //variableCONTENT_LENGTH:
  12. char*clen=getenv("CONTENT_LENGTH");
  13. if(clen==0){
  14. cout<<"ZeroCONTENT_LENGTH"<<endl;
  15. return;
  16. }
  17. intlen=atoi(clen);
  18. char*query_str=newchar[len+1];
  19. cin.read(query_str,len);
  20. query_str[len]=\0;
  21. CGI_vectorquery(query_str);
  22. //Test:dumpallnamesandvalues
  23. for(inti=0;i<query.size();i++)
  24. cout<<"query["<<i<<"].name()=["<<
  25. query[i].name()<<"],"<<
  26. "query["<<i<<"].value()=["<<
  27. query[i].value()<<"]"<<endl;
  28. deletequery_str;//Releasestorage
  29. }///:~
复制代码
getenv()函数前往指向一个字串的指针,谁人字串唆使着内容的长度。若指针为零,标明CONTENT_LENGTH情况变量还没有设置,以是一定某个中央出了成绩。不然就必需用ANSIC库函数atoi()将字串转换成一个整数。这个长度将与new一同使用,分派充足的存储空间,以便包容查询字串(另加它的空中断符)。随后为cin()挪用read()。read()函数必要获得指向方针缓冲区的一个指针和要读进的字节数。随后用空字符(null)中断query_str,指出已到达字串的开端,这就叫作“空中断”。
到这个时分,我们失掉的查询字串与GET查询字串已没有甚么区分,以是把它传送给用于CGI_vector的构建器。随后便和前例一样,我们能够自在vector内分歧的字段。
为测试这个程序,必需把它编译到主机Web服务器的cgi-bin目次下。然后就能够写一个复杂的HTML页举行测试,就象上面如许:
  1. <HTML>
  2. <HEAD>
  3. <METACONTENT="text/html">
  4. <TITLE>AtestofstandardHTMLPOST</TITLE>
  5. </HEAD>
  6. Test,usesstandardhtmlPOST
  7. <Formmethod="POST"ACTION="/cgi-bin/POSTtest">
  8. <P>Field1:<INPUTTYPE="text"NAME="Field1"
  9. VALUE=""size="40"></p>
  10. <P>Field2:<INPUTTYPE="text"NAME="Field2"
  11. VALUE=""size="40"></p>
  12. <P>Field3:<INPUTTYPE="text"NAME="Field3"
  13. VALUE=""size="40"></p>
  14. <P>Field4:<INPUTTYPE="text"NAME="Field4"
  15. VALUE=""size="40"></p>
  16. <P>Field5:<INPUTTYPE="text"NAME="Field5"
  17. VALUE=""size="40"></p>
  18. <P>Field6:<INPUTTYPE="text"NAME="Field6"
  19. VALUE=""size="40"></p>
  20. <p><inputtype="submit"name="submit"></p>
  21. </Form>
  22. </HTML>
复制代码
填好这个表单并提交进来今后,会失掉一个复杂的文本页,个中包括懂得析出来的了局。从中可晓得CGI程序是不是在一般事情。
固然,用一个程序片来提交数据显得更风趣一些。但是,POST数据的提交属于一个分歧的历程。在用惯例体例挪用了CGI程序今后,必需另行创建与服务器的一个毗连,以便将查询字串反应给它。服务器随后会举行一番处置,再经由过程尺度输出将查询字串反应回CGI程序。
为创建与服务器的一个间接毗连,必需获得本人创立的URL,然后挪用openConnection()创立一个URLConnection。可是,因为URLConnection一样平常不同意我们把数据发给它,以是必需很好笑地挪用setDoOutput(true)函数,同时挪用的还包含setDoInput(true)和setAllowUserInteraction(false)——正文⑥。最初,可挪用getOutputStream()来创立一个OutputStream(输入数据流),并把它封装到一个DataOutputStream里,以便能按传统体例同它通讯。上面列出的即是一个用于完成上述事情的程序片,必需在从它的各个字段里搜集了数据以后再实行它:
  1. //:POSTtest.java
  2. //AnappletthatsendsitsdataviaaCGIPOST
  3. importjava.awt.*;
  4. importjava.applet.*;
  5. importjava.net.*;
  6. importjava.io.*;
  7. publicclassPOSTtestextendsApplet{
  8. finalstaticintSIZE=10;
  9. Buttonsubmit=newButton("Submit");
  10. TextField[]t=newTextField[SIZE];
  11. Stringquery="";
  12. Labell=newLabel();
  13. TextAreata=newTextArea(15,60);
  14. publicvoidinit(){
  15. Panelp=newPanel();
  16. p.setLayout(newGridLayout(t.length+2,2));
  17. for(inti=0;i<t.length;i++){
  18. p.add(newLabel(
  19. "Field"+i+"",Label.RIGHT));
  20. p.add(t[i]=newTextField(30));
  21. }
  22. p.add(l);
  23. p.add(submit);
  24. add("North",p);
  25. add("South",ta);
  26. }
  27. publicbooleanaction(Eventevt,Objectarg){
  28. if(evt.target.equals(submit)){
  29. query="";
  30. ta.setText("");
  31. //Encodethequeryfromthefielddata:
  32. for(inti=0;i<t.length;i++)
  33. query+="Field"+i+"="+
  34. URLEncoder.encode(
  35. t[i].getText().trim())+
  36. "&";
  37. query+="submit=Submit";
  38. //SendthenameusingCGIsPOSTprocess:
  39. try{
  40. URLu=newURL(
  41. getDocumentBase(),"cgi-bin/POSTtest");
  42. URLConnectionurlc=u.openConnection();
  43. urlc.setDoOutput(true);
  44. urlc.setDoInput(true);
  45. urlc.setAllowUserInteraction(false);
  46. DataOutputStreamserver=
  47. newDataOutputStream(
  48. urlc.getOutputStream());
  49. //Sendthedata
  50. server.writeBytes(query);
  51. server.close();
  52. //Readanddisplaytheresponse.You
  53. //cannotuse
  54. //getAppletContext().showDocument(u);
  55. //todisplaytheresultsasaWebpage!
  56. DataInputStreamin=
  57. newDataInputStream(
  58. urlc.getInputStream());
  59. Strings;
  60. while((s=in.readLine())!=null){
  61. ta.appendText(s+"
  62. ");
  63. }
  64. in.close();
  65. }
  66. catch(Exceptione){
  67. l.setText(e.toString());
  68. }
  69. }
  70. elsereturnsuper.action(evt,arg);
  71. returntrue;
  72. }
  73. }///:~
复制代码
⑥:我不能不说本人并没有真正了解这儿都产生了甚么事变,这些观点都是从ElliotteRustyHarold编著的《JavaNetworkProgramming》里得来的,该书由OReilly于1997年出书。他在书中提到了Java连网函数库中呈现的很多使人利诱的Bug。以是一旦涉足这些范畴,事变就不是编写代码,然后让它本人运转那末复杂。必定要小心潜伏的圈套!

信息发送到服务器后,我们挪用getInputStream(),并把前往值封装到一个DataInputStream里,以便本人能读取了局。要注重的一件事变是了局以文本行的情势显现在一个TextArea(文本地区)中。为何不复杂地利用getAppletContext().showDocument(u)呢?现实上,这恰是那些圈套中的一个。上述代码能够很好地事情,但假设试图换用showDocument(),几近统统城市中断运转。也就是说,showDocument()的确能够运转,但从POSTtest失掉的前往了局是“ZeroCONTENT_LENGTH”(内容长度为零)。以是不晓得为何缘故原由,showDocument()制止了POST查询向CGI程序的传送。我很难判别这究竟是一个在今后版本里会修复的Bug,仍是因为我的了解不敷(我看过的书对此讲得都很含混)。但不管在哪一种情形下,只需能保持在文本地区里寓目自CGI程序前往的内容,上述程序片运转时就没有成绩。
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。
作者: 愤怒的大鸟    时间: 2015-1-21 10:30
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者: 因胸联盟    时间: 2015-1-30 15:11
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 透明    时间: 2015-2-1 17:14
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
作者: 飘灵儿    时间: 2015-2-6 08:44
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者: 冷月葬花魂    时间: 2015-2-8 00:31
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者: 简单生活    时间: 2015-2-10 16:02
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 若天明    时间: 2015-2-27 22:16
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 老尸    时间: 2015-3-6 09:58
是一种突破用户端机器环境和CPU
作者: 若相依    时间: 2015-3-12 23:38
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者: 活着的死人    时间: 2015-3-20 05:13
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者: 飘飘悠悠    时间: 2015-4-6 07:14
是一种使网页(Web Page)产生生动活泼画面的语言
作者: 只想知道    时间: 2015-4-13 07:13
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者: 金色的骷髅    时间: 2015-4-16 15:11
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者: 不帅    时间: 2015-4-20 18:52
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者: 海妖    时间: 2015-4-30 06:51
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 变相怪杰    时间: 2015-5-4 06:17
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者: 爱飞    时间: 2015-5-11 21:53
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者: 乐观    时间: 2015-6-17 12:03
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
作者: 深爱那片海    时间: 2015-6-21 22:12
Java是一种计算机编程语言,拥有跨平台、面向对java




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2