2009-11-15 4 views
1

내가 가진 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(); 

가 작동하지 않습니다. 아무 생각 없어요?

이 내가

<% 
     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{ 
     } 
    %> 

이클립스 사용하면 이클립스는 저에게 말한다 무엇 : http://i.imagehost.org/0277/2009-11-15_19_34_00.png

+0

일시적으로 newname 및 newpass의 내용을 페이지에 표시하면 어떻게됩니까? –

+0

다시는 당신의 아무 말도하지 않는 "작동하지 않습니다.". 실제로 실제로 어떻게됩니까? 코드를 디버깅 한 적이 있습니까? 그것을 확인하기 위해'System.out.println (newname)'을 추가 했습니까? – BalusC

답변

0

당신은 compareToIgnoreCase를 사용하고 변환을 직접 할 필요가 없습니다.

+0

나는 toLowerCase()를 사용해야한다. –

+0

'equalsIgnoreCase()'는 어떻습니까? 그것은 당신이 원하는 것을 완벽하게합니다. – BalusC

+0

다시 말해서, 나는 toLowerCase()를 사용해야합니다. –

5

코드 논리가 이상합니다. 스크립틀릿은 테스트를 더 쉽게 만듭니다. 이 도움이

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."); 
     } 
    } 

} 

희망 : 여기에 킥오프 및 테스트를 용이하게하기 위해 실제 Java 클래스의 맛에 SSCCE을합니다.

편집 # 1 : 스크린 샷을 게시하지 마십시오. 예외 및 스택 추적을 코드 블록에 복사합니다. 예외는 Eclipse에서 오지 않는 것입니다. 그것은 Tomcat에서오고 있습니다. 또한 문제의 예외 (NullPointerException)는 매우 자명하다. 실제로 null 인 객체 참조에 액세스했습니다.

SomeObject someObject = null; 
someObject.doSomething(); // Fails with NPE. 
someObject = new SomeObject(); 
someObject.doSomething(); // Succes. 

먼저 Null 검사를 수행해야합니다.

if (someObject != null) { 
    someObject.doSomething(); // Succes. 
} 

편집 # 2 나는 또한 자바로 그룹화 연산자 연산자 우선 순위와 표현에 대해 배울 것이 좋습니다. http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html 행운을 빕니다 : 다음은

if (name !=null | pass!=null && name.equals("") | pass.equals("")) 

여기 이것에 대해 배울 수와 함께 시작하는 좋은 자습서의 "논리적"아니다, 참조하십시오.

+0

이 작업과 수행중인 작업 사이의 미묘한 차이점에 유의하십시오. 이름에 문자열 메서드를 사용하기 전에 null을 확인해야합니다. 코드에서 이름이 null이 아닌지 확인하기 전에 LowCase()를 호출하려고합니다. – unholysampler

0

당신이 사용하는 것 같습니다 | 대신에 || . 그게 의도적 인거야?

+0

네, 왜냐하면 내가 사용하기 때문에 : (name == null || pass == null || name.equals ("") || pass.equals ("")), 나는

을 얻을 것이다. 더 많은 필드가 비어 있습니다. 모든 것을 작성하십시오 !!

나는 페이지를로드 할 때 의도적 인 것이 아닙니다. 1 또는 두 필드를 모두 비워두고 "보내기"버튼을 누른 후에 나타납니다. –

0

여기는 IgnoreCase와 동일합니다. | 연산자를 사용하여 단축키를 사용하고 싶지 않으면 일반적으로 ||을 사용하는 것이 더 안전합니다. 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 /> 
} 
%> 
+0

'java.lang.String'은 isEmpty() 메소드를 가지고 있습니다. 공백도 감추고 싶으면'name.trim(). isEmpty()'를 실행하십시오. – BalusC

+0

isEmpty는 Java 6에서 소개 되었기 때문에 많은 사람들이 나를 포함하여 5 가지를 사용하고 있다고 생각하기 때문에 새로운 방법을 언급해야합니다. – medopal

관련 문제