我有一个Servlet类,我正在进行NTLM身份验证,如果成功,我将转发到JSP页面。
JSP页面有一个用户表单,其中输入的注册详细信息很少,并且提交了页面。 在另一个名为ServiceController的servlet中,我使用
获取所有表单详细信息request.getParameter("");
我面临的问题是如果我从Servlet重定向到JSP页面,request.getParameter("");
都是null,但如果我正在访问JSP页面,我成功地能够使用{{1}获取所有表单值}
如果我从Login Servlet类重定向到JSP页面,为什么我无法在Servlet中获取表单值?
我重定向的Servlet代码
request.getParameter("");
任何帮助都非常值得赞赏
答案 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