Java JSP:为什么这个条件有效?
我是公认的JSP(和Java)新手。我有这样一段代码:Java JSP:为什么这个条件有效?,java,jsp,Java,Jsp,我是公认的JSP(和Java)新手。我有这样一段代码: String pageMessageStart = "<div id=\"messageBox\" class=\"center\">"; String pageMessage = ""; String pageMessageEnd = "</div>"; if(request.getParameter("message") != null) { pageMessage = pageMessageStart;
String pageMessageStart = "<div id=\"messageBox\" class=\"center\">";
String pageMessage = "";
String pageMessageEnd = "</div>";
if(request.getParameter("message") != null) {
pageMessage = pageMessageStart;
/* Certain messages will come in as an alias. Let's make user-friendly messages with them */
if(request.getParameter("message").equals("invalidsession"))
pageMessage += "Session expired; you have been automatically logged out.";
else if(request.getParameter("message").equals("NOCOOKIE"))
pageMessage += "No valid cookie found; you must have cookies enabled to use this application.";
else if(request.getParameter("message").equals("invalidcredentials"))
pageMessage += "Incorrect username and/or password.";
else if(request.getParameter("message").equals("LICENSE_CHANGED"))
pageMessage += "Your license key has been successfully applied.";
else
/* If there is no alias but there is still a message, let's just display it verbatim */
pageMessage += request.getParameter("message");
pageMessage += pageMessageEnd;
};
在我有限的理解下,我只能猜测当该参数为null时,没有字符串,并且.equals()是字符串的比较方法。我在寻找正匹配时使用了一个方法,但在寻找负匹配时使用了一个操作符,这似乎有点不同。我担心我使用的是错误的做法。能够在方法上调用
equals()
,需要引用不是空的。否则会导致NullPointerException
(这仅仅是因为null
没有引用/指向任何具有equals()
方法的内容)。因此,obj!=空
而不是obj.equals(空)
测试
Object object = null;
if (object.equals(null)) { // NullPointerException! object is null.
// ...
}
那是使用=
或==
被您解释为一种“坏习惯”,可能是因为您不应该通过这些运算符比较字符串的内容,而应该通过equals()
进行比较。通过=
比较字符串
s,仅当它们都指向相同的引用时才会进行比较,而不是当它们都具有相同的内容(内部对象值)时才会进行比较
String
s即是对象,而不是原语。=
和==
只会给出诸如int、
long`等原语的预期结果
顺便说一下,这与JSP无关。它只是基本的Java。在JSP文件而不是Java类中错误地编写Java代码,并且Java代码出现问题并不意味着它是JSP问题。在普通Java类中执行此操作时,您会遇到完全相同的问题。要能够在方法上调用equals()
,需要引用不是null
。否则会导致NullPointerException
(这仅仅是因为null
没有引用/指向任何具有equals()
方法的内容)。因此,obj!=空
而不是obj.equals(空)
测试
Object object = null;
if (object.equals(null)) { // NullPointerException! object is null.
// ...
}
那是使用=
或==
被您解释为一种“坏习惯”,可能是因为您不应该通过这些运算符比较字符串的内容,而应该通过equals()
进行比较。通过=
比较字符串
s,仅当它们都指向相同的引用时才会进行比较,而不是当它们都具有相同的内容(内部对象值)时才会进行比较
String
s即是对象,而不是原语。=
和==
只会给出诸如int、
long`等原语的预期结果
顺便说一下,这与JSP无关。它只是基本的Java。在JSP文件而不是Java类中错误地编写Java代码,并且Java代码出现问题并不意味着它是JSP问题。在普通Java类中执行此操作时,您会遇到完全相同的问题
这看起来像纯Java。您真的在JSP中嵌入了这个巨大的脚本吗?如果是这样,那就太难看了
request.getParameter(“message”)
如果web请求不包含message
参数,则返回空值。null
值不是字符串。您需要了解通过==
比较对象是否相等与通过equals()比较对象值之间的区别
那个switch语句也很难看。您应该通过fmt:message
标记从属性文件中获取这些字符串。通过将“message”参数附加到某个前缀来生成消息键:
您可以将JSP中的所有代码减少到大约五行:
<c:if test="${message}">
<div id="messageBox" class="center">
<fmt:message key="error.${message}">
</div>
</c:if>
然后在CSS中:
.error-message { text-align: center; margin: 1em; border: 1px solid red; }
然后,如果您决定不希望将消息文本居中,则无需更改几十个JSP即可从消息框中删除“center”类。错误消息将始终是错误消息,但它可能并不总是居中
这看起来像纯Java。您真的在JSP中嵌入了这个巨大的脚本吗?如果是这样,那就太难看了
request.getParameter(“message”)
如果web请求不包含message
参数,则返回空值。null
值不是字符串。您需要了解通过==
比较对象是否相等与通过equals()比较对象值之间的区别
那个switch语句也很难看。您应该通过fmt:message
标记从属性文件中获取这些字符串。通过将“message”参数附加到某个前缀来生成消息键:
您可以将JSP中的所有代码减少到大约五行:
<c:if test="${message}">
<div id="messageBox" class="center">
<fmt:message key="error.${message}">
</div>
</c:if>
然后在CSS中:
.error-message { text-align: center; margin: 1em; border: 1px solid red; }
然后,如果您决定不希望将消息文本居中,则无需更改几十个JSP即可从消息框中删除“center”类。错误消息将始终是错误消息,但它可能不总是居中。同意;“(和Java)”可能没有足够强调这一点。因为我只是在JSP上下文中编写Java,这影响了标题和标记。非常感谢您花时间澄清;我知道这是一个基本问题,几乎不值得你花时间如果您不介意的话,还有一个问题:如果稍后我对查询字符串中的另一个参数进行了条件检查,但这次是在寻找正匹配,那么首先检查参数是否存在是否是一种好的做法?毕竟,如果没有参数,条件仍然会(正确地)失败,因此额外的检查似乎是多余的。您应该始终通过测试null
来检查参数是否存在。永远不要相信用户输入,并期望始终提供参数。HTTP请求很容易被黑客攻击/t