自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Servlet和CGI間的通訊

開發(fā) 后端
本文介紹Servlet和CGI間的通訊,包括介紹HTTP編程的原理,Servlet編程原理和通過MIDlet激活CGI腳本。

用無線設(shè)備比如手機上網(wǎng)的時候經(jīng)常需要通過表單提交一些數(shù)據(jù),比如登錄操作,通常的情況下服務(wù)器端我們采用Servlet和CGI來執(zhí)行這些操作。

CLDC作為受限設(shè)備的基本配置通常會提供通用的連接框架給開發(fā)者連進行網(wǎng)絡(luò)開發(fā)。另外MIDP還提供HttpConnection的接口,這個接口是javax.microedition.io的一部分,這里面定義了最基本的HTTP連接需要的方法和常量。

HTTP編程的原理
HTTP協(xié)議是一個請求-相應的應用協(xié)議,協(xié)議規(guī)定請求發(fā)出前各個參數(shù)必須事先設(shè)置。比如當用戶點擊表單的提交按鈕后表單內(nèi)填入的內(nèi)容會作為請求的一部分發(fā)送給服務(wù)器端。

請求的方法類型
目前有兩種方法可以用來向服務(wù)器端提交請求:GET和POST。這兩種方法決定數(shù)據(jù)如何遞交給服務(wù)器。

采用GET方式要遞交的值作為URL的一部分發(fā)送給服務(wù)器端,其遞交的值將成為環(huán)境變量QUERY_STRING。
采用POST方式遞交的值作為一個輸入流發(fā)送給服務(wù)器端,其流的長度會放在CONTENT_LENGTH里。

相對兩種方法POST方法更安全一些,通過POST方法也可以傳輸多種數(shù)據(jù)。
利用GET方式遞交信息的例子
如下是一個用GET方式遞交表單的HTML例子:

action="http://www.somesite.com/cgi-bin/getgrade.cgi"
method="GET">
Student#:

表單提交給http://www.somesite.com/cgi-bin/getgrade.cgi,當用戶輸入一個學號比如123333,點擊 Retrieve Marks按鈕后表單的數(shù)據(jù)將作為URL的一部分發(fā)送給CGI程序。遞交的地址為http://www.somesite.com/cgi-bin /gergrade.cgi?idnum=123333。用POST方式遞交數(shù)據(jù)時輸入的數(shù)值將作為分段的輸入流發(fā)送給服務(wù)器。

GET方式用戶輸入中帶有空格時這些空格將被(+)取代,當用戶一次要遞交多個數(shù)值時這些數(shù)值用(&)分割。

Servlet編程原理

Servlet和CGI相似,Servlets支持請求、響應的編程方式,當一個客戶端發(fā)送一個請求給服務(wù)器,服務(wù)器將這個請求發(fā)送給Servlet。Servlet組織一個響應發(fā)回給客戶端。Servlet和CGI不同的是,Servlet是對多次請求使用一個進程處理。

當客戶端遞交了一個請求,Servlet 的 service方法就被調(diào)用并將請求傳遞給request和response。首先Servlet判斷請求是post還是get方式,并決定用HttpServlet.doGet還是HttpServlet.doPost方法來處理這個請求。這兩個方法都將調(diào)用HttpServletRequest和HttpServletResponse。

通過MIDlet激活CGI腳本

了解了基本的HTTP GET,POST和Servlets之后,讓我們來看一個例子。***個例子是用來說明如何用MIDlet通過POST方式激活一個CGI腳本。

例子中當打開了pgrade.cgi這個CGI的連接后跟著打開可輸出和輸入流。輸入的內(nèi)容通過output流發(fā)送。得到的響應通過input流獲得。 CGI腳本是用PERL寫的,腳本中獲得學號后在數(shù)據(jù)庫中查找此學號的記錄,如果找到就返回相關(guān)的信息給請求的客戶端。因為在MIDlet里并沒有表單可用于提交,所以內(nèi)容要通過寫流的方法實現(xiàn)。下面是MIDlet的代碼。

  1. import java.io.*;  
  2. import javax.microedition.io.*;  
  3. import javax.microedition.lcdui.*;  
  4. import javax.microedition.midlet.*;  
  5.  
  6. /**  
  7. * An example MIDlet to invoke a CGI script  
  8. * using the POST method.  
  9. **/  
  10.  
  11. public class PostMidlet extends MIDlet {  
  12. private Display display;  
  13. String url = "http://somesite.com/cgi-bin/pgrade.cgi";  
  14.  
  15. public PostMidlet() {  
  16. display = Display.getDisplay(this);  
  17. }  
  18.  
  19. //Initialization. Invoked the MIDlet activates.  
  20. public void startApp() {  
  21. try {  
  22. getGrade(url);  
  23. } catch (IOException e) {  
  24. System.out.println("IOException " + e);  
  25. e.printStackTrace();  
  26. }  
  27. }  
  28.  
  29. //Pause, discontinue ....  
  30. public void pauseApp() { }  
  31.  
  32. //Destroy must cleanup everything.  
  33. public void destroyApp(boolean unconditional) { }  
  34.  
  35. //Retrieve a grade.  
  36. void getGrade(String url) throws IOException {  
  37. HttpConnection c = null;  
  38. InputStream is = null;  
  39. OutputStream os = null;  
  40. StringBuffer b = new StringBuffer();  
  41. TextBox t = null;  
  42. try {  
  43. c = (HttpConnection)Connector.open(url);  
  44. c.setRequestMethod(HttpConnection.POST);  
  45. c.setRequestProperty("IF-Modified-Since", "20 Jan 2001 16:19:14 GMT");  
  46. c.setRequestProperty("User-Agent", "Profile/MIDP-1.0 Configuration/CLDC-1.0");  
  47. c.setRequestProperty("Content-Language", "en-CA");  
  48. os = c.openOutputStream();  
  49.  
  50. // send request to the CGI script  
  51. String str = "name=163748";  
  52. byte postmsg[] = str.getBytes();  
  53. for(int i=0< postmsg.length;i++) {  
  54. os.write(postmsg[i]);  
  55. }  
  56. os.flush();  
  57.  
  58. //receive response and display in a text box.  
  59. is = c.openDataInputStream();  
  60. int ch;  
  61. while((ch = is.read()) != -1) {  
  62. b.append((char) ch);  
  63. System.out.println((char)ch);  
  64. }  
  65. t = new TextBox("Final Grades", b.toString(), 1024, 0);  
  66. } finally {  
  67. if(is!= null) {  
  68. is.close();  
  69. }  
  70. if(os != null) {  
  71. os.close();  
  72. }  
  73. if(c != null) {  
  74. c.close();  
  75. }  
  76. }  
  77. display.setCurrent(t);  
  78. }  

【編輯推薦】

  1. 創(chuàng)建Servlet過濾器的向?qū)?/FONT>
  2. 安裝Servlet和JSP開發(fā)工具
  3. 擴展Future Response Servlet
  4. Servlet容器的匹配過程
  5. 淺談user cache Servlet
責任編輯:佚名 來源: 中國IT實驗室
相關(guān)推薦

2009-07-03 12:48:24

Java Servle

2009-07-09 16:57:03

Servlet與App

2009-11-13 09:36:10

UNIX通訊命令操作系統(tǒng)

2012-06-29 13:31:56

ServletJSPJava

2013-02-25 10:18:08

ThreadMsgC#

2009-07-08 09:35:53

Java ServleServlet 3.0

2009-07-06 15:34:56

JSP和Servlet

2009-07-08 18:16:02

Applet和Serv

2009-07-08 18:21:27

2009-09-01 18:16:41

C#窗體間通訊

2009-07-08 09:22:03

Servlet和JSP

2024-07-12 08:22:05

C#SendMessag技術(shù)

2012-11-20 10:47:16

2009-07-07 13:29:33

Servlet和JSP

2011-11-21 15:45:28

CGI

2009-07-09 10:49:56

Servlet和JSP

2011-06-13 09:15:18

AIXlinuxunix

2009-07-01 14:09:24

Servlet和BeaJSP

2009-07-02 09:13:25

什么是JSPServlet

2009-07-07 17:10:57

JSP和Servlet
點贊
收藏

51CTO技術(shù)棧公眾號