我正在使用以下代码在浏览器上打印用户名: body form h1Hello! I'm duke! What's you name?/h1 input type="text" name="user"brbr input type="submit" value="submit"nbsp;nbsp;nbsp;nbsp; input type="reset" /form %String user=req
<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>
每次我执行它,消息
I see! You don’t have a name.. well.. Hello no name
即使我没有在文本框中输入任何内容,也会显示.但是,如果我在其中输入任何内容,则会显示response.jsp代码,但我不希望在执行时显示第一条消息.我该如何做到这一点?请修改我的代码.
附:我曾在一些问题中读到,不是检查与null的相等性,而是必须检查它是否为等于,以便它不会抛出空指针异常.当我尝试相同的,即if(user!= null&& ..)时,我得到了NullPointerException.
几乎总是建议不在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" %>
您希望这样做,以便用户在用户提交用户名时收到消息.最简单的方法是在“user”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>