您好我正在学习一点JSP,我对下面的代码有疑问。我创建了一个index.jsp文件并尝试使用eclipse或直接使用Tomcat 6.0运行它。对于“ if(name.equals(”user“)&& password.equals(”1234“))”行,我总是收到错误。错误是 的显示java.lang.NullPointerException 即可。我会很高兴任何建议。
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<title>Practice</title>
</head>
<body>
<h2>Practice</h2>
<h3>Please enter your name and the password.</h3>
<form method="post" action="">
<table>
<tr><td style="text-align:center">Name</td>
<td><input type="text" name="name" size="80" /></td>
</tr>
<tr><td style="text-align:center">Password</td>
<td><input type="text" name="password" size="80" /></td>
</tr>
<tr><td><input type="submit" value="Send" /></td>
<td><input type="reset" value="Reset" /></td>
</tr>
</table>
</form>
<%-- Testing name and password. --%>
<% String name = request.getParameter("name");
String password = request.getParameter("password");
if (name.equals("user") && password.equals("1234"))
{
%>
<p>Your Input is correct!</p>
<% }
else if (!name.equals(""))
{
%>
<p>Please enter your name!</p>
<% }
else if (!password.equals(""))
{
%>
<p>Please enter your password!</p>
<% }
else if (!name.equals("") && !password.equals(""))
{
%>
<p>Please enter your name and your password!</p>
<% }
else
{
%>
<p>Your input is not correct!</p>
<% }
%>
</body>
</html>
答案 0 :(得分:4)
这是错误的方法。
JSP scriptlet 代码(<% %>
内容中的代码)将始终在请求页面时立即执行,无论是否通过正常的GET请求请求(链接) ,书签等)或POST表单提交。
在应该显示空表单的初始请求中,代码也会被执行,并且在尝试获取请求参数时,它获得的全部是null
。由于您无法在null
上调用任何方法,因此您将获得NullPointerException
。
让它仅在表单提交时执行的最简单的解决方法是检查请求方法是否为POST。
<%
if (request.getMethod().equalsIgnoreCase("POST")) {
// The form is been submitted. Put your code here.
}
%>
通常,提交表单时,未填写的输入字段最终将为空字符串,而不是null
。但是,为了使代码更加健壮,建议无论如何都要检查null
。
阻止NullPointerException
的正确解决方案是在尝试访问之前检查引用是否不是null
。
if (name != null && !name.equals("user")) {
// ...
}
或者,您也可以包装引用,因为"user"
保证不是null
。
if (!"user".equals(name)) {
// ...
}
但是, scriptlets (JSP文件中的原始Java代码)是bad practice。通常的做法是让表单提交给Servlet
。然后,您可以覆盖doPost()
方法并在那里编写代码。您可以在此处[servlets]
tag info page了解有关servlet的任何信息。
答案 1 :(得分:1)
这不是为什么你的jsp给你空指针异常的直接答案,但是在对字符串文字进行字符串比较时你可以在代码中避免它们的一种方法(这不会解决从长远来看,你的情况是做这样的事情:
if("1234".equals(password)){
...
}
这样,如果密码为空,则会得到错误而不是NPE。