从Servlet重定向到Jquery CRUD表单,导致所有表单元素的request.getParameter为null

时间:2013-04-08 06:51:53

标签: jquery jquery-ui jsp servlets ntlm

我有一个Servlet类,我正在进行NTLM身份验证,如果成功,我将转发到JSP页面。

JSP页面有一个用户表单,其中输入的注册详细信息很少,并且提交了页面。 在另一个名为ServiceController的servlet中,我使用

获取所有表单详细信息
request.getParameter("");

我面临的问题是如果我从Servlet重定向到JSP页面,request.getParameter("");都是null,但如果我正在访问JSP页面,我成功地能够使用{{1}获取所有表单值}

如果我从Login Servlet类重定向到JSP页面,为什么我无法在Servlet中获取表单值?

我重定向的Servlet代码

request.getParameter("");

任何帮助都非常值得赞赏

4 个答案:

答案 0 :(得分:3)

response.sendredirect()方法将调用一个完全新的请求,因此您无法访问先前请求中的任何值。您可以使用requestdispatcher或者您可以在会话中设置值并在jsp页面中读取它们

答案 1 :(得分:3)

这里有两个独立的概念,我认为你是在混合它们。

开始处理请求后,您有以下几种选择:

  • 停止响应(无论是否有意,尽管容器会为你做一些事情)
  • 使用HttpServletResponse.sendRedirect重定向请求,{{}}会响应HTTP 302将浏览器发送到已识别的页面。您甚至可以通过重定向将它们从服务器发送出去。
  • 使用RequestDispatcher.forward转发请求(RequestDispatcher可以从ServletRequest.getRequestDispatcher访问),它将重定向到另一个servlet / JSP来处理请求。这对用户来说完全不可见,并且与重定向不同,请求的URL不会更改。转发的请求必须转到服务器上的某些内容,并且除非明确告知,否则用户无法知道请求已转发。转发的请求将维护其参数,包括Attribute,这是在servlet之间传递参数的简洁方法。

在您的情况下,您提到了在成功登录时设置会话,然后检索的愿望。这些概念完全相互独立。

您可以在this.validUser支票内设置会话,然后转发/重定向。在else中,您可以选择仍然重定向以真正调用失败。

答案 2 :(得分:2)

重定向与转发请求/响应不同。在重定向的情况下,控制任务的传输按容器委托给浏览器,然后浏览器生成对指定URL的新请求,旧请求和响应对象丢失。

答案 3 :(得分:0)

我已经解决了所有表单元素为空的问题,这是我在登录NTLM中使用的servlet身份验证代码的问题。

我正在使用JCIFS(samba.org)解决方案来获取登录域的用户名。 完全删除了我用来获取登录域名的用户名并使用this

的垃圾代码