다음 코드를 사용하여 브라우저에 사용자 이름을 인쇄하고 있습니다:
<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 코드가 표시되지만 실행 시 첫 번째 메시지가 표시되지 않기를 원합니다. 어떻게 해야 하나요? 내 코드의 변경 사항을 제안해 주세요.
추신 : 어떤 질문에서 널과 같음을 확인하는 대신 같지 않은지 확인해야 널 포인터 예외가 발생하지 않는다는 것을 읽었습니다. 내가 똑같이 시도했을 때, 즉 if(user != null && ..)
, NullPointerException
이 발생했습니다.
JSP에서 스크립트를 사용하지 않는 것이 거의 항상 권장됩니다. 스크립트는 나쁜 형식으로 간주됩니다. 대신, 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" %>
사용자가 사용자 아이디를 제출할 때 메시지를 받도록 만들고 싶습니다. 가장 쉬운 방법은 <사용자> 매개변수가 'null'일 때 메시지를 전혀 인쇄하지 않는 것입니다. 사용자가 null
을 제출할 때 오류 메시지를 표시하도록 일부 유효성 검사를 수행할 수 있습니다. 이것은 문제에 대한 보다 표준적인 접근 방식입니다. 이를 수행하려면
스크립트에서
<% String user = request.getParameter("user");
if( user != null && user.length() > 0 ) {
<%@ include file="response.jsp" %>
}
%>
In jstl:
<c:if test="${not empty user}">
<%@ include file="response.jsp" %>
</c:if>