Bahasa Ungkapan JSP
Bahasa Ungkapan JSP (EL) menjadikan akses data yang disimpan dalam JavaBeans sangat mudah. JSP EL boleh digunakan untuk mencipta kedua-dua ungkapan aritmetik dan logik. Integer, nombor titik terapung, rentetan, pemalar benar, salah dan nol boleh digunakan dalam ungkapan EL JSP.
Sintaks ringkas
Biasanya, apabila anda perlu menentukan nilai atribut dalam teg JSP, anda hanya menggunakan rentetan:
<jsp:setProperty name="box" property="perimeter" value="100"/>
JSP EL membolehkan anda menentukan formula ungkapan untuk mewakili nilai atribut . Sintaks ungkapan mudah adalah seperti berikut:
${expr}
di mana expr merujuk kepada ungkapan. Pengendali biasa dalam JSP EL ialah "." dan "[]". Kedua-dua pengendali ini membenarkan anda mengakses pelbagai sifat JavaBean melalui objek JSP terbenam.
Sebagai contoh, teg <jsp:setProperty> di atas boleh ditulis semula seperti berikut menggunakan bahasa ungkapan:
<jsp:setProperty name="box" property="perimeter" value="${2*box.width+2*box.height}"/>
Apabila pengkompil JSP melihat "${}" dalam sifat Selepas pemformatan, ia menjana kod untuk menilai ungkapan dan menghasilkan pengganti untuk nilai ungkapan.
Anda juga boleh menggunakan bahasa ungkapan dalam teks templat tag. Sebagai contoh, teg <jsp:text> hanya memasukkan teks dalam kandungannya ke dalam output JSP:
<jsp:text> <h1>Hello JSP!</h1> </jsp:text>
Sekarang, gunakan ungkapan dalam badan teg <jsp:text> :
<jsp:text> Box Perimeter is: ${2*box.width + 2*box.height} </jsp:text>
Anda boleh menggunakan kurungan untuk menyusun subungkapan dalam ungkapan EL. Contohnya, ${(1 + 2) * 3} bersamaan dengan 9, tetapi ${1 + (2 * 3)} bersamaan dengan 7.
Jika anda ingin melumpuhkan penilaian ungkapan EL, anda perlu menggunakan arahan halaman untuk menetapkan nilai atribut isELIgnored kepada benar:
<%@ page isELIgnored ="true|false" %>
Dengan cara ini, ungkapan EL akan diabaikan . Jika ditetapkan kepada palsu, bekas akan menilai ungkapan EL.
Operator asas dalam EL
ungkapan EL menyokong kebanyakan operator aritmetik dan logik yang disediakan oleh Java:
Operator | Penerangan |
---|---|
. | Akses sifat Bean atau entri pemetaan |
[] | Akses elemen tatasusunan atau senarai terpaut |
( ) | Susun subungkapan untuk menukar keutamaan |
+ | Tambah |
- | Tolak atau negatif |
* | Darabkan |
/ atau div | Kecuali |
% atau mod | Modulo |
== atau persamaan | Ujian untuk kesaksamaan |
!= atau tidak | Uji sama ada ia tidak sama |
< atau lt | Uji sama ada ia kurang daripada |
> atau gt | Uji sama ada ia lebih besar daripada |
<= atau le | Uji sama ada kurang daripada atau sama dengan |
>= atau ge | Uji sama ada ia lebih besar daripada atau sama dengan |
&& atau dan | Uji logik dan |
||. atau atau | Uji logik atau |
atau tidak | Ujian penolakan |
kosong | Uji nilai nol |
Fungsi dalam JSP EL
JSP EL membolehkan anda menggunakan fungsi dalam ungkapan. Fungsi ini mesti ditakrifkan dalam pustaka teg tersuai. Sintaks untuk menggunakan fungsi adalah seperti berikut:
${ns:func(param1, param2, ...)}
ns merujuk kepada ruang nama, func merujuk kepada nama fungsi, param1 merujuk kepada parameter pertama, param2 merujuk kepada parameter kedua dan seterusnya. Sebagai contoh, terdapat fungsi fn:length, yang ditakrifkan dalam pustaka JSTL, yang boleh digunakan untuk mendapatkan panjang rentetan seperti berikut:
${fn:length("Get my length")}
Untuk menggunakan fungsi dalam mana-mana perpustakaan teg, anda perlu pasang perpustakaan ini pada pelayan , dan kemudian masukkan perpustakaan ini dalam fail JSP menggunakan teg <taglib>
Objek tersirat JSP EL
JSP EL menyokong objek tersirat yang disenaraikan dalam jadual berikut:
隐含对象 | 描述 |
---|---|
pageScope | page 作用域 |
requestScope | request 作用域 |
sessionScope | session 作用域 |
applicationScope | application 作用域 |
param | Request 对象的参数,字符串 |
paramValues | Request对象的参数,字符串集合 |
header | HTTP 信息头,字符串 |
headerValues | HTTP 信息头,字符串集合 |
initParam | 上下文初始化参数 |
cookie | Cookie值 |
pageContext | 当前页面的pageContext |
Anda boleh menggunakan objek ini dalam ungkapan sama seperti pembolehubah. Seterusnya, beberapa contoh akan diberikan untuk lebih memahami konsep ini.
Objek pageContext
Objek pageContext ialah rujukan kepada objek pageContext dalam JSP. Melalui objek pageContext, anda boleh mengakses objek permintaan. Sebagai contoh, akses rentetan pertanyaan yang diluluskan dalam objek permintaan, seperti ini:
${pageContext.request.queryString}
Objek skop
pembolehubah pageScope, requestScope, sessionScope dan applicationScope digunakan untuk mengakses pembolehubah yang disimpan pada setiap peringkat skop.
Sebagai contoh, jika anda perlu mengakses pembolehubah kotak secara eksplisit dalam lapisan applicationScope, anda boleh mengaksesnya seperti ini: applicationScope.box.
objek param dan paramValues
objek param dan paramValues digunakan untuk mengakses nilai parameter dengan menggunakan kaedah request.getParameter dan kaedah request.getParameterValues.
Sebagai contoh, untuk mengakses parameter bernama tertib, anda boleh menggunakan ungkapan: ${param.order}, atau ${param["order"]}.
Contoh berikut menunjukkan cara mengakses parameter nama pengguna dalam permintaan:
<%@ page import="java.io.*,java.util.*" %> <% String title = "Accessing Request Param"; %> <html> <head> <title><% out.print(title); %></title> </head> <body> <center> <h1><% out.print(title); %></h1> </center> <div align="center"> <p>${param["username"]}</p> </div> </body> </html>
Objek param mengembalikan rentetan tunggal, manakala objek paramValues mengembalikan tatasusunan rentetan.
header dan headerValues objek
Objek header dan headerValues digunakan untuk mengakses pengepala maklumat dengan menggunakan kaedah request.getHeader dan kaedah request.getHeaders.
Sebagai contoh, untuk mengakses pengepala maklumat bernama ejen pengguna, anda boleh menggunakan ungkapan: ${header.user-agent}, atau ${header["user-agent"]}.
Contoh berikut menunjukkan cara mengakses pengepala maklumat ejen pengguna:
<%@ page import="java.io.*,java.util.*" %> <% String title = "User Agent Example"; %> <html> <head> <title><% out.print(title); %></title> </head> <body> <center> <h1><% out.print(title); %></h1> </center> <div align="center"> <p>${header["user-agent"]}</p> </div> </body> </html>
Keputusan yang dijalankan adalah seperti berikut:
The objek header mengembalikan satu nilai, manakala headerValues mengembalikan tatasusunan rentetan.