问题
I've got an index.jsp with
[snip]
<%
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{
}
%>
[snip]
Now, the globalname for example is in lowercase "webeng". Folks may type in "WebEng", "webENG", "WEBENG" and variations thereof.
I need those typed in Strings converted to lowercase. Somehow
String newname = name.toLowerCase();
String newpass = pass.toLowerCase();
is not working. Anybody got any idea?
This is what Eclipse tells me when I use
<%
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{
}
%>
Eclipse: http://i.imagehost.org/0277/2009-11-15_19_34_00.png
回答1:
Your code logic is odd. Scriptlets also doesn't make testing more easy. Here's an SSCCE in flavor of a real Java class to kickoff and ease testing:
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.");
}
}
}
Hope this helps.
Edit #1: please do not post screenshots. Copypaste the exception and stacktrace in code blocks. The exception is by the way not coming from Eclipse. It's coming from Tomcat. Also, the exception in question (NullPointerException) is fairly self-explaining. You accessed an object reference which is actually null.
SomeObject someObject = null;
someObject.doSomething(); // Fails with NPE.
someObject = new SomeObject();
someObject.doSomething(); // Succes.
You need to do a null-check first, e.g.
if (someObject != null) {
someObject.doSomething(); // Succes.
}
Edit #2 I also recommend you to learn about operators, operator precedence and expression grouping in Java. See, the following isn't "logical"
if (name !=null | pass!=null && name.equals("") | pass.equals(""))
Here's a good tutorial to start with to learn about this: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html Good luck.
回答2:
You can use compareToIgnoreCase and you don't have to do the conversion yourself.
回答3:
You seem to use | in stead of || . Is that intentional?
回答4:
Here it is with equalsIgnoreCase. Unless you really don't want to shortcut the or with the |
operator it's generally safer to go with ||
. I also prefer not to fall through to success as in BalusC's answer, there is something unsettling about the default condition being to "login" the user.
<%
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 />
}
%>
来源:https://stackoverflow.com/questions/1738294/convert-typed-in-text-to-lowercase