Java

NAVIGATION
CATEGORIES
REFERRENCE
LINKS
  • Testing servlet redirects

    5 answers - 736 bytes - related search similar search Add To My Delicious Add To My Stumble Upon Add To My Google Mark Add To My Facebook Add To My Digg Add To My Reddit

    Hello,
    i am using the JettyTestSetup to test a simple Servlet. This servlet
    sometimes calls
    getServletContext().getNamedDispatcher("default").forward(request,
    response); to redirect requests to the default servlet to serve static
    resources.
    Well this is what Jetty returns as response when such a redirect happens:
    HTTP ERRR: 404 /core/ServletRedirector Not Found
    Where core is the context path.
    It is not important for me to test what the redirect returns, its more
    important that the servlet performs the redirect. That is what I want to
    test.
    Any ideas on how to test that (Testing for this error message would be a
    very hacky solution)?
    greetings
    Dennis :)
  • No.1 | | 1485 bytes | |

    Hi Dennis,

    In article <@mail.gmail.com>,
    Sat, 17 Jun 2006 14:20:15 +0200,
    "Dennis Kempin" <dennis.kempin (AT) googlemail (DOT) comwrote:
    dennisi am using the JettyTestSetup to test a simple Servlet. This servlet
    dennissometimes calls
    dennisgetServletContext().getNamedDispatcher("default").forward(request,
    dennisresponse); to redirect requests to the default servlet to serve static
    dennisresources.
    dennis
    dennisWell this is what Jetty returns as response when such a redirect happens:
    dennisHTTP ERRR: 404 /core/ServletRedirector Not Found
    dennis
    dennisWhere core is the context path.

    Do you mean that the 404 response is the expected behavior of
    RequestDispatcher#foward() performed by your servlet?

    dennisIt is not important for me to test what the redirect returns, its more
    dennisimportant that the servlet performs the redirect. That is what I want to
    dennistest.
    dennisAny ideas on how to test that (Testing for this error message would be a
    dennisvery hacky solution)?

    I don't think the error message is the expected result, however,
    I think you need to evaluate the response at endXXX(WebResponse) method
    to test RequestDispatcher#forward works as expected.

    Regards,

    Kazuhito SUGURI

    To unsubscribe, e-mail: cactus-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: cactus-user-help (AT) jakarta (DOT) apache.org
  • No.2 | | 2148 bytes | |

    Hi Kazuhito,

    thank you for your answer. My servlet is mapped to process any request that
    is made.
    Lets say we have a request on /core/test.html: My servlets checks if it can
    handle, if not it redirects to the default
    servlet which should serve test.html (which does exist).
    But instead of the contents of test.html i get the described 404 Error which
    says that it cannot find "/core/ServletRedirector".
    It works fine running the redirect in tomcat and jetty containers without
    cactus.

    Regards,
    Dennis

    2006/6/19, Kazuhito SUGURI <suguri.kazuhito (AT) lab (DOT) ntt.co.jp>:

    Hi Dennis,

    In article <@mail.gmail.com>,
    Sat, 17 Jun 2006 14:20:15 +0200,
    "Dennis Kempin" <dennis.kempin (AT) googlemail (DOT) comwrote:
    dennisi am using the JettyTestSetup to test a simple Servlet. This
    servlet
    dennissometimes calls
    dennisgetServletContext().getNamedDispatcher("default").forward(request,
    dennisresponse); to redirect requests to the default servlet to serve
    static
    dennisresources.
    dennis>
    dennisWell this is what Jetty returns as response when such a redirect
    happens:
    dennisHTTP ERRR: 404 /core/ServletRedirector Not Found
    dennis
    dennisWhere core is the context path.

    Do you mean that the 404 response is the expected behavior of
    RequestDispatcher#foward() performed by your servlet?
    --
    dennisIt is not important for me to test what the redirect returns, its
    more
    dennisimportant that the servlet performs the redirect. That is what I
    want to
    dennistest.
    dennisAny ideas on how to test that (Testing for this error message
    would be a
    dennisvery hacky solution)?

    I don't think the error message is the expected result, however,
    I think you need to evaluate the response at endXXX(WebResponse) method
    to test RequestDispatcher#forward works as expected.

    Regards,

    Kazuhito SUGURI

    To unsubscribe, e-mail: cactus-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: cactus-user-help (AT) jakarta (DOT) apache.org
    --
  • No.3 | | 3147 bytes | |

    Hi Dennis,

    Followings are information and recommendation from me.
    These are based on short examination with default settings of Tomat-5.5.12.
    But, please note that behavior of a servlet named "default" might
    be different for each container and its configuration.

    In article <@mail.gmail.com>,
    Mon, 19 Jun 2006 23:14:40 +0200,
    "Dennis Kempin" <dennis.kempin (AT) googlemail (DOT) comwrote:
    dennisthank you for your answer. My servlet is mapped to process any request that
    dennisis made.
    dennisLets say we have a request on /core/test.html: My servlets checks if it can
    dennishandle, if not it redirects to the default
    dennisservlet which should serve test.html (which does exist).
    dennisBut instead of the contents of test.html i get the described 404 Error which
    dennissays that it cannot find "/core/ServletRedirector".

    I think it's hard to test the forwarding by using Cactus
    as long as you are using getNamedDispatcher("default").

    RequestDispatcherWrapper#forward(), which is used in the test,
    calls the original RequestDispatcher with the original HTTP request.
    # See Cactus API JavaDoc.

    A servier-side test case is invoked from a servlet,
    /<context>/ ServletRedirecter. So, the request URI of the original HTTP
    request is "/<context>/ServletRedirector".

    When the original RequestDispatcher is the default servlet of Tomcat,
    it's trying to obtain the resource from "/<context>/ServletRedirector",
    that has the possiblity of causing an infinite loop.
    # Fortunately, the default servlet responds 404 and stops the loop.

    Please try following fragments of servlet and web.xml.
    You will find similar behavior with your Cactus tests
    when you access to <context>/dummy.

    public DummyServlet
    extends HttpServlet
    {
    protected void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IException
    {
    getServletContext().getNamedDispatcher("default").forward(request, response);
    }
    }

    <servlet>
    <servlet-name>dummy</servlet-name>
    <servlet-class>DummyServlet</servlet-name>
    </servlet>
    <servlet-mapping>
    <servlet-name>dummy</servlet-name>
    <url-pattern>/dummy</url-pattern>
    </servlet-mapping>

    I would like to recommend you to use getRequestDispatcher(String)
    instead of getNamedDispatcher("default"), it it's possible.
    If you can do so, you will be able to simulate any path condition
    for a testXXX() by using org.apache.cactus.WebRequest#setURL() method
    in beginXXX(), and you can evaluate a forwarded responce in the corresponding
    endXXX() method.
    # You should not simulate <context>/ServletRedirector,
    # which is the default of Cactus, of cource :-)

    Hope this helps,

    Kazuhito SUGURI

    To unsubscribe, e-mail: cactus-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: cactus-user-help (AT) jakarta (DOT) apache.org
  • No.4 | | 805 bytes | |

    Hi Karthik,

    In article <@xius.org>,
    Tue, 20 Jun 2006 14:52:59 +0530,
    "karthik" <karthikn (AT) xius (DOT) orgwrote:
    karthiknCan some body on this form ,be kind to spare me some code on
    karthiknHWT test a JSP pages which hare secured by session objects.
    karthiknSuppoes i have 100 jsp pages which have session Tracked,
    karthiknso how to set the sessions and Test such jsp pages using CACTUS .

    Please take a look at:

    You can set session attributes in testXXX() method
    before you call JSP under test by using one of forward methods.

    Hope this helps,

    Kazuhito SUGURI

    To unsubscribe, e-mail: cactus-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: cactus-user-help (AT) jakarta (DOT) apache.org
  • No.5 | | 1128 bytes | |

    Hi Karthik,

    In article <@xius.org>,
    Wed, 21 Jun 2006 18:32:48 +0530,
    "karthik" <karthikn (AT) xius (DOT) orgwrote:
    karthiknThe example provided on the site is something confusing

    Please point out what confuses you.

    karthiknIf u hava a sample working test case with war file,please
    karthiknprovid me the same. so i can correct my self.

    A sample.

    public class SampleTest
    extends ServletTestCase
    {
    public SampleTest(String name)
    {
    super(name);
    }
    public void testJsp()
    throws Exception
    {
    session.setAttribute("testKey", "testValue");
    RequestDispatcher rd = request.getRequestDispatcher("/test.jsp");
    rd.forward(request, response);
    }
    public void endJsp(WebResponse response)
    {
    System.out.println(response.getText());
    }
    }

    test.jsp:
    <%= session.getAttribute("testKey") %>

    Regards,

    Kazuhito SUGURI

    To unsubscribe, e-mail: cactus-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: cactus-user-help (AT) jakarta (DOT) apache.org

Re: Testing servlet redirects


max 4000 letters.
Your nickname that display:
In order to stop the spam: 5 + 4 =
QUESTION ON "Java"

EMSDN.COM