aspose file tools*
The moose likes Servlets and the fly likes doGet() doPost() doPut() Which one?? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Soft Skills this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Servlets
Bookmark "doGet() doPost() doPut() Which one??" Watch "doGet() doPost() doPut() Which one??" New topic
Author

doGet() doPost() doPut() Which one??

Gregg Bolinger
GenRocket Founder
Ranch Hand

Joined: Jul 11, 2001
Posts: 15300
    
    6

I have a servlet to write some information to a mySQL database. I get my connection to the database in the init() method of the servlet. So now do I write my information to the database in the doPost method?
What I did was send an Object which is a Vector to my Servlet. In the doPost method now, I recieve that object with
ObjectInputStream in = new ObjectInputStream(request.getInputStream());
And then I do:
Vector v = (Vector)in.readObject();
And I loop through the vector and write to the database. However, I am not getting any error messages from my Exceptions but it is not writing to the database either. And I don't know how to get my servlet to write to a terminal so I can debug a little better.
Basically I am wondering if I am overiding the correct method to write information. I am not sending anything back to the client.
Thanks.


GenRocket - Experts at Building Test Data
Dave Vick
Ranch Hand

Joined: May 10, 2001
Posts: 3244
Gregg
How do you send the vector to the servlet? Is it submitted by a JSP or another servlet? Or are you chaining servlets together and passing requests? Or does this just run when the servlet is instantiated?
IF it from a form on a web page/jsp/servlet then whatever method is specified in the HTML form tag is the one to use in your servlet to handle the request. the same if you have passed a request to another servlet.
If this is somthing that happens when the servlet is intialized then you would just leave it in the init method.
Does that help? If not post some code and maybe I'll be able to follow exactly what you're doing - I'm a little slow sometimes


Dave
Gregg Bolinger
GenRocket Founder
Ranch Hand

Joined: Jul 11, 2001
Posts: 15300
    
    6

Yeah, that is beginning to help. It's actually a stand alone application that is accessing a servlet directly. Below is the code in my Client application that connects to the servlet:

I guess my question now is if I do all my work in the init() method, how do I get the Object? In the doPost, doGet() methods, I know to use response.getInputStream(). But in the init() method I don't know how to do it.
I think my problem is the doGet() or doPost() methods are never really doing anything because the request to the servlet is not from an HTML page? I don't know.
Thanks for you help Dave.
BJ Grau
Ranch Hand

Joined: Jul 10, 2001
Posts: 234
Try using a HttpURLConnection instead of URLConnection. It has support for Http-specific features, and you can set the request type with setRequestMethod().
Gregg Bolinger
GenRocket Founder
Ranch Hand

Joined: Jul 11, 2001
Posts: 15300
    
    6

An interesting addition to my problem. In my client code, if I have the line:
ObjectInputStream in = new ObjectInputStream(con.getInputStream());
and in my servlet code in the doGet() method I have
System.out.println("Inside Get")
and I run my client, I print the "Inside Get".
However if I have in my Client code:
ObjectOutputStream out = new ObjectOutputStream(con.getOutputStream());
And then respectivly in my servlet code in my doPost() method I have
System.out.println("Inside Post");
Then I run my client, I get nothing printed. So for some reason my doPost method is not getting called and I don't know why.
Hope someone can shed some light.
Dave Vick
Ranch Hand

Joined: May 10, 2001
Posts: 3244
Gregg
doGet is the default method called in a servelt if one is not specified (ie in an html form). I've never done things the way you are but it sounds like you're going to want to put your code in the doGet method. You cant do it in the init method because that'll only be done once.
You could also just create your own servlet class by subclassing GenericServlet and then put your code in the service method implementation you create. If you're not using any of the HTTP stuff then you dont really need and HTTP servlet.
hope that helps
Gregg Bolinger
GenRocket Founder
Ranch Hand

Joined: Jul 11, 2001
Posts: 15300
    
    6

Ok, I figured it out, I think. Someone can correct me if I am wrong, but this works.
Appearntly, in order for a servlet to work correctly, the client must open not only an outputStream to send something to the servlet, but an inputStream to recieve the response.
How I found this out was that if I just opened an InputStream on the client side and not an outputStream then my init method (the first time I ran it) and whatever method (doPost() doGet()) was called.
However, if I only opened an outputStream to the Servlet from the client, my methods were never called inside the Servlet (other than init() the first time).
So now I got everthing working just fine. Dave, thanks for all your help. And I am using the GenericServlet class like you suggested and it works perfectly.
Thanks again.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: doGet() doPost() doPut() Which one??