繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM