forward(request,response)显示地址栏中的用户数据

时间:2013-08-07 06:58:16

标签: jsp servlets response.redirect forward


我有一个登录表单和一个进行登录的servlet。如果用户有效,我会将他重定向到下一页

response.sendRedirect("welcome.jsp");

此外,我想将一个对象发送到此页面,所以我将sendRedirect替换为此

request.setAttribute("notes", notesObject)
disp = getServletContext().getRequestDispatcher("/welcome.jsp");
disp.forward(request, response);

现在的问题是,现在,当用户登录(例如用户/ 111)时,在地址栏中我有:

localhost:8084/WebApplication2/loginServlet?username=user&password=111&action=LOGIN

但是当我使用Sendredirect时我只有localhost:8084/WebApplication2/welcome.jsp

登录Servlet:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
//code...

jsp文件:

 <form action="loginServlet">
//code...

1 个答案:

答案 0 :(得分:1)

问题不在于forward()sendRedirect(),而在于您从HTML表单发送数据的方式。

请注意,<form>标记使用GET方法作为默认HTTP方法。由于您没有明确地给出任何方法,因此它将使用GET方法。

请参阅this link

<!ATTLIST FORM
  %attrs;                              -- %coreattrs, %i18n, %events --
  action      %URI;          #REQUIRED -- server-side form handler --
  method      (GET|POST)     GET       -- HTTP method used to submit the form--
  enctype     %ContentType;  "application/x-www-form-urlencoded"
  accept      %ContentTypes; #IMPLIED  -- list of MIME types for file upload --
  name        CDATA          #IMPLIED  -- name of form for scripting --
  onsubmit    %Script;       #IMPLIED  -- the form was submitted --
  onreset     %Script;       #IMPLIED  -- the form was reset --
  accept-charset %Charsets;  #IMPLIED  -- list of supported charsets --
  >

现在,通过GET请求,您的所有表单数据都将作为查询字符串的一部分,这就是您在那里看到这些数据的原因。您应该将方法更改为POST

<form action="loginServlet" method = "POST">

使用sendRedirect()时没有看到数据的原因是,response.sendRedirect()客户端创建并发送新请求。因此,您的旧请求 URI 不再存在。对于forward(),情况并非如此。 URI 不会更改,您会看到带有查询字符串的原始 URI

  

当我使用Sendredirect时,我只有localhost:8084/WebApplication2/welcome.jsp

正如我所说, URI 会发生变化,您可以看到。因此,您看不到原始 URI 附带的查询字符串。

另见: