Saya menggunakan kode berikut untuk mencetak nama pengguna di browser:
<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>
Setiap kali saya mengeksekusinya, pesan
Saya mengerti! Anda tidak punya nama... yah... Halo, tidak ada nama
ditampilkan meskipun saya belum memasukkan apa pun di kotak teks. Namun jika saya memasukkan apapun di dalamnya, maka kode response.jsp akan ditampilkan, tapi saya tidak ingin pesan pertama ditampilkan saat eksekusi. Bagaimana saya membuat hal itu terjadi? Tolong sarankan perubahan dalam kode saya.
P.S. Saya telah membaca di beberapa pertanyaan bahwa alih-alih memeriksa kesetaraan dengan null, seseorang harus memeriksanya untuk tidak sama dengan, sehingga tidak' tidak melempar pengecualian pointer null. ketika saya mencoba hal yang sama, yaitu if(user != null && ...)
, saya mendapat NullPointerException
.
Hampir selalu disarankan untuk tidak menggunakan scriptlet di JSP Anda. Mereka dianggap bentuk yang buruk. Sebagai gantinya, cobalah menggunakan JSTL (JSP Standard Tag Library) yang dikombinasikan dengan EL (Expression Language) untuk menjalankan logika kondisional yang Anda coba lakukan. Sebagai manfaat tambahan, JSTL juga menyertakan fitur-fitur penting lainnya seperti looping.
Bukannya:
<%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" %>
<% } %>
Gunakan:
<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>
Selain itu, kecuali Anda berencana menggunakan response.jsp di tempat lain dalam kode Anda, mungkin lebih mudah untuk hanya menyertakan html dalam pernyataan sebaliknya:
<c:otherwise>
<h1>Hello</h1>
${user}
</c:otherwise>
Juga perlu diperhatikan. Untuk menggunakan tag core, Anda harus mengimpornya sebagai berikut:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Anda ingin membuatnya sehingga pengguna akan menerima pesan ketika pengguna mengirimkan nama pengguna. Cara termudah untuk melakukan ini adalah dengan tidak mencetak pesan sama sekali ketika param "user" adalah null
. Anda dapat melakukan validasi untuk memberikan pesan kesalahan ketika pengguna mengirimkan null
. Ini adalah pendekatan yang lebih standar untuk masalah Anda. Untuk mencapai hal ini:
Dalam scriptlet:
<% String user = request.getParameter("user");
if( user != null && user.length() > 0 ) {
<%@ include file="response.jsp" %>
}
%>
Di jstl:
<c:if test="${not empty user}">
<%@ include file="response.jsp" %>
</c:if>
Anda bisa mencoba contoh ini:
<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 -->