Saya baru saja mulai belajar teknologi JSP, dan menemukan sebuah tembok.
Bagaimana Anda mengeluarkan HTML dari sebuah metode dalam blok deklarasi JSP <%! ...%> blok deklarasi JSP?
Ini tidak berhasil:
<%!
void someOutput() {
out.println("Some Output");
}
%>
...
<% someOutput(); %>
Server mengatakan tidak ada ' tidak ada ' ldquo; keluar & rdquo;.
U: Saya tahu bagaimana menulis ulang kode dengan metode ini mengembalikan string, tetapi apakah ada cara untuk melakukan ini di dalam <%! void () { } %> ? Meskipun mungkin tidak optimal, ini masih menarik.
Anda tidak dapat menggunakan variabel (atau variabel lain yang telah dideklarasikan sebelumnya) di dalam direktif.
Halaman JSP akan diterjemahkan oleh webserver Anda ke dalam servlet Java. Di dalam tomcat, misalnya, semua yang ada di dalam scriptlet (yang dimulai "<%"), bersama dengan semua HTML statis, diterjemahkan ke dalam satu metode Java raksasa yang menulis halaman Anda, baris demi baris, ke instance JspWriter yang disebut "out". Inilah sebabnya mengapa Anda dapat menggunakan parameter "out" secara langsung di scriptlets. Di sisi lain, arahan (yang dimulai dengan "<%!") diterjemahkan sebagai metode Java yang terpisah.
Sebagai contoh, halaman yang sangat sederhana (sebut saja foo.jsp):
<html>
<head/>
<body>
<%!
String someOutput() {
return "Some output";
}
%>
<% someOutput(); %>
</body>
</html>
akan berakhir dengan tampilan seperti ini (dengan banyak detail yang diabaikan untuk kejelasan):
public final class foo_jsp
{
// This is where the request comes in
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
// JspWriter instance is gotten from a factory
// This is why you can use 'out' directly in scriptlets
JspWriter out = ...;
// Snip
out.write("<html>");
out.write("<head/>");
out.write("<body>");
out.write(someOutput()); // i.e. write the results of the method call
out.write("</body>");
out.write("</html>");
}
// Directive gets translated as separate method - note
// there is no 'out' variable declared in scope
private String someOutput()
{
return "Some output";
}
}
Yang perlu Anda lakukan adalah mengoper objek JspWriter ke dalam metode Anda sebagai parameter, yaitu
void someOutput(JspWriter stream)
Kemudian panggil melalui:
<% someOutput(out) %>
Objek penulis adalah variabel lokal di dalam _jspService sehingga Anda harus memasukkannya ke dalam metode utilitas Anda. Hal yang sama akan berlaku untuk semua referensi bawaan lainnya (misalnya permintaan, respons, sesi).
Cara yang bagus untuk melihat apa yang terjadi adalah dengan menggunakan Tomcat sebagai server Anda dan menelusuri direktori ' work ' untuk file '.java ' yang dihasilkan dari ' jsp ' halaman Anda. Atau di weblogic Anda dapat menggunakan 'weblogic.jspc' kompiler halaman untuk melihat Java yang akan dihasilkan ketika halaman diminta.