简体   繁体   English

.forward(req,resp)之后的HttpServletRequest有什么问题?

[英]What wrong with HttpServletRequest after .forward(req, resp)?

I have a test for simple Servlet which get jsp file. 我有一个用于获取jsp文件的简单Servlet的测试。 In this servlet action request.setAttribute("key", "value") but after call .forward() when I do request.getAttribute("key") I'm get null . 在此servlet动作中, request.setAttribute("key", "value")但在我调用request.getAttribute("key")时调用.forward() ,我得到了null Why this happen? 为什么会这样? This behavior determines forward or reason in mock object? 这种行为决定forward模拟对象中的forward还是原因?

This is doPost of Servlet: 这是Servlet的doPost

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    final boolean success = addUserInDatabase(req);

    if (success) req.setAttribute("serverAnswer", EDIT_SUCCESS.get());//this write value
    else req.setAttribute("serverAnswer", ERR_UNIQUE_L_P.get());

    req.getRequestDispatcher(ANSWER.get())
            .forward(req, resp);
}

This is test: 这是测试:

//mock http.
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);


RequestDispatcher dispatcher = mock(RequestDispatcher.class);
when(request.getRequestDispatcher(ANSWER.get()))
                  .thenReturn(dispatcher);
servlet.doPost(request, response);
String result = (String) request.getAttribute("serverAnswer");//get value
Assert.assertThat(result, is(EDIT_SUCCESS.get()));// result == null

Why I get Null? 为什么我得到空? Is it possible to get value of setAttribute after call forward ? 是否有可能得到价值setAttribute调用后forward How to test this behavior? 如何测试这种行为? Thank You. 谢谢。

try request.getAttribute("serverAnswer").toString(); 尝试request.getAttribute("serverAnswer").toString(); and use .include(request, response); 并使用.include(request, response); .

If you add String result = (String)req.getAttribute("serverAnswer"); 如果添加String result = (String)req.getAttribute("serverAnswer"); just before calling req.getRequestDispatcher(ANSWER.get()) on your servlet and check value of result it would still be null. 就在您的Servlet上调用req.getRequestDispatcher(ANSWER.get())并检查result值之前,它仍然为null。

The reason is your request object is not real but mocked. 原因是您的请求对象不是真实的而是被嘲笑的。 you have to do something like this. 你必须做这样的事情。

when(request.getAttribute(eq("serverAnswer"))).thenReturn(EDIT_SUCCESS.get());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 .forward()然后resp.sendRedirect()与servlet - .forward() then resp.sendRedirect() with servlet 将 HttpServletRequest 转发到不同的服务器 - Forward HttpServletRequest to a different server 为什么我必须删除对“super.doGet(req, resp)”和“super.doPost(req, resp)”的调用? - Why do I have to delete the calls to “super.doGet(req, resp)” and “super.doPost(req, resp)”? 静态嵌套类的正确语法是什么? 为什么错误的语法在一种情况下起作用而在另一种情况下不起作用? - What is the correct syntax for static nested classes resp. why is the wrong syntax working in the one case and not working in the other case? HttpServletRequest对象的生命是什么? - What is a life of HttpServletRequest object? 如何将 HttpServletRequest 和 HttpServletResponse 对象转发到另一个服务? - How to forward the HttpServletRequest and HttpServletResponse object to another service? 使用Req Dispatcher转发在另一个Webapp中调用doPost - Calling the doPost in another Webapp with a Req Dispatcher forward 如何在 Spring 引导中将 HttpServletRequest 标头转发到另一个 REST API - How to forward HttpServletRequest headers to another REST API in Spring Boot @Autowired HttpServletRequest 的 SpringBoot 转发请求导致 StackOverFlow 异常 - SpringBoot forward request by @Autowired HttpServletRequest result in StackOverFlow Exception 异常或错误后java分解HttpServletRequest - java break down HttpServletRequest after exception or error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM