Kullanıcının adını tarayıcıya yazdırmak için aşağıdaki kodu kullanıyorum:
<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>
Her çalıştırdığımda şu mesaj çıkıyor
Anlıyorum! Senin bir adın yok. Merhaba, isim yok.
metin kutusuna hiçbir şey girmemiş olmama rağmen görüntüleniyor. Ancak içine bir şey girersem, response.jsp kodu görüntüleniyor, ancak yürütme sırasında ilk mesajın görüntülenmesini istemiyorum. Bunu nasıl gerçekleştirebilirim? Lütfen kodumda değişiklik önerin.
Not: Bazı sorularda null ile eşitlik kontrolü yapmak yerine, null pointer istisnası atmaması için eşit değil kontrolü yapılması gerektiğini okumuştum. aynısını denediğimde, yani if(user != null && ..)
, NullPointerException
aldım.
JSP'nizde scriptlet kullanmamanız neredeyse her zaman tavsiye edilir. Bunlar kötü biçim olarak kabul edilir. Bunun yerine, yapmaya çalıştığınız koşullu mantığı çalıştırmak için EL (Expression Language) ile birlikte JSTL (JSP Standard Tag Library) kullanmayı deneyin. Ek bir fayda olarak, JSTL döngü gibi diğer önemli özellikleri de içerir.
Onun yerine:
<%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" %>
<% } %>
Kullan:
<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>
Ayrıca, kodunuzda başka bir yerde response.jsp kullanmayı planlamıyorsanız, html'yi aksi takdirde ifadenize dahil etmek daha kolay olabilir:
<c:otherwise>
<h1>Hello</h1>
${user}
</c:otherwise>
Ayrıca not. Çekirdek etiketini kullanmak için aşağıdaki şekilde içe aktarmanız gerekir:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Kullanıcı bir kullanıcı adı gönderdiğinde kullanıcının bir mesaj almasını sağlamak istiyorsunuz. Bunu yapmanın en kolay yolu, "user" parametresi null
olduğunda hiç mesaj yazdırmamaktır. Kullanıcı null
gönderdiğinde bir hata mesajı vermek için bazı doğrulamalar yapabilirsiniz. Bu, sorununuza daha standart bir yaklaşımdır. Bunu başarmak için:
Scriptlet içinde:
<% String user = request.getParameter("user");
if( user != null && user.length() > 0 ) {
<%@ include file="response.jsp" %>
}
%>
Jstl'de:
<c:if test="${not empty user}">
<%@ include file="response.jsp" %>
</c:if>
Bu örneği deneyebilirsiniz:
<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 -->