我正在尝试创建一个简单的登录界面,其中包含一个电子邮件字段、一个密码字段和一个登录按钮(全部包含在一个
发生的情况是:当我提交表单时,servlet收到了HTTP POST请求,但电子邮件/密码字段显示为NULL:
以上代码打印了电子邮件/密码的
我无法确定客户端代码是否错误地格式化了POST请求并以Java servlet无法处理的方式发送了表单数据,或者Java servlet未正确编码以处理该请求。
当我运行Firebug并提交表单时,以下是与请求相关联的
<form/>
中)。当用户提交表单时,客户端会进行AJAX POST请求(异步,使用户不必“承受”页面重新加载!)到一个servlet。目前,servlet只是进行了一个虚拟检查,如果用户成功登录,则返回“1”,如果电子邮件/密码有误,则返回“0”。然后,客户端处理响应(再次将是0或1)。发生的情况是:当我提交表单时,servlet收到了HTTP POST请求,但电子邮件/密码字段显示为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();
}
}
}
以上代码打印了电子邮件/密码的
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--
对于一个没有经验的人来说,这段代码看起来客户端已经正确发送了非空的email
变量和非空的password
变量,但我对此并不熟悉...
最后的结论
首先,我需要确定这是客户端还是服务器端的错误。这个问题是为了诊断它是否为服务器端的错误或者排除这种可能性。那么,有没有经历过Servlet的老手发现HTTP请求或处理它的Servlet代码有什么问题?如果这是服务器端的错误,我需要改变什么才能访问我的表单变量?
email
和另一个名为password
的变量呢?!? - IAmYourFaja