[英]Redirecting from Servlet to Jquery CRUD form causing request.getParameter null for all form elements
我有一个Servlet类,正在执行NTLM身份验证,如果成功,则将转发到JSP页面。
JSP页面具有一个用户表单,在其中输入了很少的注册详细信息并提交了页面。 在另一个名为ServiceController的servlet中,我使用
request.getParameter("");
我面临的问题是,如果我要从Servlet重定向到JSP页面, request.getParameter("");
全部为空,但是如果我直接访问JSP页面,则可以使用request.getParameter("");
成功获得所有表单值request.getParameter("");
如果我从Login Servlet类重定向到JSP页面,为什么不能在Servlet中获取表单值?
我要重定向的Servlet代码
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
String auth = request.getHeader("Authorization");
...
if (findUsername(uname) == true) {
response.sendRedirect("myForm.jsp");
return;
} else {
response.sendRedirect("accessdenied.jsp");
return;
任何帮助都是非常明显的
response.sendredirect()方法将调用一个完全新的请求,因此您无法访问先前请求中的任何值。 您可以使用requestdispatcher或在会话中设置值并在jsp页面中读取它们
这里有两个独立的概念,我想您正在将它们混淆。
一旦开始处理请求,您将有以下几种选择:
HttpServletResponse.sendRedirect
重定向请求,该请求将使用HTTP 302
进行响应,以将浏览器发送到所标识的页面。 您甚至可以通过重定向将它们从服务器发送出去。 RequestDispatcher.forward
转发请求(可以从ServletRequest.getRequestDispatcher
访问RequestDispatcher
),该请求将重定向到其他Servlet / JSP以处理请求。 这对于用户是完全不可见的,并且与重定向不同,请求的URL对于他们而言将不会更改。 转发的请求必须转到服务器上的某个设备,除非明确告知用户,否则用户无法知道该请求已转发。 转发的请求将保留其参数,包括Attribute
,这是在Servlet之间传递参数的一种干净方法。 在您的情况下,您提到了在成功登录后设置会话,然后进行检索的愿望。 这些概念是完全相互独立的。
您可以在this.validUser
检查中设置会话,然后转发/重定向。 在else
,您可以选择仍然重定向以真正指出失败。
重定向与转发请求/响应不同。如果通过容器将控制任务的重定向传递委托给浏览器,则浏览器将生成一个新请求到指定的url,并且旧的请求和响应对象将丢失。
我已经解决了所有表单元素都为null的问题,这是我在Login servlet
遇到的NTLM
身份验证代码问题。
我正在使用JCIFS
(samba.org)解决方案来获取登录到域的用户名。 完全删除了我用来获取登录到域的用户名的废话代码,并按照此操作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.