【问题标题】:"Form" - If-else Statements"Form" - If-else 语句
【发布时间】:2009-11-15 17:06:14
【问题描述】:

我正在尝试实现一个简单的形式:

有一个 globalname 和 globalpass,用户被要求输入他的名字并通过。

If name == globalname and pass = globalpass -> "Hello name"
If name == blank or pass == blank -> "O NOEZ, you fergit sumpn!"
If name != globalname or pass != globalpass -> "WHUT? Who be you, intruder?"

到目前为止,我只设法获得了第一个 if-working...

<% 
  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))
   {
%>
    <jsp:include page="formular-modul1.jsp" />
<% } else
   {
%>
<% }
%>

<%
 else if (name =="b" && pass =="c" && name.equals("b") && pass.equals("c"))
  {
%>
    <jsp:include page="formular-modul2.jsp" />
<%} else
    {
%>
<%
}%>

name=="b" && pass =="c" 只是为了测试,失败了!有人可以帮帮我吗?

【问题讨论】:

标签: java jsp


【解决方案1】:

字符串是对象,而不是原语。当使用== 比较对象时,只有当两者都指向同一个reference 时才会返回true。它不测试对象的值。你已经有Object#equals() 了。

除了这个问题,在 JSP 文件中使用那些老式的小脚本是一种不好的做法。在这种特定情况下,您最好为此使用 Servlet 类。祝你好运。

【讨论】:

  • 我刚开始使用 JSP。当我谈到它时,我将使用 Servlets。现在我必须使用 Scriptlets。即使使用 if (name.equals("b") && pass.equals("c")) 它也不起作用!
  • 当您使用丑陋的 scriptlet 并且您没有详细说明实际问题时,很难发现错误。 “它不工作”基本上没有给我们任何工作。我建议创建一个执行该任务的 Java 类并使用 main() 对其进行测试。或者,您可以花更多精力来详细说明问题,并说明代码级别实际发生的情况(包括异常/错误)。
  • 哦,别忘了阅读应用服务器日志。当您使用 scriptlet 时,您不会在页面上看到任何带有有用调试信息的异常,而只会在失败的情况下看到一个空白的无内容页面。我在NullPointerException 上的美分。
【解决方案2】:

现在可以使用了。

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

现在我需要使用 .toLowercase。

意味着名称和密码必须转换为 .toLowercases 然后使用。有人知道吗?只需使用 newname = name.toLowercase();或 newpass = pass.toLowercase();没用!

【讨论】:

  • String 类有一个equalsIgnoreCase() 方法。猜猜它的作用:)
  • 顺便说一句,我真的不会认为“PaSsWoRd”和“密码”是平等的。
  • 我也不会。这个 .jsp 不认为“密码”和“PaSsWoRd”是相等的。如果 globalpassword 是密码,那么 PaSsWoRd 返回“不正确的用户数据!”
  • String#toLowercase() 产生一个新字符串。因为字符串是不可变的。如果您将.toLowercase() 分配给新变量,它应该可以正常工作。在上面的代码中,您使用| 运算符,它们是按位或并且不缩短条件评估。您正在寻找的是 || 逻辑 OR 运算符。
  • 那么pass.toLowercase() 有什么意义呢?只是不要那样做。顺便说一句,如果你仍然有问题,你真的,真的需要详细说明“不起作用!”在更多详细信息。
猜你喜欢
  • 2019-04-09
  • 2017-02-05
  • 2015-07-06
  • 2012-08-05
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多