suraj
suraj

Reputation: 1898

Setting parameters in jsp and in servlets

In my web application , I get a request from the client. I process the request in my jsp page or the servlet(which ever is called) and want to forward to other jsp's or servlets accordingly.

But before forwarding I want to set a few parameters and then forward it with these new parameters. The old parameters should not be present when forwarding. Only the new parameters should be present. How can this be done?
Can I forward from a servlet to jsp and vice-versa?
Please tell how the above can be accomplished?

Upvotes: 2

Views: 44913

Answers (5)

Carlos Jaime C. De Leon
Carlos Jaime C. De Leon

Reputation: 2896

If you have no use for the request parameters and your jsp/servlet has not written anything to the response, then I suppose it would be fine to use redirect instead of forward, since redirecting will discard the request along with the parameters.

When you do redirect, you can create dynamically and set the querystring like so:

response.sendRedirect("url?a=" + var1 +"&b=" + var2);

Take note that this will be a GET method to the url. If url will be resolved to a servlet, you can implement the doGet method to just call the doPost.

Please note that a redirect will be ignored if the jsp/servlet has written something already on the response...

Upvotes: 4

Ramesh PVK
Ramesh PVK

Reputation: 15446

You have to forward to JSP/Servlet using RequestDisptcher. Set the request attribute on the request to set parameters using

request.setAttribute(name, value)

The Forwarded JSP can read the parameter using

request.getAttribute(name)

But, You cannot hide the attribute existing before forward by default. You can achieve this using Request Wrapper. Wrap the request before forwarding override the set and get attribute methods.

Below code explains

    RequestDisptcher dispatcher =  req.getRequestDispatcher("url");
    HideExistingRequestWrapper requestWrapper = 
                                         new HideExistingRequestWrapper(request);
    requestWrapper.setAtribute("forwarded", "forwarded value");
    dispatcher.forward(requestWrapper, response);

Here is the code of wrapper implementation:

    class HideExistingRequestWrapper extends HttpServletRequestWrapper {

           private Map localattributes = new HashMap();

           public HideExistingRequestWrapper (HttpServletRequest orignialRequest) {
                  super(orignialRequest);
           }

           public Object getAttribute(java.lang.String name) { 
                 return localattributes.get(name);
           }

           public Object setAttribute(java.lang.String name, java.lang.String value) { 
                 return localattributes.put(name, value);
           }

    }

Upvotes: 1

Chandra Sekhar
Chandra Sekhar

Reputation: 19492

use

ServletRequest.removeAttribute(name of your old attribute)
ServletRequest.setAttribute(name , value)

After setting the attributes, get the RequestDispatcher using

getRequestDispatcher(url)

and then use forward() method

Upvotes: 0

Sabya
Sabya

Reputation: 1429

You can use request dispatcher and redirect as per your need and requirement.

ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("url");

rd.forward(request,response);

or

response.sendRedirect("url");

sendRedirect() sends the header back to the browser , which contains the name of the resource to be redirected to. So this will be a new request to the resource from the browser .

forward() action takes place within the server without the knowledge of the browser .

Upvotes: 3

Rakesh Patel
Rakesh Patel

Reputation: 383

yes you can forward the parameter servlet to jsp and jsp to servlet.

when you can set the attribute in request then it will lost on destination.means you can not access that on third resource.

request.setAttribute(attribute name,attribute value)

you can do same thing in session also.

Upvotes: 3

Related Questions