tomboman
asked on
How to send a string from one sevlet to another servlet?
Say if I have a string in a servlet called sendServlet.java and I want to pass it another servlet called receiveServlet.java, How would I do that?
Thanks.
Thanks.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
just need to display it on the web page at the mean time. But now the question just got more complicated. There are now a series of string, which I now kept them in a vector(of the send sendServlet). I need to display them on the web page after the receiveServlet received the series of strings from sendServlet. Help.
there are various approaches for this.
1. Store the vector in Session and retrieve it from session in the second servlet
2. Attach the vector to the request object and forward the request from the first servlet to the second servlet.
3. Store the string array in a cookie.
if one servlet isn't forwarding to the other then use approach one otherwise approach two. Approach three is a last resort and not recommended.
CJ
1. Store the vector in Session and retrieve it from session in the second servlet
2. Attach the vector to the request object and forward the request from the first servlet to the second servlet.
3. Store the string array in a cookie.
if one servlet isn't forwarding to the other then use approach one otherwise approach two. Approach three is a last resort and not recommended.
CJ
I am assuming here that SendServlet writes out the page that will be serviced with ReceiveServlet.
If you are doing a POST from the first servlet to the second, the easiest thing to do might be to include the following in SendServlet
out.write( "<input type=\"hidden\" name=\"mystring\" value=\" + myValue + "\">");
Then in ReceiveServlet, you can pick up the value of th string with
String myString = request.getParameterValue( "mystring");
To do a series of strings, simply have one more hidden field for each string.
out.write( "<input type=\"hidden\" name=\"mystring1\" value=\" + myValue1 + "\">");
out.write( "<input type=\"hidden\" name=\"mystring2\" value=\" + myValue2 + "\">");
and retrieve with
String myString1 = request.getParameterValue( "mystring1");
String myString2 = request.getParameterValue( "mystring2");
------
If you are doing a GET, you will have to encode the string and write a properly coded href, something like this:
out.write( "<a href=\"http://myhost/myWebApp/servlet/ReceiveServlet"
+ "?mystring1=" + URLEncoder.encode( myValue1)
+ "&mystring2=" + URLEncoder.encode( myValue2)
+ "\">Receive</a>");
The URLEncoder (java.net.URLEncoder) is needed to encode a String into a URL parameter. If you know for sure that the string will be only letters and numbers, you can just use
... ?mystring=" + myValue + "\"> ...
------
Comments about the other solutions:
objects proposes calling a public method in ReceiveServlet directly. This will work if the receiving method can be made static. It will not work well if there will be a different string passed on every request.
cheekycj proposes to store the string as a vector in the session. That will only work if you actually create a session first. And you can store the String directly, you don't need to create a vector.
If you are doing a POST from the first servlet to the second, the easiest thing to do might be to include the following in SendServlet
out.write( "<input type=\"hidden\" name=\"mystring\" value=\" + myValue + "\">");
Then in ReceiveServlet, you can pick up the value of th string with
String myString = request.getParameterValue(
To do a series of strings, simply have one more hidden field for each string.
out.write( "<input type=\"hidden\" name=\"mystring1\" value=\" + myValue1 + "\">");
out.write( "<input type=\"hidden\" name=\"mystring2\" value=\" + myValue2 + "\">");
and retrieve with
String myString1 = request.getParameterValue(
String myString2 = request.getParameterValue(
------
If you are doing a GET, you will have to encode the string and write a properly coded href, something like this:
out.write( "<a href=\"http://myhost/myWebApp/servlet/ReceiveServlet"
+ "?mystring1=" + URLEncoder.encode( myValue1)
+ "&mystring2=" + URLEncoder.encode( myValue2)
+ "\">Receive</a>");
The URLEncoder (java.net.URLEncoder) is needed to encode a String into a URL parameter. If you know for sure that the string will be only letters and numbers, you can just use
... ?mystring=" + myValue + "\"> ...
------
Comments about the other solutions:
objects proposes calling a public method in ReceiveServlet directly. This will work if the receiving method can be made static. It will not work well if there will be a different string passed on every request.
cheekycj proposes to store the string as a vector in the session. That will only work if you actually create a session first. And you can store the String directly, you don't need to create a vector.
Need to clarify exactly what you want to do:
So when sendServlet get's called you want to store a String which can be displayed by recieveServlet the *next* time it is called?
If this is the case then store it in a session as described by CJ.
So when sendServlet get's called you want to store a String which can be displayed by recieveServlet the *next* time it is called?
If this is the case then store it in a session as described by CJ.
I give you CJ's method 2 example:
sendServlet.java
------------------
Vector v = ...
request.setAttribute("stri ngs", v);
RequestDispatcher rd = request.getRequestDispatch er("receiv eServlet") ;
rd.forward(request, response);
receiveServlet.java
--------------------
Vector v = (Vector) request.getAttribute("stri ngs");
v.get() ....
sendServlet.java
------------------
Vector v = ...
request.setAttribute("stri
RequestDispatcher rd = request.getRequestDispatch
rd.forward(request, response);
receiveServlet.java
--------------------
Vector v = (Vector) request.getAttribute("stri
v.get() ....
since kotan gave sample code for the second approach.. just in case you are not forwarding to a second servlet here is sample code for the first approach.
firstServlet.java
Vector strVector = new Vector();
// add to Strings to vector here
HttpSession session = request.getSession(true);
session.setAttribute("Stri ngVector", strVector);
Now to retrieve it in the second servlet:
secondServlet.java
// we pass false here b/c we assume session has been
// created by first servlet already
HttpSession session = request.getSession(false);
Vector vectorFromSession = null;
if (session != null) {
vectorFromSession = request.getAttribute("Stri ngVector") ;
if (vectorFromSession != null) {
// add code here to do whatever you want with the
// vector of strings
}
else {
// vector was not in session for some reason handle appropriately
}
}
else {
// print out a warning in your error logs that session is not working right
}
also add this to your web.xml file:
<session-config>
<!-- setting session timeout to 30 minutes -->
<session-timeout>30</sessi on-timeout >
<!-- setting session id cookie domain -->
<cookie-domain>.yoursite.c om</cookie -domain>
</session-config>
some feedback would help us.
HTH,
CJ
firstServlet.java
Vector strVector = new Vector();
// add to Strings to vector here
HttpSession session = request.getSession(true);
session.setAttribute("Stri
Now to retrieve it in the second servlet:
secondServlet.java
// we pass false here b/c we assume session has been
// created by first servlet already
HttpSession session = request.getSession(false);
Vector vectorFromSession = null;
if (session != null) {
vectorFromSession = request.getAttribute("Stri
if (vectorFromSession != null) {
// add code here to do whatever you want with the
// vector of strings
}
else {
// vector was not in session for some reason handle appropriately
}
}
else {
// print out a warning in your error logs that session is not working right
}
also add this to your web.xml file:
<session-config>
<!-- setting session timeout to 30 minutes -->
<session-timeout>30</sessi
<!-- setting session id cookie domain -->
<cookie-domain>.yoursite.c
</session-config>
some feedback would help us.
HTH,
CJ
No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation in the Cleanup topic area that this question is:
- Split points between objects and cheekycj
Please leave any comments here within the next seven days.
PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!
girionis
EE Cleanup Volunteer
I will leave a recommendation in the Cleanup topic area that this question is:
- Split points between objects and cheekycj
Please leave any comments here within the next seven days.
PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!
girionis
EE Cleanup Volunteer
ASKER
Thanks object and cj. and everyone else who contributed.
ASKER