[英]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.