- From: Mihai Dobrescu <michi@alphatech2000.com>
- Date: Thu, 02 Aug 2001 18:01:40 +0300
- To: www-lib@w3.org
Hello.
I have the following problem:
I have followed the post.c example in order to submit in a C function
a string received from COBOL, through a POST method, to a servlet on a
HTTP server. I don't know whether I should use the WWW_FORM instead of
the WWW_PLAINTEXT format, but either way I do not receive a pair
`parameter=value` in the doPost method of the servlet, where I attempt
to retrieve it through a request.getParameter () call.
I have tried to trace the query string using the
request.getQueryString() method. However, it returns null and I presume
it is natural in case of the POST method, while it should have been
non-null in case of a GET method. I have found mail messages on the
Internet from people who also got null from a getQueryString() method in
a similar situation.
Please be so kind as to look over the code below and at least tell me
which is the general error that I make. Thank you.
This is the COBOL program.
special-names.
call-convention 0 is cdecl-convention-val.
data division.
working-storage section.
01 work-areas.
03 wa-string pic x(30) value "COBOLstring" & x"00".
01 ws-return-code pic 999 comp-5 value 127.
procedure division.
entry-point section.
call cdecl-convention-val "post_display"
using wa-string
returning ws-return-code
end-call
stop run.
This is the C function.
#include "WWWLib.h"
#include "WWWInit.h"
#include <string.h>
#include <stdlib.h>
#define POSTHOST "http://localhost.localdomain:8080/mssj/postd"
extern int post_display (const char *pic_x);
PRIVATE int printer (const char *fmt, va_list pArgs)
{
return (vfprintf(stdout, fmt, pArgs));
}
PRIVATE int tracer (const char *fmt, va_list pArgs)
{
return (vfprintf(stderr, fmt, pArgs));
}
PRIVATE int terminate_handler (HTRequest *request, HTResponse
*response, void *param, int status)
{
HTRequest_delete(request);
HTProfile_delete();
exit(0);
}
int post_display (pic_x)
const char *pic_x;
{
HTRequest *request = NULL;
HTParentAnchor *src = NULL;
HTAnchor *dst = NULL;
char *dst_str = NULL;
char *data = NULL;
char *cwd = NULL;
BOOL status = NO;
HTProfile_newNoCacheClient("libwww-POST", "1.0");
HTPrint_setCallback(printer);
HTTrace_setCallback(tracer);
HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST);
dst_str = (char *)malloc(strlen(POSTHOST)+1);
if (dst_str == NULL) return -1;
strcpy(dst_str, POSTHOST);
data = (char *)malloc(strlen("pic_x=")+strlen(pic_x)+1);
if (data == NULL) return -1;
strcpy(data, "pic_x=");
strcat(data, pic_x);
cwd = HTGetCurrentDirectoryURL();
HTPrint("Posting to \"%s\" data \"%s\"\n", dst_str, data);
request = HTRequest_new();
dst = HTAnchor_findAddress(dst_str);
src = HTTmpAnchor(NULL);
HTAnchor_setDocument(src, data);
HTAnchor_setFormat(src, WWW_PLAINTEXT);
HTAnchor_setLength(src, strlen(data));
status = HTPostAnchor(src, dst, request);
HT_FREE(cwd);
free(dst_str);
f ree(data);
if (status == YES)
{
HTPrint("Post succeeded.\n");
HTEventList_loop(request);
}
return 0;
}
This is the Java servlet.
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class PostDisplay extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws IOException, ServletException
{
System.out.println("doGet() not implemented.");
}
public void doPost(HttpServletRequest request, HttpServletResponse
response) throws IOException, ServletException
{
System.out.println("doPost() initiated.");
Enumeration e = request.getParameterNames();
while (e.hasMoreElements())
{
String paramName = new String((String)e.nextElement());
String paramValue = new String(request.getParameter(paramName));
System.out.println(paramName+"="+paramValue);
}
}
}
And this is the output:
[root@localhost LibWWW]# make
rm -f adsamp adsamp.int adsamp.idy adsamp.o post_display.o *~ core
gcc -c -o post_display.o `libwww-config --cflags` post_display.c
cob -x -a adsamp.cbl post_display.o `libwww-config --libs`
[root@localhost LibWWW]# adsamp
Posting to "http://localhost.localdomain:8080/mssj/postd" data
"pic_x=COBOLstring"
Looking up localhost.localdomain
Contacting localhost.localdomain
Post succeeded.
doPost() initiated.
Writing 1Kbytes
Reading...
[root@localhost LibWWW]#
(Why doesn't the servlet print pic_x=COBOLstring in the
System.out.println() call?)
Received on Thursday, 2 August 2001 10:58:20 UTC