我有一个带
的index.jsp[剪断]
<%
String name = request.getParameter("name");
String pass = request.getParameter("pass");
String globalname = "webeng";
String globalpass = "2009";
if (name !=null && pass!=null && name.equals(globalname) && pass.equals(globalpass))
{
%>
<hr />
<p><b>Howdy, <%= request.getParameter("name") %></b></p>
<hr />
<% }
else if (name !=null | pass!=null && name.equals("") | pass.equals(""))
{
%>
<hr />
<p><b>Ooops, one or more fields are empty. Please fill everything out!!</b></p>
<hr />
<% }
else if (name !=null | pass!=null && !name.equals(globalname) | !pass.equals(globalpass))
{
%>
<hr />
<p><b>Incorrect Userdata!</b></p>
<hr />
<% }
else{
}
%>
[剪断]
现在,例如globalname是小写的“webeng”。人们可以输入“WebEng”,“webENG”,“WEBENG”及其变体。
我需要键入的字符串转换为小写。不知何故
String newname = name.toLowerCase();
String newpass = pass.toLowerCase();
无效。有人有任何想法吗?
当我使用
时,这就是Eclipse告诉我的<%
String name = request.getParameter("name");
String pass = request.getParameter("pass");
String globalname = "webeng";
String globalpass = "2009";
String newname = name.toLowerCase();
String newpass = pass.toLowerCase();
if (name !=null && pass!=null && name.equals(globalname) && pass.equals(globalpass))
{
%>
<hr />
<p><b>Howdy, <%= request.getParameter("name") %></b></p>
<hr />
<% }
else if (name !=null | pass!=null && name.equals("") | pass.equals(""))
{
%>
<hr />
<p><b>One or more fields are empty!</b></p>
<hr />
<% }
else if (name !=null && pass!=null && !name.equals(globalname) | !pass.equals(globalpass))
{
%>
<hr />
<p><b>Incorrect Userdata!</b></p>
<hr />
<% }
else{
}
%>
答案 0 :(得分:5)
您的代码逻辑很奇怪。 Scriptlet也不会使测试更容易。这是一个真正的Java类的SSCCE,可以启动并简化测试:
public class Test {
public static void main(String[] args) throws Exception {
String user = "WeBeNg"; // Change this as if it is user input.
String pass = "2009"; // Change this as if it is user input.
String expectedUser = "webeng";
String expectedPass = "2009";
if (user == null || pass == null || user.isEmpty() || pass.isEmpty()) {
System.out.println("Please enter both username and password.");
} else if (user.equalsIgnoreCase(expectedUser) && pass.equals(expectedPass)) {
System.out.println("Welcome " + user);
} else {
System.out.println("Unknown login.");
}
}
}
希望这有帮助。
编辑#1 :请不要发布截图。在代码块中对异常和堆栈跟踪进行Copypaste。顺便提一下,不是来自Eclipse。它来自Tomcat。此外,有问题的例外(NullPointerException)是相当自我解释的。您访问了一个实际为null的对象引用。
SomeObject someObject = null;
someObject.doSomething(); // Fails with NPE.
someObject = new SomeObject();
someObject.doSomething(); // Succes.
您需要先进行空检查,例如
if (someObject != null) {
someObject.doSomething(); // Succes.
}
编辑#2 我还建议您了解Java中的运算符,运算符优先级和表达式分组。看,以下不是“逻辑”
if (name !=null | pass!=null && name.equals("") | pass.equals(""))
这是一个很好的教程,首先要了解这一点:http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html祝你好运。
答案 1 :(得分:0)
您可以使用compareToIgnoreCase,而无需自行进行转换。
答案 2 :(得分:0)
你似乎使用了|而不是|| 。这是故意的吗?
答案 3 :(得分:0)
这是equalsIgnoreCase。除非您真的不想使用|
运算符来快捷方式,否则使用||
通常更安全。我也不愿意像BalusC的回答那样成功,对于“登录”用户的默认条件有些不安。
<%
String name = request.getParameter("name");
String pass = request.getParameter("pass");
String globalname = "webeng";
String globalpass = "2009";
if (name ==null || pass==null || name.equals("") || pass.equals("")) {
// You can use StringUtils.isBlank here instead if you have it available to you
%>
<hr />
<p><b>Ooops, one or more fields are empty. Please fill everything out!!</b></p>
<hr />
<% } else if (name.equalsIgnoreCase(globalname) && pass.equalsIgnoreCase(globalpass))
{
%>
<hr />
<p><b>Howdy, <%= request.getParameter("name") %></b></p>
<hr />
<% } else {
%>
<hr />
<p><b>Incorrect Userdata!</b></p>
<hr />
}
%>