0


我有一个登录表单和一个用于登录的 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...
4

1 回答 1

1

问题不在于forward()or sendRedirect(),而在于您如何从HTML表单发送数据。

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

请参阅此链接

<!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附带的查询字符串。

也可以看看:

于 2013-08-07T07:03:06.110 回答