我使用以下代码在浏览器上打印用户名:
<body>
<form>
<h1>Hello! I'm duke! What's you name?</h1>
<input type="text" name="user"><br><br>
<input type="submit" value="submit">
<input type="reset">
</form>
<%String user=request.getParameter("user"); %>
<%if(user == null || user.length() == 0){
out.print("I see! You don't have a name.. well.. Hello no name");
}
else {%>
<%@ include file="response.jsp" %>
<% } %>
</body>
的response.jsp:
<body>
<h1>Hello</h1>
<%= request.getParameter("user") %>
body>
每次执行时,都会显示消息
即使我没有在文本框中输入任何内容,也会显示我明白了!你没有名字..好吧..你好,没有名字
。但是,如果我在其中输入任何内容,则会显示response.jsp代码,但我不希望在执行时显示第一条消息。我该如何做到这一点?请修改我的代码。
P.S。我在一些问题中读过,不是用null来检查是否相等,而是必须检查它是否为等于,这样它就不会抛出空指针异常。当我尝试相同的时候,即if(user != null && ..)
,我得到了NullPointerException
。
答案 0 :(得分:16)
几乎总是建议不要在JSP中使用scriptlet。他们被认为是糟糕的形式。相反,尝试使用JSTL(JSP标准标记库)结合EL(表达式语言)来运行您尝试执行的条件逻辑。作为额外的好处,JSTL还包括其他重要功能,如循环。
而不是:
<%String user=request.getParameter("user"); %>
<%if(user == null || user.length() == 0){
out.print("I see! You don't have a name.. well.. Hello no name");
}
else {%>
<%@ include file="response.jsp" %>
<% } %>
使用:
<c:choose>
<c:when test="${empty user}">
I see! You don't have a name.. well.. Hello no name
</c:when>
<c:otherwise>
<%@ include file="response.jsp" %>
</c:otherwise>
</c:choose>
此外,除非您计划在代码中的其他位置使用response.jsp,否则在您的其他语句中包含html可能更容易:
<c:otherwise>
<h1>Hello</h1>
${user}
</c:otherwise>
另外值得注意。要使用核心标记,必须按如下方式导入:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
您希望这样做,以便用户在用户提交用户名时收到消息。最简单的方法是在&#34; user&#34;时不打印消息。 param是null
。当用户提交null
时,您可以进行一些验证以提供错误消息。这是解决问题的更标准方法。要做到这一点:
在scriptlet中:
<% String user = request.getParameter("user");
if( user != null && user.length() > 0 ) {
<%@ include file="response.jsp" %>
}
%>
在jstl:
<c:if test="${not empty user}">
<%@ include file="response.jsp" %>
</c:if>
答案 1 :(得分:1)
如果在两种情况下都使用if-else条件而不是if。它将以这种方式工作但不确定原因。
答案 2 :(得分:0)
您可以尝试这个例子:
<form>
<h1>Hello! I'm duke! What's you name?</h1>
<input type="text" name="user">
<br>
<br>
<input type="submit" value="submit">
<input type="reset">
</form>
<h1>Hello ${param.user}</h1>
<!-- its Expression Language -->