当前位置: 首页 > 知识库问答 >
问题:

Java servlet无法获得POST params[重复]

宰父衡
2023-03-14

我试图创建一个简单的登录屏幕,它有一个电子邮件字段、一个密码字段和一个登录按钮(这三个字段都包含在

中)。当用户提交表单时,客户机执行AJAX POST(异步,这样用户就不必“忍受”页面重新加载!)到servlet。目前,servlet只执行一个虚拟检查,如果用户成功登录,返回“1”,如果电子邮件/密码错误,返回“0”。然后客户机处理响应(同样,响应将是0或1)。

事情是这样的:当我提交表单时,servlet收到HTTP POST请求,但是email/password字段显示为null:

public class SigninService extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        PrintWriter writer = null;
        try {
            writer = response.getWriter();
            JSONSerializer serializer = new JSONSerializer();

            System.out.println("\tFetching POST data...");
            String email = request.getParameter("email");
            System.out.println("\tEmail is " + email + "...");
            String password = request.getParameter("password");
            System.out.println("\tPassword is " + password + "...");

            Integer answer = null;
            // Dummy check; will replace with actual code once I get this example working...
            if("testing@example.com".equals(email) && "12345".equals(password))
                answer = 1;
            else
                answer = 0;

            System.out.println("\tSerializing the HTTP response...");
            String json = serializer.deepSerialize(answer);

            System.out.println("\tSending response back to client...");
            writer.write(json);
        } catch (Throwable throwable) {
            System.err.println(throwable.getMessage());
            throwable.printStackTrace();
        } finally {
            writer.close();
        }
    }
}

上面的代码打印email/password的null值。我阅读了几篇关于从HttpServletRequest提取POST数据的文章(特别是本文和本文),似乎没有一篇对我有帮助。两者似乎都建议使用request.getReader()方法,但这不是我所需要的。我需要一种直接访问表单变量及其各自值的方法。

我无法判断我的客户机代码是否错误地格式化了POST请求并以Java servlet无法处理的方式发送表单数据,或者Java servlet是否没有正确地编码来处理请求。

当我运行Firebug并提交表单时,以下是与请求关联的post选项卡的内容:

-----------------------------18671963685702-some-really-long-number
Content-Disposition: form-data; name="email"

testing@example.com
-----------------------------18671963685702-another-really-long-number
Content-Disposition: form-data; name="password"

12345
-----------------------------18671963685702-and-another-really-long-number--

我首先需要弄清楚这是客户端还是服务器端的bug。这个问题试图将其诊断为服务器端bug,或者将其排除在服务器端bug之外。那么,任何厌倦战斗的servlet老手在HTTP请求或处理它的servlet代码中看到任何错误吗?如果这是一个服务器错误,我需要改变什么来访问我的表单变量?

共有1个答案

许波涛
2023-03-14

当您通过ajax提交表单时,是否以JSON格式发送数据?如果是这样,您应该从用户ID和密码框中显式地获取jquery或js文件中的数据,然后以JSON格式将其发送到服务器。那就能解决问题了。

 类似资料:
  • 问题内容: 请帮助我得到一个where 本身就是一个泛型类型。如我现在所见,Spring RestTemplate现在不支持此功能。我正在使用Spring MVC版本3.1.2 这是我要使用的代码:代码: 我收到此错误: 这是明显的错误,但是今天如何解决呢? 比我想得到我的通用响应类型: 现在,我使用此解决方案,并且不使用: 问题答案: 通过引入修复了该问题,你可以显式继承该参数化类型,以便在运行

  • 我试图创建一个程序,在这个程序中我可以接受输入,并用servlet获得一个数字的平方根。我是初学者,所以知道的不多。问题是当我尝试我的代码时,它不起作用。代码如下: myservletdemo.java 结果是:首先,当你点击链接时,你会得到: 这个结果

  • 在尝试执行GET到发布者存储库时,我正在执行GET和无限循环。 出版商: 书: 完整代码可在此处获得: https://github.com/vanyasav/library

  • 问题内容: 我有线程池,它将带一个工作线程。我需要获得此Callable任务,但无法获得它。 在下面的示例中,我需要为RejectionHandler执行的Callable任务的uniqueId。在中,浇铸,我希望它应该被强制转换为工作线程。 请帮助我获取中的Worker线程实例。 输出量 我期待CallableWorkerThread而不是FutureTask。帮助我获取WorkerThread

  • 我希望我的程序打开默认的chrome配置文件,然后获得YouTube。我可以让它打开youtube(在新的chrome浏览器中),或者打开默认的chrome配置文件,但不能两者兼而有之。(不,我没有运行两个驱动变量) 当我运行获取chrome配置文件的驱动程序行时,我会得到错误: 回溯(最近的调用为last):文件“C:\users\myname\onedrive\documents\python

  • 我正在使用Spring MVC/Security/JPA/Hibernate开发一个web应用程序。 我有一个用户类,它与UserRole有一个omany关系。 UserRole类与用户之间有很多关系。 用户存储库界面非常简单。 当我使用下面的代码片段使用存储库加载用户信息时,它会很好地检索用户和用户角色数据。 这是日志文件。 然而,问题出在这里。 如果我使用UserRepository的save