Servlets - Panduan Cepat
Apa itu Servlets?
Java Servlet adalah program yang berjalan di server Web atau Aplikasi dan bertindak sebagai lapisan tengah antara permintaan yang datang dari browser Web atau klien HTTP lain dan database atau aplikasi di server HTTP.
Menggunakan Servlet, Anda dapat mengumpulkan masukan dari pengguna melalui formulir halaman web, menyajikan catatan dari database atau sumber lain, dan membuat halaman web secara dinamis.
Java Servlet sering melayani tujuan yang sama seperti program yang diimplementasikan menggunakan Common Gateway Interface (CGI). Tetapi Servlets menawarkan beberapa keunggulan dibandingkan dengan CGI.
Performa jauh lebih baik.
Servlet dieksekusi dalam ruang alamat server Web. Tidak perlu membuat proses terpisah untuk menangani setiap permintaan klien.
Servlet tidak tergantung platform karena dibuat di Java.
Manajer keamanan Java di server memberlakukan serangkaian batasan untuk melindungi sumber daya di mesin server. Jadi servlet dipercaya.
Fungsionalitas penuh dari perpustakaan kelas Java tersedia untuk servlet. Itu dapat berkomunikasi dengan applet, database, atau perangkat lunak lain melalui soket dan mekanisme RMI yang telah Anda lihat.
Arsitektur Servlets
Diagram berikut menunjukkan posisi Servlet di Aplikasi Web.
Tugas Servlets
Servlet melakukan tugas utama berikut -
Baca data eksplisit yang dikirim oleh klien (browser). Ini termasuk formulir HTML di halaman Web atau bisa juga berasal dari applet atau program klien HTTP kustom.
Baca data permintaan HTTP implisit yang dikirim oleh klien (browser). Ini termasuk cookie, jenis media, dan skema kompresi yang dipahami browser, dan sebagainya.
Memproses data dan menghasilkan hasilnya. Proses ini mungkin memerlukan berbicara dengan database, menjalankan panggilan RMI atau CORBA, menjalankan layanan Web, atau menghitung respons secara langsung.
Mengirim data eksplisit (yaitu, dokumen) ke klien (browser). Dokumen ini dapat dikirim dalam berbagai format, termasuk teks (HTML atau XML), biner (gambar GIF), Excel, dll.
Kirim respons HTTP implisit ke klien (browser). Ini termasuk memberi tahu browser atau klien lain jenis dokumen apa yang dikembalikan (mis., HTML), menyetel cookie dan parameter cache, dan tugas serupa lainnya.
Paket Servlet
Java Servlet adalah kelas Java yang dijalankan oleh server web yang memiliki interpreter yang mendukung spesifikasi Java Servlet.
Servlet dapat dibuat menggunakan javax.servlet dan javax.servlet.http package, yang merupakan bagian standar dari edisi perusahaan Java, versi pustaka kelas Java yang diperluas yang mendukung proyek pengembangan skala besar.
Kelas-kelas ini mengimplementasikan spesifikasi Java Servlet dan JSP. Pada saat penulisan tutorial ini, versinya adalah Java Servlet 2.5 dan JSP 2.1.
Servlet Java telah dibuat dan dikompilasi seperti kelas Java lainnya. Setelah Anda menginstal paket servlet dan menambahkannya ke Classpath komputer Anda, Anda dapat mengompilasi servlet dengan kompilator Java JDK atau kompiler lain saat ini.
Apa selanjutnya?
Saya akan mengajak Anda langkah demi langkah untuk menyiapkan lingkungan Anda untuk memulai dengan Servlets. Jadi kencangkan ikat pinggang Anda untuk perjalanan yang menyenangkan dengan Servlets. Saya yakin Anda akan sangat menikmati tutorial ini.
Lingkungan pengembangan adalah tempat Anda mengembangkan Servlet, mengujinya, dan akhirnya menjalankannya.
Seperti program Java lainnya, Anda perlu mengkompilasi servlet dengan menggunakan kompilator Java javac dan setelah kompilasi aplikasi servlet, itu akan diterapkan di lingkungan yang dikonfigurasi untuk menguji dan menjalankan ..
Pengaturan lingkungan pengembangan ini melibatkan langkah-langkah berikut -
Menyiapkan Java Development Kit
Langkah ini melibatkan pengunduhan implementasi Java Software Development Kit (SDK) dan penyiapan variabel lingkungan PATH dengan tepat.
Anda dapat mengunduh SDK dari situs Java Oracle - Java SE Downloads .
Setelah Anda mengunduh implementasi Java Anda, ikuti instruksi yang diberikan untuk menginstal dan mengkonfigurasi pengaturan. Terakhir, setel variabel lingkungan PATH dan JAVA_HOME untuk merujuk ke direktori yang berisi java dan javac, biasanya masing-masing java_install_dir / bin dan java_install_dir.
Jika Anda menjalankan Windows dan menginstal SDK di C: \ jdk1.8.0_65, Anda akan meletakkan baris berikut di file C: \ autoexec.bat Anda.
set PATH = C:\jdk1.8.0_65\bin;%PATH%
set JAVA_HOME = C:\jdk1.8.0_65
Atau, pada Windows NT / 2000 / XP, Anda juga dapat mengklik kanan My Computer, pilih Properties, lalu Advanced, lalu Environment Variables. Kemudian, Anda akan memperbarui nilai PATH dan menekan tombol OK.
Di Unix (Solaris, Linux, dll.), Jika SDK diinstal di /usr/local/jdk1.8.0_65 dan Anda menggunakan shell C, Anda akan memasukkan yang berikut ini ke dalam file .cshrc Anda.
setenv PATH /usr/local/jdk1.8.0_65/bin:$PATH
setenv JAVA_HOME /usr/local/jdk1.8.0_65
Alternatifnya, jika Anda menggunakan Integrated Development Environment (IDE) seperti Borland JBuilder, Eclipse, IntelliJ IDEA, atau Sun ONE Studio, kompilasi dan jalankan program sederhana untuk memastikan bahwa IDE mengetahui di mana Anda menginstal Java.
Menyiapkan Server Web - Tomcat
Sejumlah Server Web yang mendukung servlet tersedia di pasar. Beberapa server web dapat diunduh secara gratis dan Tomcat adalah salah satunya.
Apache Tomcat adalah implementasi perangkat lunak open source dari teknologi Java Servlet dan Java Server Pages dan dapat bertindak sebagai server mandiri untuk menguji servlet dan dapat diintegrasikan dengan Apache Web Server. Berikut adalah langkah-langkah untuk menyiapkan Tomcat di komputer Anda -
Unduh Tomcat versi terbaru dari https://tomcat.apache.org/.
Setelah Anda mengunduh instalasi, keluarkan distribusi biner ke lokasi yang nyaman. Misalnya di C: \ apache-tomcat-8.0.28 di windows, atau /usr/local/apache-tomcat-8.0.289 di Linux / Unix dan buat variabel lingkungan CATALINA_HOME yang menunjuk ke lokasi ini.
Tomcat dapat dimulai dengan menjalankan perintah berikut di mesin windows -
%CATALINA_HOME%\bin\startup.bat
or
C:\apache-tomcat-8.0.28\bin\startup.bat
Tomcat dapat dimulai dengan menjalankan perintah berikut di mesin Unix (Solaris, Linux, dll.) -
$CATALINA_HOME/bin/startup.sh
or
/usr/local/apache-tomcat-8.0.28/bin/startup.sh
Setelah startup, aplikasi web default yang disertakan dengan Tomcat akan tersedia dengan mengunjungi http://localhost:8080/. Jika semuanya baik-baik saja maka itu akan menampilkan hasil berikut -
Informasi lebih lanjut tentang mengonfigurasi dan menjalankan Tomcat dapat ditemukan dalam dokumentasi yang disertakan di sini, serta di situs web Tomcat - http://tomcat.apache.org
Tomcat dapat dihentikan dengan menjalankan perintah berikut di mesin windows -
C:\apache-tomcat-8.0.28\bin\shutdown
Tomcat dapat dihentikan dengan menjalankan perintah berikut di mesin Unix (Solaris, Linux, dll.) -
/usr/local/apache-tomcat-8.0.28/bin/shutdown.sh
Menyiapkan CLASSPATH
Karena servlet bukan bagian dari Platform Java, Edisi Standar, Anda harus mengidentifikasi kelas-kelas servlet ke kompilator.
Jika Anda menjalankan Windows, Anda perlu meletakkan baris berikut di file C: \ autoexec.bat Anda.
set CATALINA = C:\apache-tomcat-8.0.28
set CLASSPATH = %CATALINA%\common\lib\servlet-api.jar;%CLASSPATH%
Atau, pada Windows NT / 2000 / XP, Anda dapat pergi ke My Computer -> Properties -> Advanced -> Environment Variables. Kemudian, Anda akan memperbarui nilai CLASSPATH dan menekan tombol OK.
Di Unix (Solaris, Linux, dll.), Jika Anda menggunakan shell C, Anda harus memasukkan baris berikut ke dalam file .cshrc Anda.
setenv CATALINA = /usr/local/apache-tomcat-8.0.28
setenv CLASSPATH $CATALINA/common/lib/servlet-api.jar:$CLASSPATH
NOTE - Dengan asumsi bahwa direktori pengembangan Anda adalah C: \ ServletDevel (Windows) atau / usr / ServletDevel (Unix) maka Anda perlu menambahkan direktori ini juga di CLASSPATH dengan cara yang sama seperti yang Anda tambahkan di atas.
Siklus hidup servlet dapat didefinisikan sebagai keseluruhan proses dari pembuatannya hingga kehancuran. Berikut ini adalah jalur yang diikuti oleh servlet.
Servlet diinisialisasi dengan memanggil init() metode.
Servlet memanggil service() metode untuk memproses permintaan klien.
Servlet diakhiri dengan memanggil destroy() metode.
Terakhir, servlet adalah sampah yang dikumpulkan oleh pengumpul sampah JVM.
Sekarang mari kita bahas metode siklus hidup secara rinci.
Metode init ()
Metode init hanya dipanggil sekali. Ini dipanggil hanya ketika servlet dibuat, dan tidak dipanggil untuk permintaan pengguna apa pun sesudahnya. Jadi, ini digunakan untuk inisialisasi satu kali, sama seperti metode applet init.
Servlet biasanya dibuat saat pengguna pertama kali memanggil URL yang sesuai dengan servlet, tetapi Anda juga dapat menentukan bahwa servlet dimuat saat server pertama kali dijalankan.
Saat pengguna memanggil servlet, satu instance dari setiap servlet akan dibuat, dengan setiap permintaan pengguna menghasilkan utas baru yang diserahkan ke doGet atau doPost sebagaimana mestinya. Metode init () hanya membuat atau memuat beberapa data yang akan digunakan selama masa pakai servlet.
Definisi metode init terlihat seperti ini -
public void init() throws ServletException {
// Initialization code...
}
Metode layanan ()
Metode service () adalah metode utama untuk melakukan tugas sebenarnya. Kontainer servlet (yaitu web server) memanggil metode service () untuk menangani permintaan yang datang dari klien (browser) dan untuk menulis respons yang diformat kembali ke klien.
Setiap kali server menerima permintaan servlet, server memunculkan thread baru dan layanan panggilan. Metode service () memeriksa jenis permintaan HTTP (GET, POST, PUT, DELETE, dll.) Dan memanggil metode doGet, doPost, doPut, doDelete, dll. Yang sesuai.
Inilah tanda tangan dari metode ini -
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
}
Metode service () dipanggil oleh kontainer dan metode layanan memanggil metode doGet, doPost, doPut, doDelete, dll. Yang sesuai. Jadi Anda tidak ada hubungannya dengan metode service () tetapi Anda menimpa doGet () atau doPost () tergantung pada jenis permintaan apa yang Anda terima dari klien.
DoGet () dan doPost () adalah metode yang paling sering digunakan di setiap permintaan layanan. Berikut adalah ciri khas kedua metode ini.
Metode doGet ()
Permintaan GET dihasilkan dari permintaan normal untuk URL atau dari bentuk HTML yang tidak memiliki METODE yang ditentukan dan harus ditangani dengan metode doGet ().
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Servlet code
}
Metode doPost ()
Permintaan POST dihasilkan dari bentuk HTML yang secara khusus mencantumkan POST sebagai METODE dan harus ditangani oleh metode doPost ().
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Servlet code
}
Metode destruksi ()
Metode destruksi () hanya dipanggil sekali di akhir siklus hidup servlet. Metode ini memberi servlet Anda kesempatan untuk menutup koneksi database, menghentikan thread latar belakang, menulis daftar cookie atau menekan jumlah ke disk, dan melakukan aktivitas pembersihan lainnya.
Setelah metode destroy () dipanggil, objek servlet ditandai untuk pengumpulan sampah. Definisi metode penghancuran terlihat seperti ini -
public void destroy() {
// Finalization code...
}
Diagram Arsitektur
Gambar berikut menggambarkan skenario siklus hidup servlet yang khas.
Pertama, permintaan HTTP yang masuk ke server didelegasikan ke container servlet.
Kontainer servlet memuat servlet sebelum memanggil metode service ().
Kemudian kontainer servlet menangani beberapa permintaan dengan menelurkan beberapa utas, setiap utas menjalankan metode service () dari satu contoh servlet.
Servlet adalah kelas Java yang melayani permintaan HTTP dan mengimplementasikan javax.servlet.Servletantarmuka. Pengembang aplikasi web biasanya menulis servlet yang memperluas javax.servlet.http.HttpServlet, kelas abstrak yang mengimplementasikan antarmuka Servlet dan dirancang khusus untuk menangani permintaan HTTP.
Kode sampel
Berikut ini adalah contoh struktur kode sumber dari contoh servlet untuk menunjukkan Hello World -
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class HelloWorld extends HttpServlet {
private String message;
public void init() throws ServletException {
// Do required initialization
message = "Hello World";
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
// Actual logic goes here.
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}
public void destroy() {
// do nothing.
}
}
Mengompilasi Servlet
Mari kita buat file dengan nama HelloWorld.java dengan kode yang ditunjukkan di atas. Tempatkan file ini di C: \ ServletDevel (di Windows) atau di / usr / ServletDevel (di Unix). Lokasi jalur ini harus ditambahkan ke CLASSPATH sebelum melanjutkan lebih jauh.
Dengan asumsi lingkungan Anda diatur dengan benar, masuk ServletDevel direktori dan kompilasi HelloWorld.java sebagai berikut -
$ javac HelloWorld.java
Jika servlet bergantung pada pustaka lain, Anda harus menyertakan file JAR tersebut di CLASSPATH Anda juga. Saya hanya menyertakan file JAR servlet-api.jar karena saya tidak menggunakan perpustakaan lain dalam program Hello World.
Baris perintah ini menggunakan kompiler javac internal yang disertakan dengan Java Software Development Kit (JDK) Sun Microsystems. Agar perintah ini berfungsi dengan benar, Anda harus menyertakan lokasi Java SDK yang Anda gunakan di variabel lingkungan PATH.
Jika semuanya berjalan dengan baik, kompilasi di atas akan menghasilkan HelloWorld.classfile di direktori yang sama. Bagian selanjutnya akan menjelaskan bagaimana servlet yang dikompilasi akan digunakan dalam produksi.
Penerapan Servlet
Secara default, aplikasi servlet terletak di jalur <Tomcat-installationdirectory> / webapps / ROOT dan file kelas akan berada di <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / kelas.
Jika Anda memiliki nama kelas yang sepenuhnya memenuhi syarat com.myorg.MyServlet, maka kelas servlet ini harus ditempatkan di WEB-INF / kelas / com / myorg / MyServlet.class.
Untuk saat ini, mari kita salin HelloWorld.class ke kelas <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / dan buat entri berikut di web.xml file terletak di <Tomcat-installation-directory> / webapps / ROOT / WEB-INF /
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
Entri di atas akan dibuat di dalam tag <web-app> ... </web-app> yang tersedia di file web.xml. Mungkin ada berbagai entri dalam tabel ini yang sudah tersedia, tapi tidak masalah.
Anda hampir selesai, sekarang mari kita mulai server kucing jantan menggunakan <Tomcat-installationdirectory> \ bin \ startup.bat (di Windows) atau <Tomcat-installationdirectory> /bin/startup.sh (di Linux / Solaris dll.) Dan terakhir ketik http://localhost:8080/HelloWorlddi kotak alamat browser. Jika semuanya berjalan dengan baik, Anda akan mendapatkan hasil sebagai berikut
Anda pasti pernah menghadapi banyak situasi ketika Anda perlu meneruskan beberapa informasi dari browser Anda ke server web dan akhirnya ke program backend Anda. Browser menggunakan dua metode untuk meneruskan informasi ini ke server web. Metode ini adalah Metode GET dan Metode POST.
GET Metode
Metode GET mengirimkan informasi pengguna yang dikodekan yang ditambahkan ke permintaan halaman. Halaman dan informasi yang dikodekan dipisahkan oleh? (tanda tanya) simbol sebagai berikut -
http://www.test.com/hello?key1 = value1&key2 = value2
Metode GET adalah metode default untuk meneruskan informasi dari browser ke server web dan menghasilkan string panjang yang muncul di kotak Lokasi: browser Anda. Jangan pernah menggunakan metode GET jika Anda memiliki kata sandi atau informasi sensitif lainnya untuk diteruskan ke server. Metode GET memiliki batasan ukuran: hanya 1024 karakter yang dapat digunakan dalam string permintaan.
Informasi ini diteruskan menggunakan tajuk QUERY_STRING dan akan dapat diakses melalui variabel lingkungan QUERY_STRING dan Servlet menangani jenis permintaan ini menggunakan doGet() metode.
Metode POST
Metode yang umumnya lebih andal untuk meneruskan informasi ke program backend adalah metode POST. Ini memaketkan informasi dengan cara yang persis sama seperti metode GET, tetapi alih-alih mengirimkannya sebagai string teks setelah? (tanda tanya) di URL yang dikirimkannya sebagai pesan terpisah. Pesan ini masuk ke program backend dalam bentuk input standar yang dapat Anda parse dan gunakan untuk pemrosesan Anda. Servlet menangani jenis permintaan ini menggunakandoPost() metode.
Membaca Data Formulir menggunakan Servlet
Servlet menangani penguraian data formulir secara otomatis menggunakan metode berikut tergantung pada situasinya -
getParameter() - Anda memanggil metode request.getParameter () untuk mendapatkan nilai parameter formulir.
getParameterValues() - Panggil metode ini jika parameter muncul lebih dari sekali dan mengembalikan beberapa nilai, misalnya kotak centang.
getParameterNames() - Panggil metode ini jika Anda ingin daftar lengkap semua parameter dalam permintaan saat ini.
GET Contoh Metode menggunakan URL
Berikut adalah URL sederhana yang akan memberikan dua nilai ke program HelloForm menggunakan metode GET.
http://localhost:8080/HelloForm?first_name = ZARA&last_name = ALIDiberikan di bawah ini adalah HelloForm.javaprogram servlet untuk menangani input yang diberikan oleh web browser. Kami akan menggunakangetParameter() metode yang membuatnya sangat mudah untuk mengakses informasi yang diteruskan -
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class HelloForm extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Using GET Method to Read Form Data";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<ul>\n" +
" <li><b>First Name</b>: "
+ request.getParameter("first_name") + "\n" +
" <li><b>Last Name</b>: "
+ request.getParameter("last_name") + "\n" +
"</ul>\n" +
"</body>" +
"</html>"
);
}
}
Dengan asumsi lingkungan Anda disiapkan dengan benar, kompilasi HelloForm.java sebagai berikut -
$ javac HelloForm.java
Jika semuanya berjalan dengan baik, kompilasi di atas akan menghasilkan HelloForm.classmengajukan. Selanjutnya Anda harus menyalin file kelas ini di kelas <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / dan membuat entri berikut diweb.xml file terletak di <Tomcat-installation-directory> / webapps / ROOT / WEB-INF /
<servlet>
<servlet-name>HelloForm</servlet-name>
<servlet-class>HelloForm</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloForm</servlet-name>
<url-pattern>/HelloForm</url-pattern>
</servlet-mapping>
Sekarang ketik http: // localhost: 8080 / HelloForm? First_name = ZARA & last_name = ALI di kotak Lokasi browser Anda dan pastikan Anda sudah memulai tomcat server, sebelum menjalankan perintah di atas di browser. Ini akan menghasilkan hasil sebagai berikut -
Using GET Method to Read Form Data
- First Name: ZARA
- Last Name: ALI
GET Contoh Metode Menggunakan Formulir
Berikut adalah contoh sederhana yang meneruskan dua nilai menggunakan HTML FORM dan tombol kirim. Kami akan menggunakan Servlet HelloForm yang sama untuk menangani masukan ini.
<html>
<body>
<form action = "HelloForm" method = "GET">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
Simpan HTML ini di file Hello.htm dan letakkan di direktori <Tomcat-installationdirectory> / webapps / ROOT. Saat Anda mengakses http: // localhost: 8080 / Hello.htm , berikut adalah keluaran aktual dari formulir di atas.
Cobalah untuk memasukkan Nama Depan dan Nama Belakang dan kemudian klik tombol kirim untuk melihat hasilnya di mesin lokal Anda tempat tomcat berjalan. Berdasarkan masukan yang diberikan, akan menghasilkan hasil yang serupa seperti yang disebutkan pada contoh di atas.
Contoh Metode POST Menggunakan Formulir
Mari kita lakukan sedikit modifikasi pada servlet di atas, sehingga dapat menangani metode GET serta POST. Dibawah iniHelloForm.java program servlet untuk menangani input yang diberikan oleh web browser menggunakan metode GET atau POST.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class HelloForm extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Using GET Method to Read Form Data";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<ul>\n" +
" <li><b>First Name</b>: "
+ request.getParameter("first_name") + "\n" +
" <li><b>Last Name</b>: "
+ request.getParameter("last_name") + "\n" +
"</ul>\n" +
"</body>"
"</html>"
);
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Sekarang kompilasi dan terapkan Servlet di atas dan uji menggunakan Hello.htm dengan metode POST sebagai berikut -
<html>
<body>
<form action = "HelloForm" method = "POST">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
Berikut adalah output aktual dari formulir di atas, Coba masukkan Nama Depan dan Nama Belakang lalu klik tombol kirim untuk melihat hasilnya di mesin lokal Anda tempat tomcat berjalan.
Berdasarkan masukan yang diberikan, akan menghasilkan hasil yang serupa seperti yang disebutkan pada contoh di atas.
Meneruskan Data Kotak Centang ke Program Servlet
Kotak centang digunakan ketika lebih dari satu opsi diperlukan untuk dipilih.
Berikut adalah contoh kode HTML, CheckBox.htm, untuk formulir dengan dua kotak centang
<html>
<body>
<form action = "CheckBox" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" checked = "checked" /> Maths
<input type = "checkbox" name = "physics" /> Physics
<input type = "checkbox" name = "chemistry" checked = "checked" />
Chemistry
<input type = "submit" value = "Select Subject" />
</form>
</body>
</html>
Hasil dari kode ini adalah bentuk berikut
Diberikan di bawah ini adalah program servlet CheckBox.java untuk menangani input yang diberikan oleh browser web untuk tombol kotak centang.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class CheckBox extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Reading Checkbox Data";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<ul>\n" +
" <li><b>Maths Flag : </b>: "
+ request.getParameter("maths") + "\n" +
" <li><b>Physics Flag: </b>: "
+ request.getParameter("physics") + "\n" +
" <li><b>Chemistry Flag: </b>: "
+ request.getParameter("chemistry") + "\n" +
"</ul>\n" +
"</body>"
"</html>"
);
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Untuk contoh di atas, ini akan menampilkan hasil sebagai berikut -
Reading Checkbox Data
- Maths Flag : : on
- Physics Flag: : null
- Chemistry Flag: : on
Membaca Semua Parameter Formulir
Berikut adalah contoh umum yang menggunakan getParameterNames()metode HttpServletRequest untuk membaca semua parameter formulir yang tersedia. Metode ini mengembalikan Enumerasi yang berisi nama parameter dalam urutan yang tidak ditentukan
Setelah kita memiliki Enumerasi, kita dapat mengulang Enumerasi dengan cara standar dengan menggunakan metode hasMoreElements () untuk menentukan kapan harus berhenti dan menggunakan metode nextElement () untuk mendapatkan setiap nama parameter.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class ReadParams extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Reading All Form Parameters";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<table width = \"100%\" border = \"1\" align = \"center\">\n" +
"<tr bgcolor = \"#949494\">\n" +
"<th>Param Name</th>"
"<th>Param Value(s)</th>\n"+
"</tr>\n"
);
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n<td>");
String[] paramValues = request.getParameterValues(paramName);
// Read single valued data
if (paramValues.length == 1) {
String paramValue = paramValues[0];
if (paramValue.length() == 0)
out.println("<i>No Value</i>");
else
out.println(paramValue);
} else {
// Read multiple valued data
out.println("<ul>");
for(int i = 0; i < paramValues.length; i++) {
out.println("<li>" + paramValues[i]);
}
out.println("</ul>");
}
}
out.println("</tr>\n</table>\n</body></html>");
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Sekarang, coba servlet di atas dengan bentuk berikut -
<html>
<body>
<form action = "ReadParams" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" checked = "checked" /> Maths
<input type = "checkbox" name = "physics" /> Physics
<input type = "checkbox" name = "chemistry" checked = "checked" /> Chem
<input type = "submit" value = "Select Subject" />
</form>
</body>
</html>
Sekarang memanggil servlet menggunakan formulir di atas akan menghasilkan hasil sebagai berikut -
Reading All Form Parameters
Param Name
Param Value(s)
maths
on
chemistry
on
Anda dapat mencoba servlet di atas untuk membaca data formulir lain yang memiliki objek lain seperti kotak teks, tombol radio, atau kotak drop-down, dll.
Ketika browser meminta halaman web, ia mengirimkan banyak informasi ke server web yang tidak dapat dibaca secara langsung karena informasi ini berjalan sebagai bagian dari header permintaan HTTP. Anda dapat memeriksa Protokol HTTP untuk informasi lebih lanjut tentang ini.
Berikut adalah informasi header penting yang berasal dari sisi browser dan Anda akan sangat sering menggunakannya dalam pemrograman web -
Sr.No. | Header & Deskripsi |
---|---|
1 | Accept Header ini menetapkan jenis MIME yang dapat ditangani browser atau klien lain. Nilaiimage/png atau image/jpeg adalah dua kemungkinan paling umum. |
2 | Accept-Charset Header ini menentukan set karakter yang dapat digunakan browser untuk menampilkan informasi. Misalnya ISO-8859-1. |
3 | Accept-Encoding Header ini menentukan jenis pengkodean yang diketahui browser cara menanganinya. Nilaigzip atau compress adalah dua kemungkinan paling umum. |
4 | Accept-Language Header ini menetapkan bahasa pilihan klien jika servlet dapat menghasilkan hasil dalam lebih dari satu bahasa. Misalnya en, en-us, ru, dll |
5 | Authorization Header ini digunakan oleh klien untuk mengidentifikasi diri mereka sendiri saat mengakses halaman Web yang dilindungi sandi. |
6 | Connection Header ini menunjukkan apakah klien dapat menangani koneksi HTTP yang persisten. Koneksi persisten mengizinkan klien atau browser lain untuk mengambil banyak file dengan satu permintaan. NilaiKeep-Alive berarti koneksi persisten harus digunakan. |
7 | Content-Length Header ini hanya berlaku untuk permintaan POST dan memberikan ukuran data POST dalam byte. |
8 | Cookie Header ini mengembalikan cookie ke server yang sebelumnya mengirimnya ke browser. |
9 | Host Header ini menentukan host dan port seperti yang diberikan di URL asli. |
10 | If-Modified-Since Header ini menunjukkan bahwa klien menginginkan halaman tersebut hanya jika telah diubah setelah tanggal yang ditentukan. Server mengirimkan kode, 304 yang artinyaNot Modified header jika tidak ada hasil yang lebih baru tersedia. |
11 | If-Unmodified-Since Header ini adalah kebalikan dari If-Modified-Because; itu menetapkan bahwa operasi harus berhasil hanya jika dokumen lebih lama dari tanggal yang ditentukan. |
12 | Referer Header ini menunjukkan URL halaman Web pengarah. Misalnya, jika Anda membuka halaman Web 1 dan mengklik link ke halaman Web 2, URL halaman Web 1 akan disertakan dalam tajuk Perujuk saat browser meminta halaman Web 2. |
13 | User-Agent Header ini mengidentifikasi browser atau klien lain yang membuat permintaan dan dapat digunakan untuk mengembalikan konten yang berbeda ke jenis browser yang berbeda. |
Metode untuk membaca HTTP Header
Ada beberapa metode berikut yang dapat digunakan untuk membaca header HTTP di program servlet Anda. Metode ini tersedia dengan objek HttpServletRequest
Sr.No. | Metode & Deskripsi |
---|---|
1 | Cookie[] getCookies() Mengembalikan larik yang berisi semua objek Cookie yang dikirim klien dengan permintaan ini. |
2 | Enumeration getAttributeNames() Mengembalikan Enumerasi yang berisi nama atribut yang tersedia untuk permintaan ini. |
3 | Enumeration getHeaderNames() Menampilkan pencacahan semua nama header yang dikandung permintaan ini. |
4 | Enumeration getParameterNames() Mengembalikan Enumerasi objek String yang berisi nama parameter yang terdapat dalam permintaan ini |
5 | HttpSession getSession() Mengembalikan sesi saat ini yang terkait dengan permintaan ini, atau jika permintaan tidak memiliki sesi, buatlah satu. |
6 | HttpSession getSession(boolean create) Mengembalikan HttpSession saat ini yang terkait dengan permintaan ini atau, jika tidak ada sesi saat ini dan nilai buat benar, mengembalikan sesi baru. |
7 | Locale getLocale() Mengembalikan Lokal pilihan di mana klien akan menerima konten, berdasarkan header Terima-Bahasa. |
8 | Object getAttribute(String name) Mengembalikan nilai atribut bernama sebagai Objek, atau null jika tidak ada atribut dari nama yang diberikan. |
9 | ServletInputStream getInputStream() Mengambil isi permintaan sebagai data biner menggunakan ServletInputStream. |
10 | String getAuthType() Mengembalikan nama skema otentikasi yang digunakan untuk melindungi servlet, misalnya, "BASIC" atau "SSL," atau null jika JSP tidak dilindungi. |
11 | String getCharacterEncoding() Menampilkan nama pengkodean karakter yang digunakan dalam isi permintaan ini. |
12 | String getContentType() Mengembalikan tipe MIME dari isi permintaan, atau null jika tipenya tidak dikenal. |
13 | String getContextPath() Mengembalikan porsi URI permintaan yang menunjukkan konteks permintaan. |
14 | String getHeader(String name) Mengembalikan nilai dari header permintaan yang ditentukan sebagai String. |
15 | String getMethod() Menampilkan nama metode HTTP yang digunakan untuk membuat permintaan ini, misalnya, GET, POST, atau PUT. |
16 | String getParameter(String name) Mengembalikan nilai parameter permintaan sebagai String, atau null jika parameter tidak ada. |
17 | String getPathInfo() Menampilkan informasi jalur tambahan apa pun yang terkait dengan URL yang dikirim klien saat membuat permintaan ini |
18 | String getProtocol() Menampilkan nama dan versi protokol yang diminta. |
19 | String getQueryString() Mengembalikan string kueri yang terdapat dalam URL permintaan setelah jalur. |
20 | String getRemoteAddr() Mengembalikan alamat Internet Protocol (IP) klien yang mengirim permintaan. |
21 | String getRemoteHost() Mengembalikan nama klien yang sepenuhnya memenuhi syarat yang mengirim permintaan. |
22 | String getRemoteUser() Mengembalikan login pengguna yang membuat permintaan ini, jika pengguna telah diautentikasi, atau null jika pengguna belum diautentikasi. |
23 | String getRequestURI() Menampilkan bagian URL permintaan ini dari nama protokol hingga string kueri di baris pertama permintaan HTTP. |
24 | String getRequestedSessionId() Mengembalikan ID sesi yang ditentukan oleh klien. |
25 | String getServletPath() Menampilkan bagian dari URL permintaan ini yang memanggil JSP. |
26 | String[] getParameterValues(String name) Mengembalikan larik objek String yang berisi semua nilai yang dimiliki parameter permintaan, atau null jika parameter tidak ada. |
27 | boolean isSecure() Mengembalikan Boolean yang menunjukkan apakah permintaan ini dibuat menggunakan saluran aman, seperti HTTPS. |
28 | int getContentLength() Menampilkan panjang, dalam byte, dari badan permintaan dan disediakan oleh aliran input, atau -1 jika panjangnya tidak diketahui. |
29 | int getIntHeader(String name) Mengembalikan nilai dari header permintaan yang ditentukan sebagai int. |
30 | int getServerPort() Mengembalikan nomor port tempat permintaan ini diterima. |
Contoh Permintaan Header HTTP
Berikut adalah contoh yang menggunakan getHeaderNames()metode HttpServletRequest untuk membaca informasi header HTTP. Metode ini mengembalikan Enumerasi yang berisi informasi header yang terkait dengan permintaan HTTP saat ini.
Setelah kita memiliki Enumerasi, kita dapat mengulang Enumerasi dengan cara standar, menggunakan metode hasMoreElements () untuk menentukan kapan harus berhenti dan menggunakan metode nextElement () untuk mendapatkan setiap nama parameter
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "HTTP Header Request Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n"+
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<table width = \"100%\" border = \"1\" align = \"center\">\n" +
"<tr bgcolor = \"#949494\">\n" +
"<th>Header Name</th><th>Header Value(s)</th>\n"+
"</tr>\n"
);
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String paramName = (String)headerNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getHeader(paramName);
out.println("<td> " + paramValue + "</td></tr>\n");
}
out.println("</table>\n</body></html>");
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Sekarang memanggil servlet di atas akan menghasilkan hasil sebagai berikut -
HTTP Header Request Example
Header Name
Header Value(s)
accept
*/*
accept-language
en-us
user-agent
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
accept-encoding
gzip, deflate
host
localhost:8080
connection
Keep-Alive
cache-control
no-cache
Seperti yang telah dibahas di bab sebelumnya, ketika server Web merespons permintaan HTTP, respons biasanya terdiri dari baris status, beberapa header respons, baris kosong, dan dokumen. Tanggapan khas terlihat seperti ini -
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
Baris status terdiri dari versi HTTP (HTTP / 1.1 dalam contoh), kode status (200 dalam contoh), dan pesan yang sangat singkat sesuai dengan kode status (OK dalam contoh).
Berikut ini adalah ringkasan dari header respons HTTP 1.1 yang paling berguna yang kembali ke browser dari sisi server web dan Anda akan sangat sering menggunakannya dalam pemrograman web -
Sr.No. | Header & Deskripsi |
---|---|
1 | Allow Header ini menetapkan metode permintaan (GET, POST, dll.) Yang didukung server. |
2 | Cache-Control Header ini menetapkan keadaan di mana dokumen respons dapat disimpan dalam cache dengan aman. Itu bisa memiliki nilaipublic, private atau no-cache dll. Publik berarti dokumen dapat disimpan di cache, Pribadi berarti dokumen untuk satu pengguna dan hanya dapat disimpan dalam cache pribadi (tidak dibagikan) dan nocache berarti dokumen tidak boleh di-cache. |
3 | Connection Header ini menginstruksikan browser apakah akan menggunakan persisten dalam koneksi HTTP atau tidak. Nilaiclose menginstruksikan browser untuk tidak menggunakan koneksi HTTP persisten dan keepalive berarti menggunakan koneksi persisten. |
4 | Content-Disposition Header ini memungkinkan Anda meminta browser meminta pengguna untuk menyimpan respons ke disk dalam file dengan nama yang diberikan. |
5 | Content-Encoding Header ini menentukan cara halaman dikodekan selama transmisi. |
6 | Content-Language Header ini menandakan bahasa di mana dokumen tersebut ditulis. Misalnya en, en-us, ru, dll |
7 | Content-Length Header ini menunjukkan jumlah byte dalam respons. Informasi ini diperlukan hanya jika browser menggunakan koneksi HTTP persisten (tetap hidup). |
8 | Content-Type Header ini memberikan jenis MIME (Multipurpose Internet Mail Extension) dari dokumen tanggapan. |
9 | Expires Tajuk ini menentukan waktu di mana konten harus dianggap kedaluwarsa dan karenanya tidak lagi disimpan dalam cache. |
10 | Last-Modified Header ini menunjukkan kapan dokumen terakhir diubah. Klien kemudian dapat menyimpan dokumen dan memberikan tanggal denganIf-Modified-Since meminta header dalam permintaan selanjutnya. |
11 | Location Header ini harus disertakan dengan semua tanggapan yang memiliki kode status 300-an. Ini memberi tahu browser tentang alamat dokumen. Browser secara otomatis menghubungkan kembali ke lokasi ini dan mengambil dokumen baru. |
12 | Refresh Header ini menentukan seberapa cepat browser harus meminta halaman yang diperbarui. Anda dapat menentukan waktu dalam beberapa detik untuk menyegarkan halaman. |
13 | Retry-After Header ini dapat digunakan bersama dengan respons 503 (Layanan Tidak Tersedia) untuk memberi tahu klien seberapa cepat ia dapat mengulangi permintaannya. |
14 | Set-Cookie Header ini menentukan cookie yang terkait dengan halaman. |
Metode untuk Mengatur Header Respons HTTP
Ada beberapa metode berikut yang dapat digunakan untuk menyetel header respons HTTP dalam program servlet Anda. Metode ini tersedia dengan objek HttpServletResponse .
Sr.No. | Metode & Deskripsi |
---|---|
1 | String encodeRedirectURL(String url) Mengkodekan URL yang ditentukan untuk digunakan dalam metode sendRedirect atau, jika encoding tidak diperlukan, mengembalikan URL tanpa perubahan. |
2 | String encodeURL(String url) Mengenkode URL yang ditentukan dengan memasukkan ID sesi di dalamnya, atau, jika pengkodean tidak diperlukan, mengembalikan URL tanpa perubahan. |
3 | boolean containsHeader(String name) Mengembalikan Boolean yang menunjukkan apakah header respons bernama telah disetel. |
4 | boolean isCommitted() Mengembalikan Boolean yang menunjukkan jika respons telah dilakukan. |
5 | void addCookie(Cookie cookie) Menambahkan cookie yang ditentukan ke respons. |
6 | void addDateHeader(String name, long date) Menambahkan header respons dengan nama dan tanggal-nilai yang diberikan. |
7 | void addHeader(String name, String value) Menambahkan tajuk tanggapan dengan nama dan nilai yang diberikan. |
8 | void addIntHeader(String name, int value) Menambahkan header respons dengan nama yang diberikan dan nilai integer. |
9 | void flushBuffer() Memaksa konten apa pun di buffer untuk ditulis ke klien. |
10 | void reset() Menghapus semua data yang ada di buffer serta kode status dan header. |
11 | void resetBuffer() Menghapus konten buffer yang mendasari dalam respons tanpa menghapus header atau kode status. |
12 | void sendError(int sc) Mengirim respons kesalahan ke klien menggunakan kode status yang ditentukan dan membersihkan buffer. |
13 | void sendError(int sc, String msg) Mengirim respons kesalahan ke klien menggunakan status yang ditentukan. |
14 | void sendRedirect(String location) Mengirim respons pengalihan sementara ke klien menggunakan URL lokasi pengalihan yang ditentukan. |
15 | void setBufferSize(int size) Menyetel ukuran buffer yang disukai untuk isi respons. |
16 | void setCharacterEncoding(String charset) Menyetel pengkodean karakter (MIME charset) dari respons yang dikirim ke klien, misalnya, ke UTF-8. |
17 | void setContentLength(int len) Menyetel panjang isi konten dalam respons Di servlet HTTP, metode ini menyetel header Panjang Konten HTTP. |
18 | void setContentType(String type) Menetapkan jenis konten respons yang dikirim ke klien, jika respons belum dilakukan. |
19 | void setDateHeader(String name, long date) Menetapkan header respons dengan nama dan nilai tanggal yang diberikan. |
20 | void setHeader(String name, String value) Menetapkan header respons dengan nama dan nilai yang diberikan. |
21 | void setIntHeader(String name, int value) Menetapkan header respons dengan nama yang diberikan dan nilai integer |
22 | void setLocale(Locale loc) Menetapkan lokal respons, jika respons belum dilakukan. |
23 | void setStatus(int sc) Set kode status untuk respon ini |
Contoh Respon Header HTTP
Anda sudah melihat metode setContentType () bekerja di contoh sebelumnya dan contoh berikut juga akan menggunakan metode yang sama, selain itu kami akan menggunakan setIntHeader() metode untuk mengatur Refresh header.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class Refresh extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set refresh, autoload time as 5 seconds
response.setIntHeader("Refresh", 5);
// Set response content type
response.setContentType("text/html");
// Get current time
Calendar calendar = new GregorianCalendar();
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(calendar.get(Calendar.AM_PM) == 0)
am_pm = "AM";
else
am_pm = "PM";
String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
PrintWriter out = response.getWriter();
String title = "Auto Refresh Header Setting";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n"+
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p>Current Time is: " + CT + "</p>\n"
);
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Sekarang memanggil servlet di atas akan menampilkan waktu sistem saat ini setelah setiap 5 detik sebagai berikut. Jalankan saja servlet dan tunggu untuk melihat hasilnya -
Auto Refresh Header Setting
Current Time is: 9:44:50 PM
Format permintaan HTTP dan pesan tanggapan HTTP serupa dan akan memiliki struktur berikut -
Baris status awal + CRLF (Carriage Return + Line Feed yaitu Jalur Baru)
Nol atau lebih baris header + CRLF
Baris kosong, yaitu CRLF
Badan pesan opsional seperti file, data kueri, atau keluaran kueri.
Misalnya, header respons server terlihat seperti berikut -
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
Baris status terdiri dari versi HTTP (HTTP / 1.1 dalam contoh), kode status (200 dalam contoh), dan pesan yang sangat singkat sesuai dengan kode status (OK dalam contoh).
Berikut ini adalah daftar kode status HTTP dan pesan terkait yang mungkin dikembalikan dari Server Web -
Kode | Pesan | Deskripsi |
---|---|---|
100 | Terus | Hanya sebagian dari permintaan telah diterima oleh server, tetapi selama itu belum ditolak, klien harus melanjutkan permintaan |
101 | Mengalihkan Protokol | Server beralih protokol. |
200 | baik | Permintaannya oke |
201 | Dibuat | Permintaan selesai, dan sumber daya baru dibuat |
202 | Diterima | Permintaan diterima untuk diproses, tetapi pemrosesan tidak selesai. |
203 | Informasi Non-otoritatif | |
204 | Tidak ada isi | |
205 | Setel Ulang Konten | |
206 | Konten Parsial | |
300 | Pilihan ganda | Daftar tautan. Pengguna dapat memilih link dan pergi ke lokasi tersebut. Maksimal lima alamat |
301 | Pindah Secara Permanen | Halaman yang diminta telah dipindahkan ke url baru |
302 | Ditemukan | Halaman yang diminta telah dipindahkan sementara ke url baru |
303 | Lihat Lainnya | Halaman yang diminta dapat ditemukan di bawah url yang berbeda |
304 | Tidak dimodifikasi | |
305 | Gunakan proxy | |
306 | Tidak terpakai | Kode ini digunakan di versi sebelumnya. Ini tidak lagi digunakan, tetapi kodenya sudah dipesan |
307 | Pengalihan Sementara | Halaman yang diminta telah dipindahkan sementara ke url baru. |
400 | Permintaan yang buruk | Server tidak memahami permintaan tersebut |
401 | Tidak resmi | Halaman yang diminta membutuhkan nama pengguna dan kata sandi |
402 | Pembayaran Diperlukan | Anda belum dapat menggunakan kode ini |
403 | Terlarang | Akses dilarang ke halaman yang diminta |
404 | Tidak ditemukan | Server tidak dapat menemukan halaman yang diminta. |
405 | Metode Tidak Diizinkan | Metode yang ditentukan dalam permintaan tidak diperbolehkan. |
406 | Tidak dapat diterima | Server hanya dapat menghasilkan respon yang tidak diterima oleh klien. |
407 | Autentikasi Proxy Diperlukan | Anda harus mengautentikasi dengan server proxy sebelum permintaan ini dapat dilayani. |
408 | Permintaan Timeout | Permintaan membutuhkan waktu lebih lama dari yang disiapkan server untuk menunggu. |
409 | Konflik | Permintaan tidak dapat diselesaikan karena ada konflik. |
410 | Hilang | Halaman yang diminta tidak lagi tersedia. |
411 | Panjang Diperlukan | "Panjang-Konten" tidak ditentukan. Server tidak akan menerima permintaan tanpa itu. |
412 | Prekondisi Gagal | Prasyarat yang diberikan dalam permintaan dievaluasi sebagai salah oleh server. |
413 | Entitas Permintaan Terlalu Besar | Server tidak akan menerima permintaan, karena entitas permintaan terlalu besar. |
414 | Request-url Terlalu Panjang | Server tidak akan menerima permintaan, karena url terlalu panjang. Terjadi ketika Anda mengubah permintaan "post" menjadi permintaan "get" dengan informasi query yang panjang. |
415 | Jenis Media Tidak Didukung | Server tidak akan menerima permintaan, karena jenis media tidak didukung. |
417 | Harapan Gagal | |
500 | Kesalahan server dari dalam | Permintaan itu belum selesai. Server menemui kondisi yang tidak terduga. |
501 | Tidak Diterapkan | Permintaan itu belum selesai. Server tidak mendukung fungsionalitas yang diperlukan. |
502 | Gateway Buruk | Permintaan itu belum selesai. Server menerima tanggapan yang tidak valid dari server hulu. |
503 | Layanan tidak tersedia | Permintaan itu belum selesai. Server kelebihan beban atau down untuk sementara. |
504 | Gateway Timeout | Gerbang telah habis waktunya. |
505 | Versi HTTP Tidak Didukung | Server tidak mendukung versi "protokol http". |
Metode untuk Mengatur Kode Status HTTP
Metode berikut dapat digunakan untuk mengatur Kode Status HTTP dalam program servlet Anda. Metode ini tersedia dengan objek HttpServletResponse .
Sr.No. | Metode & Deskripsi |
---|---|
1 | public void setStatus ( int statusCode ) Metode ini menetapkan kode status arbitrer. Metode setStatus menggunakan int (kode status) sebagai argumen. Jika tanggapan Anda menyertakan kode status khusus dan dokumen, pastikan untuk memanggil setStatus sebelum benar-benar mengembalikan konten apa pun dengan PrintWriter . |
2 | public void sendRedirect(String url) Metode ini menghasilkan respons 302 bersama dengan header Lokasi yang memberikan URL dari dokumen baru |
3 | public void sendError(int code, String message) Metode ini mengirimkan kode status (biasanya 404) bersama dengan pesan singkat yang secara otomatis diformat di dalam dokumen HTML dan dikirim ke klien. |
Contoh Kode Status HTTP
Berikut adalah contoh yang akan mengirimkan kode kesalahan 407 ke browser klien dan browser akan menunjukkan "Perlu otentikasi !!!" pesan.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class showError extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set error code and reason.
response.sendError(407, "Need authentication!!!" );
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Sekarang memanggil servlet di atas akan menampilkan hasil berikut -
HTTP Status 407 - Need authentication!!!
type Status report
messageNeed authentication!!!
descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29
Filter Servlet adalah kelas Java yang dapat digunakan dalam Pemrograman Servlet untuk tujuan berikut -
Untuk mencegat permintaan dari klien sebelum mereka mengakses sumber daya di ujung belakang.
Untuk memanipulasi tanggapan dari server sebelum dikirim kembali ke klien.
Ada berbagai jenis filter yang disarankan oleh spesifikasi -
- Filter Otentikasi.
- Filter kompresi data.
- Filter Enkripsi.
- Filter yang memicu peristiwa akses sumber daya.
- Filter Konversi Gambar.
- Filter Logging dan Auditing.
- Filter Rantai MIME-TYPE.
- Filter Tokenisasi.
- XSL / T Filter Yang Mengubah Konten XML.
Filter diterapkan dalam file deskriptor penerapan web.xml lalu memetakan ke nama servlet atau pola URL di deskriptor penerapan aplikasi Anda.
Saat penampung web memulai aplikasi web Anda, itu membuat instance dari setiap filter yang telah Anda nyatakan di deskriptor penerapan. Filter dijalankan sesuai urutan yang dideklarasikan di deskriptor penerapan.
Metode Filter Servlet
Filter hanyalah kelas Java yang mengimplementasikan antarmuka javax.servlet.Filter. Antarmuka javax.servlet.Filter mendefinisikan tiga metode -
Sr.No. | Metode & Deskripsi |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) Metode ini dipanggil oleh penampung setiap kali pasangan permintaan / tanggapan diteruskan melalui rantai karena permintaan klien untuk sumber daya di akhir rantai. |
2 | public void init(FilterConfig filterConfig) Metode ini dipanggil oleh penampung web untuk menunjukkan ke filter yang ditempatkan ke dalam layanan. |
3 | public void destroy() Metode ini dipanggil oleh penampung web untuk menunjukkan ke filter bahwa itu sedang tidak berfungsi. |
Filter Servlet - Contoh
Berikut adalah Contoh Filter Servlet yang akan mencetak alamat IP klien dan waktu tanggal sekarang. Contoh ini akan memberi Anda pemahaman dasar tentang Filter Servlet, tetapi Anda dapat menulis aplikasi filter yang lebih canggih menggunakan konsep yang sama -
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Implements Filter class
public class LogFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// Get init parameter
String testParam = config.getInitParameter("test-param");
//Print the init parameter
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws java.io.IOException, ServletException {
// Get the IP address of client machine.
String ipAddress = request.getRemoteAddr();
// Log the IP address and current timestamp.
System.out.println("IP "+ ipAddress + ", Time " + new Date().toString());
// Pass request back down the filter chain
chain.doFilter(request,response);
}
public void destroy( ) {
/* Called before the Filter instance is removed from service by the web container*/
}
}
Menyusun LogFilter.java dengan cara biasa dan letakkan file kelas Anda di <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / kelas
Pemetaan Filter Servlet di Web.xml
Filter ditentukan dan kemudian dipetakan ke URL atau Servlet, dengan cara yang sama seperti Servlet ditentukan dan kemudian dipetakan ke pola URL. Buat entri berikut untuk tag filter di file deskriptor penerapanweb.xml
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Filter di atas akan berlaku untuk semua servlet karena kita tentukan /*dalam konfigurasi kami. Anda dapat menentukan jalur servlet tertentu jika Anda ingin menerapkan filter hanya pada beberapa servlet.
Sekarang coba panggil servlet dengan cara biasa dan Anda akan melihat log yang dihasilkan di log server web Anda. Anda dapat menggunakan logger Log4J untuk masuk log di atas dalam file terpisah.
Menggunakan Beberapa Filter
Aplikasi web Anda dapat menentukan beberapa filter berbeda dengan tujuan tertentu. Pertimbangkan, Anda menentukan dua filter AuthenFilter dan LogFilter . Proses lainnya akan tetap seperti yang dijelaskan di atas kecuali Anda perlu membuat pemetaan yang berbeda seperti yang disebutkan di bawah -
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter>
<filter-name>AuthenFilter</filter-name>
<filter-class>AuthenFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Filter Pesanan Aplikasi
Urutan elemen pemetaan filter di web.xml menentukan urutan penampung web menerapkan filter ke servlet. Untuk membalik urutan filter, Anda hanya perlu membalikkan elemen pemetaan filter di file web.xml.
Misalnya, contoh di atas akan menerapkan LogFilter terlebih dahulu, lalu menerapkan AuthenFilter ke servlet mana pun, tetapi contoh berikut akan membalik urutannya -
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Saat servlet melontarkan pengecualian, penampung web mencari konfigurasi di dalamnya web.xml yang menggunakan elemen tipe pengecualian untuk kecocokan dengan tipe pengecualian yang muncul.
Anda harus menggunakan error-page elemen di web.xml untuk menentukan pemanggilan servlet sebagai respons terhadap tertentu exceptions atau HTTP status codes.
Konfigurasi web.xml
Pertimbangkan, Anda memiliki servlet ErrorHandler yang akan dipanggil setiap kali ada pengecualian atau kesalahan yang ditentukan. Berikut adalah entri yang dibuat di web.xml.
<!-- servlet definition -->
<servlet>
<servlet-name>ErrorHandler</servlet-name>
<servlet-class>ErrorHandler</servlet-class>
</servlet>
<!-- servlet mappings -->
<servlet-mapping>
<servlet-name>ErrorHandler</servlet-name>
<url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>
<!-- error-code related error pages -->
<error-page>
<error-code>404</error-code>
<location>/ErrorHandler</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/ErrorHandler</location>
</error-page>
<!-- exception-type related error pages -->
<error-page>
<exception-type>
javax.servlet.ServletException
</exception-type >
<location>/ErrorHandler</location>
</error-page>
<error-page>
<exception-type>java.io.IOException</exception-type >
<location>/ErrorHandler</location>
</error-page>
Jika Anda ingin memiliki Penangan Kesalahan umum untuk semua pengecualian, maka Anda harus menentukan laman kesalahan berikut alih-alih menentukan elemen laman kesalahan yang terpisah untuk setiap pengecualian -
<error-page>
<exception-type>java.lang.Throwable</exception-type >
<location>/ErrorHandler</location>
</error-page>
Berikut adalah poin yang perlu diperhatikan tentang web.xml di atas untuk Penanganan Pengecualian -
Servlet ErrorHandler didefinisikan dengan cara biasa seperti servlet lainnya dan dikonfigurasi di web.xml.
Jika ada kesalahan dengan kode status baik 404 (Not Found) atau 403 (Forbidden), maka servlet ErrorHandler akan dipanggil.
Jika aplikasi web melontarkan ServletException atau IOException, maka penampung web akan memanggil servlet / ErrorHandler.
Anda dapat menentukan Penangan Kesalahan yang berbeda untuk menangani jenis kesalahan atau pengecualian yang berbeda. Contoh di atas sangat umum dan berharap dapat berfungsi untuk menjelaskan kepada Anda konsep dasar.
Atribut Permintaan - Kesalahan / Pengecualian
Berikut ini adalah daftar atribut permintaan yang dapat diakses oleh servlet penanganan kesalahan untuk menganalisis sifat kesalahan / pengecualian.
Sr.No. | Atribut & Deskripsi |
---|---|
1 | javax.servlet.error.status_code Atribut ini memberikan kode status yang dapat disimpan dan dianalisis setelah disimpan dalam tipe data java.lang.Integer. |
2 | javax.servlet.error.exception_type Atribut ini memberikan informasi tentang tipe pengecualian yang dapat disimpan dan dianalisis setelah disimpan dalam tipe data java.lang.Class. |
3 | javax.servlet.error.message Atribut ini memberikan informasi pesan kesalahan yang tepat yang dapat disimpan dan dianalisis setelah disimpan dalam tipe data java.lang.String. |
4 | javax.servlet.error.request_uri Atribut ini memberikan informasi tentang URL yang memanggil servlet dan dapat disimpan dan dianalisis setelah disimpan dalam tipe data java.lang.String. |
5 | javax.servlet.error.exception Atribut ini memberikan informasi tentang pengecualian yang dimunculkan, yang dapat disimpan dan dianalisis. |
6 | javax.servlet.error.servlet_name Atribut ini memberikan nama servlet yang dapat disimpan dan dianalisis setelah disimpan dalam tipe data java.lang.String. |
Contoh Error Handler Servlet
Contoh ini akan memberi Anda pemahaman dasar tentang Penanganan Pengecualian di Servlet, tetapi Anda dapat menulis aplikasi filter yang lebih canggih menggunakan konsep yang sama -
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class ErrorHandler extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Analyze the servlet exception
Throwable throwable = (Throwable)
request.getAttribute("javax.servlet.error.exception");
Integer statusCode = (Integer)
request.getAttribute("javax.servlet.error.status_code");
String servletName = (String)
request.getAttribute("javax.servlet.error.servlet_name");
if (servletName == null) {
servletName = "Unknown";
}
String requestUri = (String)
request.getAttribute("javax.servlet.error.request_uri");
if (requestUri == null) {
requestUri = "Unknown";
}
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Error/Exception Information";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n");
if (throwable == null && statusCode == null) {
out.println("<h2>Error information is missing</h2>");
out.println("Please return to the <a href=\"" +
response.encodeURL("http://localhost:8080/") +
"\">Home Page</a>.");
} else if (statusCode != null) {
out.println("The status code : " + statusCode);
} else {
out.println("<h2>Error information</h2>");
out.println("Servlet Name : " + servletName + "</br></br>");
out.println("Exception Type : " + throwable.getClass( ).getName( ) + "</br></br>");
out.println("The request URI: " + requestUri + "<br><br>");
out.println("The exception message: " + throwable.getMessage( ));
}
out.println("</body>");
out.println("</html>");
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Menyusun ErrorHandler.java dengan cara biasa dan masukkan file kelas Anda
Mari kita tambahkan konfigurasi berikut di web.xml untuk menangani pengecualian -
<servlet>
<servlet-name>ErrorHandler</servlet-name>
<servlet-class>ErrorHandler</servlet-class>
</servlet>
<!-- servlet mappings -->
<servlet-mapping>
<servlet-name>ErrorHandler</servlet-name>
<url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>
<error-page>
<error-code>404</error-code>
<location>/ErrorHandler</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type >
<location>/ErrorHandler</location>
</error-page>
Sekarang coba gunakan servlet yang memunculkan pengecualian atau ketik URL yang salah, ini akan memicu Web Container untuk memanggil ErrorHandlerservlet dan menampilkan pesan yang sesuai seperti yang diprogram. Misalnya, jika Anda mengetik URL yang salah maka akan menampilkan hasil sebagai berikut -
The status code : 404
Kode di atas mungkin tidak berfungsi dengan beberapa browser web. Jadi coba dengan Mozilla dan Safari dan itu akan berhasil.
Cookies adalah file teks yang disimpan di komputer klien dan disimpan untuk berbagai tujuan pelacakan informasi. Java Servlets mendukung cookie HTTP secara transparan.
Ada tiga langkah yang terlibat dalam mengidentifikasi pengguna yang kembali -
Skrip server mengirimkan sekumpulan cookie ke browser. Misalnya nama, usia, atau nomor identifikasi dll.
Browser menyimpan informasi ini di mesin lokal untuk digunakan di masa mendatang.
Ketika lain kali browser mengirimkan permintaan apa pun ke server web, maka ia mengirimkan informasi cookie tersebut ke server dan server menggunakan informasi itu untuk mengidentifikasi pengguna.
Bab ini akan mengajari Anda cara menyetel atau menyetel ulang cookie, cara mengaksesnya, dan cara menghapusnya.
Anatomi Cookie
Cookie biasanya disetel di header HTTP (meskipun JavaScript juga dapat menyetel cookie langsung di browser). Servlet yang menyetel cookie mungkin mengirim header yang terlihat seperti ini -
HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT;
path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html
Seperti yang Anda lihat, tajuk Set-Cookie berisi pasangan nilai nama, tanggal GMT, jalur, dan domain. Nama dan nilai akan dienkode URL. Kolom kedaluwarsa adalah instruksi pada browser untuk "melupakan" cookie setelah waktu dan tanggal yang ditentukan.
Jika browser dikonfigurasi untuk menyimpan cookie, maka informasi ini akan disimpan hingga tanggal kedaluwarsa. Jika pengguna mengarahkan browser ke halaman mana pun yang cocok dengan jalur dan domain cookie, ia akan mengirim ulang cookie ke server. Header browser mungkin terlihat seperti ini -
GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz
Sebuah servlet kemudian akan memiliki akses ke cookie melalui metode permintaan request.getCookies () yang mengembalikan larik objek Cookie .
Metode Cookie Servlet
Berikut ini adalah daftar metode berguna yang dapat Anda gunakan saat memanipulasi cookie di servlet.
Sr.No. | Metode & Deskripsi |
---|---|
1 | public void setDomain(String pattern) Metode ini menyetel domain tempat cookie diterapkan, misalnya tutorialspoint.com. |
2 | public String getDomain() Metode ini mendapatkan domain tempat cookie diterapkan, misalnya tutorialspoint.com. |
3 | public void setMaxAge(int expiry) Metode ini menetapkan berapa lama waktu (dalam detik) harus berlalu sebelum cookie kedaluwarsa. Jika Anda tidak menyetel ini, cookie hanya akan bertahan untuk sesi saat ini. |
4 | public int getMaxAge() Metode ini mengembalikan usia maksimum cookie, ditentukan dalam hitungan detik, Secara default, -1 menunjukkan cookie akan bertahan hingga browser ditutup. |
5 | public String getName() Metode ini mengembalikan nama cookie. Nama tidak dapat diubah setelah dibuat. |
6 | public void setValue(String newValue) Metode ini menetapkan nilai yang terkait dengan cookie |
7 | public String getValue() Metode ini mendapatkan nilai yang terkait dengan cookie. |
8 | public void setPath(String uri) Metode ini menetapkan jalur ke mana cookie ini berlaku. Jika Anda tidak menentukan jalur, cookie akan dikembalikan untuk semua URL di direktori yang sama dengan halaman saat ini serta semua subdirektori. |
9 | public String getPath() Metode ini mendapatkan jalur ke mana cookie ini berlaku. |
10 | public void setSecure(boolean flag) Metode ini menyetel nilai boolean yang menunjukkan apakah cookie hanya boleh dikirim melalui koneksi terenkripsi (yaitu SSL). |
11 | public void setComment(String purpose) Metode ini menetapkan komentar yang menjelaskan tujuan cookie. Komentar tersebut berguna jika browser menyajikan cookie kepada pengguna. |
12 | public String getComment() Metode ini mengembalikan komentar yang menjelaskan tujuan cookie ini, atau null jika cookie tidak memiliki komentar. |
Mengatur Cookies dengan Servlet
Mengatur cookie dengan servlet melibatkan tiga langkah -
(1) Creating a Cookie object - Anda memanggil konstruktor Cookie dengan nama cookie dan nilai cookie, yang keduanya adalah string.
Cookie cookie = new Cookie("key","value");
Perlu diingat, baik nama maupun nilai tidak boleh mengandung spasi atau salah satu karakter berikut -
[ ] ( ) = , " / ? @ : ;
(2) Setting the maximum age- Anda menggunakan setMaxAge untuk menentukan berapa lama (dalam detik) cookie harus valid. Mengikuti akan menyiapkan cookie selama 24 jam.
cookie.setMaxAge(60 * 60 * 24);
(3) Sending the Cookie into the HTTP response headers - Anda menggunakan response.addCookie untuk menambahkan cookie di header respons HTTP sebagai berikut -
response.addCookie(cookie);
Contoh
Mari kita ubah Contoh Formulir kita untuk mengatur cookie untuk nama depan dan belakang.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class HelloForm extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Create cookies for first and last names.
Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));
// Set expiry date after 24 Hrs for both the cookies.
firstName.setMaxAge(60*60*24);
lastName.setMaxAge(60*60*24);
// Add both the cookies in the response header.
response.addCookie( firstName );
response.addCookie( lastName );
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Setting Cookies Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head>
<title>" + title + "</title>
</head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<ul>\n" +
" <li><b>First Name</b>: "
+ request.getParameter("first_name") + "\n" +
" <li><b>Last Name</b>: "
+ request.getParameter("last_name") + "\n" +
"</ul>\n" +
"</body>
</html>"
);
}
}
Kompilasi servlet di atas HelloForm dan buat entri yang sesuai di file web.xml dan terakhir coba ikuti halaman HTML untuk memanggil servlet.
<html>
<body>
<form action = "HelloForm" method = "GET">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
Simpan konten HTML di atas dalam file Hello.htm dan letakkan di direktori <Tomcat-installationdirectory> / webapps / ROOT. Saat Anda mengakses http: // localhost: 8080 / Hello.htm , berikut adalah keluaran aktual dari formulir di atas.
Coba masukkan First Name dan Last Name lalu klik tombol submit. Ini akan menampilkan nama depan dan nama belakang di layar Anda dan pada saat yang sama akan mengatur dua cookie firstName dan lastName yang akan dikirimkan kembali ke server ketika lain kali Anda menekan tombol Kirim.
Bagian selanjutnya akan menjelaskan kepada Anda bagaimana Anda akan mengakses cookie ini kembali di aplikasi web Anda.
Membaca Cookies dengan Servlet
Untuk membaca cookie, Anda perlu membuat array objek javax.servlet.http.Cookie dengan memanggil filegetCookies()metode HttpServletRequest . Kemudian siklus melalui array, dan gunakan metode getName () dan getValue () untuk mengakses setiap cookie dan nilai terkait.
Contoh
Mari kita membaca cookie yang telah kita atur di contoh sebelumnya -
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class ReadCookies extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with this domain
cookies = request.getCookies();
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Reading Cookies Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" );
if( cookies != null ) {
out.println("<h2> Found Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( ) + " <br/>");
}
} else {
out.println("<h2>No cookies founds</h2>");
}
out.println("</body>");
out.println("</html>");
}
}
Kompilasi servlet di atas ReadCookiesdan buat entri yang sesuai di file web.xml. Jika Anda menetapkan cookie first_name sebagai "John" dan cookie last_name sebagai "Player", maka menjalankan http: // localhost: 8080 / ReadCookies akan menampilkan hasil berikut -
Found Cookies Name and Value
Name : first_name, Value: John
Name : last_name, Value: Player
Hapus Cookie dengan Servlet
Untuk menghapus cookie sangat sederhana. Jika Anda ingin menghapus cookie, Anda hanya perlu mengikuti tiga langkah berikut -
Baca cookie yang sudah ada dan simpan di objek Cookie.
Tetapkan usia cookie sebagai nol menggunakan setMaxAge() metode untuk menghapus cookie yang ada
Tambahkan cookie ini kembali ke header tanggapan.
Contoh
Contoh berikut akan menghapus dan cookie yang ada bernama "first_name" dan ketika Anda menjalankan ReadCookies servlet lain kali akan mengembalikan nilai null untuk first_name.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class DeleteCookies extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with this domain
cookies = request.getCookies();
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Delete Cookies Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" );
if( cookies != null ) {
out.println("<h2> Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
if((cookie.getName( )).compareTo("first_name") == 0 ) {
cookie.setMaxAge(0);
response.addCookie(cookie);
out.print("Deleted cookie : " + cookie.getName( ) + "<br/>");
}
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( )+" <br/>");
}
} else {
out.println("<h2>No cookies founds</h2>");
}
out.println("</body>");
out.println("</html>");
}
}
Kompilasi servlet di atas DeleteCookiesdan buat entri yang sesuai di file web.xml. Sekarang menjalankan http: // localhost: 8080 / DeleteCookies akan menampilkan hasil berikut -
Cookies Name and Value
Deleted cookie : first_name
Name : first_name, Value: John
Name : last_name, Value: Player
Sekarang coba jalankan http: // localhost: 8080 / ReadCookies dan itu hanya akan menampilkan satu cookie sebagai berikut -
Found Cookies Name and Value
Name : last_name, Value: Player
Anda dapat menghapus cookie Anda di Internet Explorer secara manual. Mulailah dari menu Alat dan pilih Opsi Internet. Untuk menghapus semua cookie, tekan Delete Cookies.
HTTP adalah protokol "stateless" yang berarti setiap kali klien mengambil halaman Web, klien membuka koneksi terpisah ke server Web dan server secara otomatis tidak menyimpan catatan apa pun dari permintaan klien sebelumnya.
Masih ada tiga cara berikut untuk mempertahankan sesi antara klien web dan server web -
Kue
Server web dapat menetapkan ID sesi unik sebagai cookie untuk setiap klien web dan untuk permintaan berikutnya dari klien, mereka dapat dikenali menggunakan cookie yang diterima.
Ini mungkin bukan cara yang efektif karena sering kali browser tidak mendukung cookie, jadi saya tidak akan merekomendasikan untuk menggunakan prosedur ini untuk mempertahankan sesi.
Bidang Formulir Tersembunyi
Server web dapat mengirim bidang formulir HTML tersembunyi bersama dengan ID sesi unik sebagai berikut -
<input type = "hidden" name = "sessionid" value = "12345">
Entri ini berarti bahwa, ketika formulir dikirimkan, nama dan nilai yang ditentukan secara otomatis disertakan dalam data GET atau POST. Setiap kali browser web mengirim permintaan kembali, nilai session_id dapat digunakan untuk melacak browser web yang berbeda.
Ini bisa menjadi cara yang efektif untuk melacak sesi tetapi mengklik tautan hypertext reguler (<A HREF...>) tidak menghasilkan pengiriman formulir, jadi bidang formulir tersembunyi juga tidak dapat mendukung pelacakan sesi umum.
Penulisan Ulang URL
Anda dapat menambahkan beberapa data tambahan di akhir setiap URL yang mengidentifikasi sesi, dan server dapat mengaitkan pengidentifikasi sesi tersebut dengan data yang telah disimpan tentang sesi tersebut.
Misalnya, dengan http://tutorialspoint.com/file.htm;sessionid = 12345, pengenal sesi dilampirkan sebagai sessionid = 12345 yang dapat diakses di server web untuk mengidentifikasi klien.
Penulisan ulang URL adalah cara yang lebih baik untuk mempertahankan sesi dan berfungsi bahkan ketika browser tidak mendukung cookie. Kelemahan dari penulisan ulang URL adalah Anda harus membuat setiap URL secara dinamis untuk menetapkan ID sesi, bahkan untuk halaman HTML statis sederhana.
Objek HttpSession
Terlepas dari tiga cara yang disebutkan di atas, servlet menyediakan HttpSession Interface yang menyediakan cara untuk mengidentifikasi pengguna di lebih dari satu permintaan halaman atau kunjungan ke situs Web dan untuk menyimpan informasi tentang pengguna itu.
Kontainer servlet menggunakan antarmuka ini untuk membuat sesi antara klien HTTP dan server HTTP. Sesi berlanjut untuk jangka waktu tertentu, di lebih dari satu koneksi atau permintaan halaman dari pengguna.
Anda akan mendapatkan objek HttpSession dengan memanggil metode publik getSession() dari HttpServletRequest, seperti di bawah ini -
HttpSession session = request.getSession();
Anda perlu memanggil request.getSession () sebelum mengirim konten dokumen apa pun ke klien. Berikut adalah ringkasan dari metode penting yang tersedia melalui objek HttpSession -
Sr.No. | Metode & Deskripsi |
---|---|
1 | public Object getAttribute(String name) Metode ini mengembalikan objek yang terikat dengan nama yang ditentukan dalam sesi ini, atau null jika tidak ada objek yang terikat di bawah namanya. |
2 | public Enumeration getAttributeNames() Metode ini mengembalikan Enumerasi objek String yang berisi nama semua objek yang terikat ke sesi ini. |
3 | public long getCreationTime() Metode ini mengembalikan waktu saat sesi ini dibuat, diukur dalam milidetik sejak tengah malam 1 Januari 1970 GMT. |
4 | public String getId() Metode ini mengembalikan string yang berisi pengenal unik yang ditetapkan untuk sesi ini. |
5 | public long getLastAccessedTime() Metode ini mengembalikan waktu sesi yang terakhir diakses, dalam format milidetik sejak tengah malam 1 Januari 1970 GMT |
6 | public int getMaxInactiveInterval() Metode ini mengembalikan interval waktu maksimum (detik), bahwa wadah servlet akan membuat sesi tetap terbuka antara akses klien. |
7 | public void invalidate() Metode ini membatalkan sesi ini dan melepaskan objek apa pun yang terikat padanya. |
8 | public boolean isNew( Metode ini mengembalikan nilai true jika klien belum mengetahui tentang sesi atau jika klien memilih untuk tidak bergabung dengan sesi. |
9 | public void removeAttribute(String name) Metode ini menghapus objek yang terikat dengan nama yang ditentukan dari sesi ini. |
10 | public void setAttribute(String name, Object value) Metode ini mengikat objek ke sesi ini, menggunakan nama yang ditentukan. |
11 | public void setMaxInactiveInterval(int interval) Metode ini menentukan waktu, dalam detik, antara permintaan klien sebelum kontainer servlet akan membatalkan sesi ini. |
Contoh Pelacakan Sesi
Contoh ini menjelaskan cara menggunakan objek HttpSession untuk mengetahui waktu pembuatan dan waktu akses terakhir untuk sebuah sesi. Kami akan mengasosiasikan sesi baru dengan permintaan jika belum ada.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class SessionTrack extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Create a session object if it is already not created.
HttpSession session = request.getSession(true);
// Get session creation time.
Date createTime = new Date(session.getCreationTime());
// Get last access time of this web page.
Date lastAccessTime = new Date(session.getLastAccessedTime());
String title = "Welcome Back to my website";
Integer visitCount = new Integer(0);
String visitCountKey = new String("visitCount");
String userIDKey = new String("userID");
String userID = new String("ABCD");
// Check if this is new comer on your web page.
if (session.isNew()) {
title = "Welcome to my website";
session.setAttribute(userIDKey, userID);
} else {
visitCount = (Integer)session.getAttribute(visitCountKey);
visitCount = visitCount + 1;
userID = (String)session.getAttribute(userIDKey);
}
session.setAttribute(visitCountKey, visitCount);
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<h2 align = \"center\">Session Infomation</h2>\n" +
"<table border = \"1\" align = \"center\">\n" +
"<tr bgcolor = \"#949494\">\n" +
" <th>Session info</th><th>value</th>
</tr>\n" +
"<tr>\n" +
" <td>id</td>\n" +
" <td>" + session.getId() + "</td>
</tr>\n" +
"<tr>\n" +
" <td>Creation Time</td>\n" +
" <td>" + createTime + " </td>
</tr>\n" +
"<tr>\n" +
" <td>Time of Last Access</td>\n" +
" <td>" + lastAccessTime + " </td>
</tr>\n" +
"<tr>\n" +
" <td>User ID</td>\n" +
" <td>" + userID + " </td>
</tr>\n" +
"<tr>\n" +
" <td>Number of visits</td>\n" +
" <td>" + visitCount + "</td>
</tr>\n" +
"</table>\n" +
"</body>
</html>"
);
}
}
Kompilasi servlet di atas SessionTrackdan buat entri yang sesuai di file web.xml. Sekarang menjalankan http: // localhost: 8080 / SessionTrack akan menampilkan hasil berikut saat Anda menjalankan untuk pertama kali -
Welcome to my website
Session Infomation
Session info
value
id
0AE3EC93FF44E3C525B4351B77ABB2D5
Creation Time
Tue Jun 08 17:26:40 GMT+04:00 2010
Time of Last Access
Tue Jun 08 17:26:40 GMT+04:00 2010
User ID
ABCD
Number of visits
0
Sekarang coba jalankan servlet yang sama untuk kedua kalinya, itu akan menampilkan hasil sebagai berikut.
Welcome Back to my website
Session Infomation
info type
value
id
0AE3EC93FF44E3C525B4351B77ABB2D5
Creation Time
Tue Jun 08 17:26:40 GMT+04:00 2010
Time of Last Access
Tue Jun 08 17:26:40 GMT+04:00 2010
User ID
ABCD
Number of visits
1
Menghapus Data Sesi
Saat Anda selesai dengan data sesi pengguna, Anda memiliki beberapa opsi -
Remove a particular attribute- Anda dapat memanggil metode public void removeAttribute (nama string) untuk menghapus nilai yang terkait dengan kunci tertentu.
Delete the whole session- Anda dapat memanggil metode public void invalidate () untuk membuang seluruh sesi.
Setting Session timeout- Anda dapat memanggil metode public void setMaxInactiveInterval (int interval) untuk menyetel batas waktu untuk sesi individual.
Log the user out - Server yang mendukung servlet 2.4, Anda dapat menghubungi logout untuk mengeluarkan klien dari server Web dan membatalkan semua sesi milik semua pengguna.
web.xml Configuration - Jika Anda menggunakan Tomcat, selain metode yang disebutkan di atas, Anda dapat mengonfigurasi waktu tunggu sesi di file web.xml sebagai berikut.
<session-config>
<session-timeout>15</session-timeout>
</session-config>
Batas waktu dinyatakan sebagai menit, dan menggantikan batas waktu default yaitu 30 menit di Tomcat.
Metode getMaxInactiveInterval () dalam servlet mengembalikan periode waktu tunggu untuk sesi itu dalam hitungan detik. Jadi jika sesi Anda dikonfigurasi di web.xml selama 15 menit, getMaxInactiveInterval () mengembalikan 900.
Tutorial ini mengasumsikan bahwa Anda telah memahami cara kerja aplikasi JDBC. Sebelum memulai dengan akses database melalui servlet, pastikan Anda memiliki pengaturan lingkungan JDBC yang tepat bersama dengan database.
Untuk detail lebih lanjut tentang cara mengakses database menggunakan JDBC dan pengaturan lingkungannya, Anda dapat mengunjungi Tutorial JDBC kami .
Untuk memulai dengan konsep dasar, mari kita buat tabel sederhana dan buat beberapa record dalam tabel itu sebagai berikut -
Buat tabel
Untuk membuat Employees tabel dalam database TEST, gunakan langkah-langkah berikut -
Langkah 1
Buka sebuah Command Prompt dan ubah ke direktori instalasi sebagai berikut -
C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>
Langkah 2
Login ke database sebagai berikut
C:\Program Files\MySQL\bin>mysql -u root -p
Enter password: ********
mysql>
LANGKAH 3
Buat tabel Employee di TEST database sebagai berikut -
mysql> use TEST;
mysql> create table Employees (
id int not null,
age int not null,
first varchar (255),
last varchar (255)
);
Query OK, 0 rows affected (0.08 sec)
mysql>
Buat Rekaman Data
Akhirnya Anda membuat beberapa catatan dalam tabel Karyawan sebagai berikut -
mysql> INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali');
Query OK, 1 row affected (0.05 sec)
mysql> INSERT INTO Employees VALUES (101, 25, 'Mahnaz', 'Fatma');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Employees VALUES (102, 30, 'Zaid', 'Khan');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Employees VALUES (103, 28, 'Sumit', 'Mittal');
Query OK, 1 row affected (0.00 sec)
mysql>
Mengakses Database
Berikut adalah contoh yang menunjukkan bagaimana mengakses database TEST menggunakan Servlet.
// Loading required libraries
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class DatabaseAccess extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL="jdbc:mysql://localhost/TEST";
// Database credentials
static final String USER = "root";
static final String PASS = "password";
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Database Result";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n");
try {
// Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
// Open a connection
Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
// Execute SQL query
Statement stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
// Extract data from result set
while(rs.next()){
//Retrieve by column name
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//Display values
out.println("ID: " + id + "<br>");
out.println(", Age: " + age + "<br>");
out.println(", First: " + first + "<br>");
out.println(", Last: " + last + "<br>");
}
out.println("</body></html>");
// Clean-up environment
rs.close();
stmt.close();
conn.close();
} catch(SQLException se) {
//Handle errors for JDBC
se.printStackTrace();
} catch(Exception e) {
//Handle errors for Class.forName
e.printStackTrace();
} finally {
//finally block used to close resources
try {
if(stmt!=null)
stmt.close();
} catch(SQLException se2) {
} // nothing we can do
try {
if(conn!=null)
conn.close();
} catch(SQLException se) {
se.printStackTrace();
} //end finally try
} //end try
}
}
Sekarang mari kita kompilasi servlet di atas dan buat entri berikut di web.xml
....
<servlet>
<servlet-name>DatabaseAccess</servlet-name>
<servlet-class>DatabaseAccess</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DatabaseAccess</servlet-name>
<url-pattern>/DatabaseAccess</url-pattern>
</servlet-mapping>
....
Sekarang panggil servlet ini menggunakan URL http: // localhost: 8080 / DatabaseAccess yang akan menampilkan respons berikut -
Database Result
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
Servlet dapat digunakan dengan tag formulir HTML untuk memungkinkan pengguna mengunggah file ke server. File yang diunggah bisa berupa file teks atau file gambar atau dokumen apa pun.
Membuat Formulir Unggah File
Kode HTM berikut di bawah ini membuat formulir pengunggah. Berikut adalah poin penting yang harus dicatat -
Formulir method atribut harus disetel ke POST metode dan metode GET tidak dapat digunakan
Formulir enctype atribut harus disetel ke multipart/form-data.
Formulir actionatribut harus disetel ke file servlet yang akan menangani pengunggahan file di server backend. Contoh berikut menggunakanUploadServlet servlet untuk mengunggah file.
Untuk mengupload satu file, Anda harus menggunakan satu tag <input ... /> dengan atribut type = "file". Untuk memungkinkan beberapa file diunggah, sertakan lebih dari satu tag masukan dengan nilai berbeda untuk atribut nama. Browser mengaitkan tombol Jelajah dengan masing-masingnya.
<html>
<head>
<title>File Uploading Form</title>
</head>
<body>
<h3>File Upload:</h3>
Select a file to upload: <br />
<form action = "UploadServlet" method = "post" enctype = "multipart/form-data">
<input type = "file" name = "file" size = "50" />
<br />
<input type = "submit" value = "Upload File" />
</form>
</body>
</html>
Ini akan menampilkan hasil berikut yang memungkinkan untuk memilih file dari PC lokal dan ketika pengguna mengklik "Unggah File", formulir akan dikirimkan bersama dengan file yang dipilih -
File Upload:
Select a file to upload:
NOTE: This is just dummy form and would not work.
Menulis Backend Servlet
Berikut adalah servlet tersebut UploadServletyang akan menangani penerimaan file yang diunggah dan menyimpannya dalam direktori <Tomcat-installation-directory> / webapps / data. Nama direktori ini juga dapat ditambahkan menggunakan konfigurasi eksternal seperti acontext-param elemen di web.xml sebagai berikut -
<web-app>
....
<context-param>
<description>Location to store uploaded file</description>
<param-name>file-upload</param-name>
<param-value>
c:\apache-tomcat-5.5.29\webapps\data\
</param-value>
</context-param>
....
</web-app>
Berikut ini adalah kode sumber untuk UploadServlet yang dapat menangani pengunggahan beberapa file sekaligus. Sebelum melanjutkan, Anda harus memastikan hal-hal berikut -
Contoh berikut bergantung pada FileUpload, jadi pastikan Anda memiliki versi terbaru commons-fileupload.x.x.jarfile di classpath Anda. Anda dapat mendownloadnya darihttps://commons.apache.org/fileupload/.
FileUpload bergantung pada Commons IO, jadi pastikan Anda memiliki versi terbaru commons-io-x.x.jarfile di classpath Anda. Anda dapat mendownloadnya darihttps://commons.apache.org/io/.
Saat menguji contoh berikut, Anda harus mengupload file yang ukurannya kurang dari maxFileSize jika tidak, file tidak akan diupload.
Pastikan Anda telah membuat direktori c: \ temp dan c: \ apache-tomcat8.0.28 \ webapps \ data jauh sebelumnya.
// Import required java libraries
import java.io.*;
import java.util.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.output.*;
public class UploadServlet extends HttpServlet {
private boolean isMultipart;
private String filePath;
private int maxFileSize = 50 * 1024;
private int maxMemSize = 4 * 1024;
private File file ;
public void init( ){
// Get the file location where it would be stored.
filePath = getServletContext().getInitParameter("file-upload");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
// Check that we have a file upload request
isMultipart = ServletFileUpload.isMultipartContent(request);
response.setContentType("text/html");
java.io.PrintWriter out = response.getWriter( );
if( !isMultipart ) {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>No file uploaded</p>");
out.println("</body>");
out.println("</html>");
return;
}
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File("c:\\temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
try {
// Parse the request to get file items.
List fileItems = upload.parseRequest(request);
// Process the uploaded file items
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
while ( i.hasNext () ) {
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () ) {
// Get the uploaded file parameters
String fieldName = fi.getFieldName();
String fileName = fi.getName();
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\") >= 0 ) {
file = new File( filePath + fileName.substring( fileName.lastIndexOf("\\"))) ;
} else {
file = new File( filePath + fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
out.println("Uploaded Filename: " + fileName + "<br>");
}
}
out.println("</body>");
out.println("</html>");
} catch(Exception ex) {
System.out.println(ex);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
throw new ServletException("GET method used with " +
getClass( ).getName( )+": POST method required.");
}
}
}
Kompilasi dan Jalankan Servlet
Kompilasi di atas servlet UploadServlet dan buat entri yang diperlukan di file web.xml sebagai berikut.
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
Sekarang coba unggah file menggunakan formulir HTML yang Anda buat di atas. Ketika Anda mencoba http: // localhost: 8080 / UploadFile.htm, itu akan menampilkan hasil berikut yang akan membantu Anda mengunggah file apa pun dari mesin lokal Anda.
File Upload:
Select a file to upload:
Jika skrip servlet Anda berfungsi dengan baik, file Anda harus diupload di direktori c: \ apache-tomcat8.0.28 \ webapps \ data \.
Salah satu keuntungan terpenting menggunakan Servlet adalah Anda dapat menggunakan sebagian besar metode yang tersedia di inti Java. Tutorial ini akan membawa Anda melalui Java yang disediakanDate kelas yang tersedia di java.util paket, kelas ini merangkum tanggal dan waktu saat ini.
Kelas Tanggal mendukung dua konstruktor. Konstruktor pertama menginisialisasi objek dengan tanggal dan waktu saat ini.
Date( )
Konstruktor berikut menerima satu argumen yang sama dengan jumlah milidetik yang telah berlalu sejak tengah malam, 1 Januari 1970
Date(long millisec)
Setelah Anda memiliki objek Tanggal tersedia, Anda dapat memanggil salah satu metode dukungan berikut untuk bermain dengan tanggal -
Sr.No. | Metode & Deskripsi |
---|---|
1 | boolean after(Date date) Mengembalikan nilai benar jika pemanggilan objek Tanggal berisi tanggal yang lebih lama dari yang ditentukan oleh tanggal, jika tidak, mengembalikan salah. |
2 | boolean before(Date date) Mengembalikan nilai benar jika pemanggilan objek Tanggal berisi tanggal yang lebih awal dari yang ditentukan oleh tanggal, jika tidak, mengembalikan salah. |
3 | Object clone( ) Menduplikasi objek Tanggal pemanggilan. |
4 | int compareTo(Date date) Membandingkan nilai objek pemanggilan dengan tanggal. Mengembalikan 0 jika nilainya sama. Mengembalikan nilai negatif jika objek pemanggilan lebih awal dari tanggal. Mengembalikan nilai positif jika objek pemanggilan lebih lama dari tanggal. |
5 | int compareTo(Object obj) Beroperasi secara identik untuk membandingkanTo (Tanggal) jika obj adalah Tanggal kelas. Jika tidak, ClassCastException akan dilontarkan. |
6 | boolean equals(Object date) Mengembalikan nilai benar jika pemanggilan objek Tanggal berisi waktu dan tanggal yang sama seperti yang ditentukan oleh tanggal, jika tidak, itu mengembalikan salah. |
7 | long getTime( ) Mengembalikan jumlah milidetik yang telah berlalu sejak 1 Januari 1970. |
8 | int hashCode( ) Mengembalikan kode hash untuk objek pemanggilan. |
9 | void setTime(long time) Menyetel waktu dan tanggal seperti yang ditentukan oleh waktu, yang mewakili waktu yang telah berlalu dalam milidetik dari tengah malam, 1 Januari 1970. |
10 | String toString( ) Mengonversi objek Tanggal pemanggilan menjadi string dan mengembalikan hasilnya. |
Mendapatkan Tanggal & Waktu Saat Ini
Ini sangat mudah untuk mendapatkan tanggal dan waktu saat ini di Java Servlet. Anda dapat menggunakan objek Date sederhana dengan metode toString () untuk mencetak tanggal dan waktu sebagai berikut -
// Import required java libraries
import java.io.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class CurrentDate extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Display Current Date & Time";
Date date = new Date();
String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<h2 align = \"center\">" + date.toString() + "</h2>\n" +
"</body>
</html>"
);
}
}
Sekarang mari kita kompilasi servlet di atas dan membuat entri yang sesuai di web.xml dan kemudian memanggil servlet ini menggunakan URL http: // localhost: 8080 / CurrentDate. Ini akan menghasilkan hasil sebagai berikut -
Display Current Date & Time
Mon Jun 21 21:46:49 GMT+04:00 2010
Coba segarkan URL http: // localhost: 8080 / CurrentDate dan Anda akan menemukan perbedaan dalam hitungan detik setiap kali Anda menyegarkan.
Perbandingan Tanggal
Seperti yang saya sebutkan di atas, Anda dapat menggunakan semua metode Java yang tersedia di Servlet Anda. Jika Anda perlu membandingkan dua tanggal, berikut adalah metodenya -
Anda bisa menggunakan getTime () untuk mendapatkan jumlah milidetik yang telah berlalu sejak tengah malam, 1 Januari 1970, untuk kedua objek lalu membandingkan kedua nilai ini.
Anda bisa menggunakan metode sebelum (), setelah (), dan sama dengan (). Karena tanggal 12 datang sebelum tanggal 18, misalnya, Tanggal baru (99, 2, 12). Sebelum (Tanggal baru (99, 2, 18)) mengembalikan nilai benar.
Anda bisa menggunakan metode bandingkanTo (), yang ditentukan oleh antarmuka Comparable dan diimplementasikan oleh Tanggal.
Pemformatan Tanggal menggunakan SimpleDateFormat
SimpleDateFormat adalah kelas konkret untuk pemformatan dan penguraian tanggal dengan cara yang peka terhadap lokal. SimpleDateFormat memungkinkan Anda memulai dengan memilih pola yang ditentukan pengguna untuk pemformatan tanggal-waktu.
Mari kita ubah contoh di atas sebagai berikut -
// Import required java libraries
import java.io.*;
import java.text.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class CurrentDate extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Display Current Date & Time";
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<h2 align = \"center\">" + ft.format(dNow) + "</h2>\n" +
"</body>
</html>"
);
}
}
Kompilasi servlet di atas sekali lagi dan panggil servlet ini menggunakan URL http: // localhost: 8080 / CurrentDate. Ini akan menghasilkan hasil sebagai berikut -
Display Current Date & Time
Mon 2010.06.21 at 10:06:44 PM GMT+04:00
Kode Format DateFormat Sederhana
Untuk menentukan format waktu, gunakan string pola waktu. Dalam pola ini, semua huruf ASCII dicadangkan sebagai huruf pola, yang didefinisikan sebagai berikut -
Karakter | Deskripsi | Contoh |
---|---|---|
G | Penunjuk era | IKLAN |
y | Tahun dalam empat digit | 2001 |
M | Bulan dalam tahun | Juli atau 07 |
d | Hari demi bulan | 10 |
h | Jam di AM / PM (1 ~ 12) | 12 |
H. | Jam dalam sehari (0 ~ 23) | 22 |
m | Menit dalam jam | 30 |
s | Detik demi menit | 55 |
S | Mili detik | 234 |
E | Hari dalam minggu | Selasa |
D | Hari demi hari | 360 |
F | Hari dalam seminggu | 2 (Rabu kedua di bulan Juli) |
w | Minggu dalam tahun | 40 |
W | Minggu demi bulan | 1 |
Sebuah | Penanda AM / PM | SORE |
k | Jam dalam sehari (1 ~ 24) | 24 |
K | Jam di AM / PM (0 ~ 11) | 10 |
z | Zona waktu | Waktu Standar Timur |
' | Escape untuk teks | Pembatas |
" | Kutipan tunggal | ` |
Untuk daftar lengkap metode konstan yang tersedia untuk memanipulasi tanggal, Anda dapat merujuk ke dokumentasi Java standar.
Pengalihan halaman adalah teknik di mana klien dikirim ke lokasi baru selain yang diminta. Pengalihan halaman umumnya digunakan saat dokumen pindah ke lokasi baru atau mungkin karena load balancing.
Cara termudah untuk mengarahkan permintaan ke halaman lain menggunakan metode sendRedirect()objek respon. Berikut adalah tanda tangan dari metode ini -
public void HttpServletResponse.sendRedirect(String location)
throws IOException
Metode ini mengirimkan kembali respons ke browser bersama dengan kode status dan lokasi halaman baru. Anda juga bisa menggunakan metode setStatus () dan setHeader () bersama-sama untuk mencapai -
....
String site = "http://www.newpage.com" ;
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);
....
Contoh
Contoh ini menunjukkan bagaimana servlet melakukan pengalihan halaman ke lokasi lain -
import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class PageRedirect extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
// New location to be redirected
String site = new String("http://www.photofuntoos.com");
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);
}
}
Sekarang mari kita kompilasi servlet di atas dan buat entri berikut di web.xml
....
<servlet>
<servlet-name>PageRedirect</servlet-name>
<servlet-class>PageRedirect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PageRedirect</servlet-name>
<url-pattern>/PageRedirect</url-pattern>
</servlet-mapping>
....
Sekarang panggil servlet ini menggunakan URL http: // localhost: 8080 / PageRedirect. Ini akan mengarahkan Anda ke URL http://www.photofuntoos.com.
Hit Counter untuk Halaman Web
Sering kali Anda tertarik untuk mengetahui jumlah total klik pada halaman tertentu di situs Anda. Sangat mudah untuk menghitung hit ini menggunakan servlet karena siklus hidup servlet dikendalikan oleh wadah tempat ia berjalan.
Berikut adalah langkah-langkah yang harus diambil untuk mengimplementasikan penghitung halaman hit sederhana yang didasarkan pada Siklus Hidup Servlet -
Inisialisasi variabel global dalam metode init ().
Tingkatkan variabel global setiap kali metode doGet () atau doPost () dipanggil.
Jika diperlukan, Anda bisa menggunakan tabel database untuk menyimpan nilai variabel global dalam metode destroy (). Nilai ini bisa dibaca di dalam metode init () ketika servlet akan diinisialisasi lain kali. Langkah ini opsional.
Jika Anda hanya ingin menghitung klik halaman unik dengan-dalam sebuah sesi, Anda dapat menggunakan metode isNew () untuk memeriksa apakah halaman yang sama telah dipukul dengan-dalam sesi itu. Langkah ini opsional.
Anda dapat menampilkan nilai penghitung global untuk menunjukkan jumlah total klik di situs web Anda. Langkah ini juga opsional.
Di sini saya berasumsi bahwa penampung web tidak akan dimulai ulang. Jika di-restart atau servlet dihancurkan, penghitung hit akan direset.
Contoh
Contoh ini menunjukkan bagaimana menerapkan penghitung hit halaman sederhana -
import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class PageHitCounter extends HttpServlet {
private int hitCount;
public void init() {
// Reset hit counter.
hitCount = 0;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
// This method executes whenever the servlet is hit
// increment hitCount
hitCount++;
PrintWriter out = response.getWriter();
String title = "Total Number of Hits";
String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<h2 align = \"center\">" + hitCount + "</h2>\n" +
"</body>
</html>"
);
}
public void destroy() {
// This is optional step but if you like you
// can write hitCount value in your database.
}
}
Sekarang mari kita kompilasi servlet di atas dan buat entri berikut di web.xml
<servlet>
<servlet-name>PageHitCounter</servlet-name>
<servlet-class>PageHitCounter</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PageHitCounter</servlet-name>
<url-pattern>/PageHitCounter</url-pattern>
</servlet-mapping>
....
Sekarang panggil servlet ini menggunakan URL http: // localhost: 8080 / PageHitCounter. Ini akan meningkatkan penghitung satu per satu setiap kali halaman ini disegarkan dan akan menampilkan hasil sebagai berikut -
Total Number of Hits
6
Hit Counter for a Website:
Sering kali Anda tertarik untuk mengetahui jumlah total klik di seluruh situs web Anda. Ini juga sangat sederhana di Servlet dan kita dapat melakukannya menggunakan filter.
Berikut adalah langkah-langkah yang harus dilakukan untuk mengimplementasikan hit counter situs web sederhana yang didasarkan pada Filter Life Cycle -
Inisialisasi variabel global dalam metode init () dari sebuah filter.
Tingkatkan variabel global setiap kali metode doFilter dipanggil.
Jika diperlukan, Anda bisa menggunakan tabel database untuk menyimpan nilai variabel global dalam metode destroy () filter. Nilai ini bisa dibaca di dalam metode init () ketika filter akan diinisialisasi di lain waktu. Langkah ini opsional.
Di sini saya berasumsi bahwa penampung web tidak akan dimulai ulang. Jika di-restart atau servlet dihancurkan, penghitung hit akan direset.
Contoh
Contoh ini menunjukkan cara menerapkan penghitung hit situs web sederhana -
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class SiteHitCounter implements Filter {
private int hitCount;
public void init(FilterConfig config) throws ServletException {
// Reset hit counter.
hitCount = 0;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws java.io.IOException, ServletException {
// increase counter by one
hitCount++;
// Print the counter.
System.out.println("Site visits count :"+ hitCount );
// Pass request back down the filter chain
chain.doFilter(request,response);
}
public void destroy() {
// This is optional step but if you like you
// can write hitCount value in your database.
}
}
Sekarang mari kita mengkompilasi servlet di atas dan membuat entri berikut di web.xml
....
<filter>
<filter-name>SiteHitCounter</filter-name>
<filter-class>SiteHitCounter</filter-class>
</filter>
<filter-mapping>
<filter-name>SiteHitCounter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
....
Sekarang panggil URL apa saja seperti URL http: // localhost: 8080 /. Ini akan meningkatkan penghitung satu kali setiap kali halaman mana pun mendapat hit dan itu akan menampilkan pesan berikut di log -
Site visits count : 1
Site visits count : 2
Site visits count : 3
Site visits count : 4
Site visits count : 5
..................
Pertimbangkan halaman web yang menampilkan skor pertandingan langsung atau status pasar saham atau rasio pertukaran mata uang. Untuk semua jenis halaman seperti itu, Anda perlu menyegarkan halaman web Anda secara teratur menggunakan tombol segarkan atau muat ulang dengan browser Anda.
Java Servlet membuat pekerjaan ini mudah dengan memberi Anda mekanisme di mana Anda dapat membuat halaman web sedemikian rupa sehingga akan disegarkan secara otomatis setelah interval tertentu.
Cara termudah untuk menyegarkan halaman web menggunakan metode setIntHeader()objek respon. Berikut adalah tanda tangan dari metode ini -
public void setIntHeader(String header, int headerValue)
Metode ini mengirimkan kembali header "Refresh" ke browser bersama dengan nilai integer yang menunjukkan interval waktu dalam hitungan detik.
Contoh Penyegaran Halaman Otomatis
Contoh ini menunjukkan bagaimana servlet melakukan penyegaran halaman otomatis menggunakan setIntHeader() metode untuk mengatur Refresh header.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class Refresh extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set refresh, autoload time as 5 seconds
response.setIntHeader("Refresh", 5);
// Set response content type
response.setContentType("text/html");
// Get current time
Calendar calendar = new GregorianCalendar();
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(calendar.get(Calendar.AM_PM) == 0)
am_pm = "AM";
else
am_pm = "PM";
String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
PrintWriter out = response.getWriter();
String title = "Auto Page Refresh using Servlet";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n"+
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p>Current Time is: " + CT + "</p>\n"
);
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Sekarang mari kita mengkompilasi servlet di atas dan membuat entri berikut di web.xml
....
<servlet>
<servlet-name>Refresh</servlet-name>
<servlet-class>Refresh</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Refresh</servlet-name>
<url-pattern>/Refresh</url-pattern>
</servlet-mapping>
....
Sekarang panggil servlet ini menggunakan URL http: // localhost: 8080 / Refresh yang akan menampilkan waktu sistem saat ini setelah setiap 5 detik sebagai berikut. Jalankan saja servlet dan tunggu untuk melihat hasilnya -
Auto Page Refresh using Servlet
Current Time is: 9:44:50 PM
Untuk mengirim email menggunakan Servlet Anda cukup sederhana tetapi untuk memulainya Anda harus memilikinya JavaMail API dan Java Activation Framework (JAF) dipasang di mesin Anda.
Anda dapat mengunduh JavaMail versi terbaru (Versi 1.2) dari situs web standar Java.
Anda dapat mengunduh versi terbaru JAF (Versi 1.1.1) dari situs web standar Java.
Unduh dan unzip file ini, di direktori tingkat atas yang baru dibuat Anda akan menemukan sejumlah file jar untuk kedua aplikasi tersebut. Anda perlu menambahkanmail.jar dan activation.jar file di CLASSPATH Anda.
Kirim Email Sederhana
Berikut adalah contoh untuk mengirim email sederhana dari mesin Anda. Di sini diasumsikan bahwa Andalocalhostterhubung ke internet dan cukup mampu untuk mengirim email. Pastikan semua file jar dari paket Java Email API dan paket JAF tersedia di CLASSPATH.
// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
String title = "Send Email";
String res = "Sent message successfully....";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p align = \"center\">" + res + "</p>\n" +
"</body>
</html>"
);
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Sekarang mari kita mengkompilasi servlet di atas dan membuat entri berikut di web.xml
....
<servlet>
<servlet-name>SendEmail</servlet-name>
<servlet-class>SendEmail</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SendEmail</servlet-name>
<url-pattern>/SendEmail</url-pattern>
</servlet-mapping>
....
Sekarang panggil servlet ini menggunakan URL http: // localhost: 8080 / SendEmail yang akan mengirim email ke ID email yang diberikan [email protected] dan akan menampilkan respons berikut -
Send Email
Sent message successfully....
Jika Anda ingin mengirim email ke beberapa penerima, metode berikut akan digunakan untuk menentukan beberapa ID email -
void addRecipients(Message.RecipientType type, Address[] addresses)
throws MessagingException
Berikut adalah deskripsi parameter -
type- Ini akan disetel ke TO, CC atau BCC. Di sini CC mewakili Salinan Karbon dan BCC mewakili Salinan Karbon Hitam. Contoh Message.RecipientType.TO
addresses- Ini adalah deretan ID email. Anda perlu menggunakan metode InternetAddress () saat menentukan ID email.
Kirim Email HTML
Berikut adalah contoh untuk mengirim email HTML dari mesin Anda. Di sini diasumsikan bahwa Andalocalhostterhubung ke internet dan cukup mampu untuk mengirim email. Pada saat yang sama, pastikan semua file jar dari paket Java Email API dan paket JAF tersedia di CLASSPATH.
Contoh ini sangat mirip dengan yang sebelumnya, kecuali di sini kita menggunakan metode setContent () untuk menyetel konten yang argumen keduanya adalah "teks / html" untuk menentukan bahwa konten HTML disertakan dalam pesan.
Dengan menggunakan contoh ini, Anda dapat mengirim konten HTML sebesar yang Anda suka.
// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Send the actual HTML message, as big as you like
message.setContent("<h1>This is actual message</h1>", "text/html" );
// Send message
Transport.send(message);
String title = "Send Email";
String res = "Sent message successfully....";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p align = \"center\">" + res + "</p>\n" +
"</body>
</html>"
);
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Kompilasi dan jalankan servlet di atas untuk mengirim pesan HTML pada ID email tertentu.
Kirim Lampiran di Email
Berikut adalah contoh untuk mengirim email dengan lampiran dari mesin Anda. Di sini diasumsikan bahwa Andalocalhost terhubung ke internet dan cukup mampu untuk mengirim email.
// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Create the message part
BodyPart messageBodyPart = new MimeBodyPart();
// Fill the message
messageBodyPart.setText("This is message body");
// Create a multipar message
Multipart multipart = new MimeMultipart();
// Set text message part
multipart.addBodyPart(messageBodyPart);
// Part two is attachment
messageBodyPart = new MimeBodyPart();
String filename = "file.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
// Send the complete message parts
message.setContent(multipart );
// Send message
Transport.send(message);
String title = "Send Email";
String res = "Sent message successfully....";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p align = \"center\">" + res + "</p>\n" +
"</body>
</html>"
);
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Kompilasi dan jalankan servlet di atas untuk mengirim file sebagai lampiran bersama dengan pesan pada ID email yang diberikan.
Bagian Otentikasi Pengguna
Jika diperlukan untuk memberikan ID pengguna dan Kata Sandi ke server email untuk tujuan otentikasi, maka Anda dapat mengatur properti ini sebagai berikut -
props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");
Mekanisme pengiriman email lainnya akan tetap seperti yang dijelaskan di atas.
Struktur aplikasi web yang melibatkan subdirektori WEB-INF adalah standar untuk semua aplikasi web Java dan ditentukan oleh spesifikasi servlet API. Diberikan nama direktori tingkat atas myapp. Berikut adalah tampilan struktur direktori ini -
/myapp
/images
/WEB-INF
/classes
/lib
Subdirektori WEB-INF berisi deskriptor penerapan aplikasi, bernama web.xml. Semua file HTML harus disimpan di direktori level teratas yaitu myapp . Untuk pengguna admin, Anda akan menemukan direktori ROOT sebagai direktori induk.
Membuat Servlet dalam Paket
Direktori WEB-INF / kelas berisi semua kelas servlet dan file kelas lainnya, dalam struktur yang sesuai dengan nama paket mereka. Misalnya, jika Anda memiliki nama kelas yang sepenuhnya memenuhi syaratcom.myorg.MyServlet, maka kelas servlet ini harus ditempatkan di direktori berikut -
/myapp/WEB-INF/classes/com/myorg/MyServlet.class
Berikut contoh pembuatan class MyServlet dengan nama package com.myorg
// Name your package
package com.myorg;
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet extends HttpServlet {
private String message;
public void init() throws ServletException {
// Do required initialization
message = "Hello World";
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
// Actual logic goes here.
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}
public void destroy() {
// do nothing.
}
}
Mengompilasi Servlet dalam Paket
Tidak ada yang jauh berbeda dengan mengkompilasi kelas yang tersedia dalam paket. Cara termudah adalah dengan menyimpan file java Anda di jalur yang memenuhi syarat, seperti yang disebutkan di atas kelas akan disimpan di com.myorg. Anda juga perlu menambahkan direktori ini di CLASSPATH.
Dengan asumsi lingkungan Anda diatur dengan benar, masuk <Tomcat-installationdirectory>/ webapps / ROOT / WEB-INF / kelas dan kompilasi MyServlet.java sebagai berikut
$ javac MyServlet.java
Jika servlet bergantung pada pustaka lain, Anda harus menyertakan file JAR tersebut di CLASSPATH Anda juga. Saya hanya menyertakan file JAR servlet-api.jar karena saya tidak menggunakan perpustakaan lain dalam program Hello World.
Baris perintah ini menggunakan kompiler javac internal yang disertakan dengan Java Software Development Kit (JDK) Sun Microsystems. Agar perintah ini berfungsi dengan benar, Anda harus menyertakan lokasi Java SDK yang Anda gunakan di variabel lingkungan PATH.
Jika semuanya berjalan dengan baik, kompilasi di atas akan menghasilkan MyServlet.classfile di direktori yang sama. Bagian selanjutnya akan menjelaskan bagaimana servlet yang dikompilasi akan digunakan dalam produksi.
Penerapan Servlet Terpaket
Secara default, aplikasi servlet terletak di jalur <Tomcat-installationdirectory> / webapps / ROOT dan file kelas akan berada di <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / kelas.
Jika Anda memiliki nama kelas yang sepenuhnya memenuhi syarat com.myorg.MyServlet, maka kelas servlet ini harus ditempatkan di WEB-INF / class / com / myorg / MyServlet.class dan Anda perlu membuat entri berikut di web.xml file terletak di <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF /
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.myorg.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
Entri di atas akan dibuat di dalam tag <web-app> ... </web-app> yang tersedia di file web.xml. Mungkin ada berbagai entri dalam tabel ini yang sudah tersedia, tapi tidak masalah.
Anda hampir selesai, sekarang mari kita mulai server kucing jantan menggunakan <Tomcat-installationdirectory> \ bin \ startup.bat (di windows) atau <Tomcat-installationdirectory> /bin/startup.sh (di Linux / Solaris dll.) Dan terakhir ketik http://localhost:8080/MyServletdi kotak alamat browser. Jika semuanya berjalan dengan baik, Anda akan mendapatkan hasil sebagai berikut -
Hello World
Selalu sulit untuk menguji / men-debug servlet. Servlet cenderung melibatkan interaksi klien / server dalam jumlah besar, sehingga kemungkinan terjadi kesalahan tetapi sulit untuk direproduksi.
Berikut adalah beberapa petunjuk dan saran yang dapat membantu Anda dalam proses debug.
System.out.println ()
System.out.println () mudah digunakan sebagai penanda untuk menguji apakah potongan kode tertentu sedang dijalankan atau tidak. Kami juga dapat mencetak nilai variabel. Selain itu -
Karena objek Sistem adalah bagian dari objek inti Java, objek tersebut dapat digunakan di mana saja tanpa perlu menginstal kelas tambahan. Ini termasuk Servlet, JSP, RMI, EJB, Kacang dan kelas biasa, dan aplikasi mandiri.
Teknik berhenti di breakpoint menghentikan eksekusi normal sehingga membutuhkan lebih banyak waktu. Sedangkan menulis ke System.out tidak banyak mengganggu aliran eksekusi normal aplikasi, yang membuatnya sangat berharga saat pengaturan waktu sangat penting.
Berikut ini adalah sintaks untuk menggunakan System.out.println () -
System.out.println("Debugging message");
Semua pesan yang dihasilkan oleh sintaks di atas akan dicatat dalam file log server web.
Pesan Logging
Itu selalu merupakan ide bagus untuk menggunakan metode logging yang tepat untuk mencatat semua debug, peringatan dan pesan kesalahan menggunakan metode logging standar. Saya menggunakan log4J untuk mencatat semua pesan.
API Servlet juga menyediakan cara sederhana untuk mengeluarkan informasi dengan menggunakan metode log () sebagai berikut -
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ContextLog extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
String par = request.getParameter("par1");
//Call the two ServletContext.log methods
ServletContext context = getServletContext( );
if (par == null || par.equals(""))
//log version with Throwable parameter
context.log("No message received:", new IllegalStateException("Missing parameter"));
else
context.log("Here is the visitor's message: " + par);
response.setContentType("text/html");
java.io.PrintWriter out = response.getWriter( );
String title = "Context Log";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<h2 align = \"center\">Messages sent</h2>\n" +
"</body>
</html>"
);
} //doGet
}
ServletContext mencatat pesan teksnya ke file log penampung servlet. Dengan Tomcat, log ini ditemukan di <Tomcat-installation-directory> / logs.
File log memberikan indikasi bug baru yang muncul atau frekuensi masalah. Oleh karena itu, sebaiknya gunakan fungsi log () di klausa catch pengecualian yang biasanya tidak terjadi.
Menggunakan JDB Debugger
Anda dapat men-debug servlet dengan perintah jdb yang sama dengan yang Anda gunakan untuk men-debug applet atau aplikasi.
Untuk men-debug servlet, kita men-debug sun.servlet.http.HttpServer dan dengan hati-hati memperhatikan saat HttpServer mengeksekusi servlet sebagai respons terhadap permintaan HTTP yang dibuat dari browser. Ini sangat mirip dengan bagaimana applet di-debug. Perbedaannya adalah dengan applet, program sebenarnya yang sedang di-debug adalah sun.applet.AppletViewer.
Kebanyakan debugger menyembunyikan detail ini dengan secara otomatis mengetahui cara men-debug applet. Sampai mereka melakukan hal yang sama untuk servlet, Anda harus membantu debugger Anda dengan melakukan hal berikut -
Setel jalur kelas debugger Anda sehingga dapat menemukan sun.servlet.http.Http-Server dan kelas terkait.
Setel jalur kelas debugger Anda sehingga ia juga dapat menemukan servlet dan kelas pendukung Anda, biasanya server_root / servlets dan server_root / kelas.
Anda biasanya tidak ingin server_root / servlet di classpath Anda karena ini menonaktifkan pemuatan ulang servlet. Namun, penyertaan ini berguna untuk debugging. Ini memungkinkan debugger Anda menyetel breakpoint dalam servlet sebelum loader servlet khusus di HttpServer memuat servlet.
Setelah Anda menyetel jalur kelas yang tepat, mulailah men-debug sun.servlet.http.HttpServer. Anda dapat menyetel breakpoint di servlet apa pun yang ingin Anda debug, lalu gunakan browser web untuk membuat permintaan ke HttpServer untuk servlet yang diberikan (http: // localhost: 8080 / servlet / ServletToDebug). Anda akan melihat eksekusi dihentikan di breakpoints Anda.
Menggunakan Komentar
Komentar dalam kode Anda dapat membantu proses debugging dengan berbagai cara. Komentar dapat digunakan dengan banyak cara lain dalam proses debugging.
Servlet menggunakan komentar Java dan satu baris (// ...) dan beberapa baris (/ * ... * /) komentar dapat digunakan untuk sementara menghapus bagian dari kode Java Anda. Jika bug hilang, lihat lebih dekat kode yang baru saja Anda komentari dan temukan masalahnya.
Header Klien dan Server
Terkadang saat servlet tidak berperilaku seperti yang diharapkan, akan berguna untuk melihat permintaan dan respons HTTP mentah. Jika Anda terbiasa dengan struktur HTTP, Anda dapat membaca permintaan dan respons dan melihat apa sebenarnya yang terjadi dengan header tersebut.
Tips Penting Debugging
Berikut adalah daftar beberapa tips debugging pada servlet debugging -
Ingat bahwa server_root / class tidak memuat ulang dan server_root / servlet mungkin melakukannya.
Minta browser untuk menampilkan konten mentah dari halaman yang ditampilkannya. Ini dapat membantu mengidentifikasi masalah pemformatan. Ini biasanya merupakan opsi di bawah menu View.
Pastikan browser tidak menyimpan keluaran permintaan sebelumnya dengan memaksa memuat ulang halaman secara penuh. Dengan Netscape Navigator, gunakan Shift-Reload; dengan Internet Explorer gunakan Shift-Refresh.
Pastikan bahwa metode init () servlet Anda menggunakan parameter ServletConfig dan segera memanggil super.init (config).
Sebelum kita melanjutkan, izinkan saya menjelaskan tiga istilah penting -
Internationalization (i18n) - Ini berarti memungkinkan situs web menyediakan berbagai versi konten yang diterjemahkan ke dalam bahasa atau kebangsaan pengunjung
Localization (l10n) - Ini berarti menambahkan sumber daya ke situs web untuk beradaptasi dengan wilayah geografis atau budaya tertentu.
locale- Ini adalah wilayah budaya atau geografis tertentu. Biasanya disebut sebagai simbol bahasa diikuti dengan simbol negara yang dipisahkan oleh garis bawah. Misalnya "en_US" mewakili bahasa Inggris lokal untuk AS.
Ada sejumlah hal yang harus diperhatikan saat membangun situs web global. Tutorial ini tidak akan memberi Anda detail lengkap tentang ini tetapi ini akan memberi Anda contoh yang baik tentang bagaimana Anda dapat menawarkan halaman web Anda dalam berbagai bahasa kepada komunitas internet dengan membedakan lokasi mereka, yaitu lokal.
Servlet dapat mengambil versi situs yang sesuai berdasarkan lokasi pemohon dan memberikan versi situs yang sesuai sesuai dengan bahasa, budaya, dan persyaratan lokal. Berikut adalah metode objek permintaan yang mengembalikan objek Lokal.
java.util.Locale request.getLocale()
Mendeteksi Lokal
Berikut adalah metode lokal penting yang dapat Anda gunakan untuk mendeteksi lokasi pemohon, bahasa dan tentu saja lokal. Semua metode di bawah ini menampilkan nama negara dan nama bahasa yang disetel di browser pemohon.
Sr.No. | Metode & Deskripsi |
---|---|
1 | String getCountry() Metode ini mengembalikan kode negara / kawasan dalam huruf besar untuk lokal ini dalam format ISO 3166 2 huruf. |
2 | String getDisplayCountry() Metode ini mengembalikan nama untuk negara lokal yang sesuai untuk ditampilkan kepada pengguna. |
3 | String getLanguage() Metode ini mengembalikan kode bahasa dalam huruf kecil untuk lokal ini dalam format ISO 639. |
4 | String getDisplayLanguage() Metode ini mengembalikan nama untuk bahasa lokal yang sesuai untuk ditampilkan kepada pengguna. |
5 | String getISO3Country() Metode ini mengembalikan singkatan tiga huruf untuk negara tempat ini. |
6 | String getISO3Language() Metode ini mengembalikan singkatan tiga huruf untuk bahasa lokal ini. |
Contoh
Contoh ini menunjukkan bagaimana Anda menampilkan bahasa dan negara terkait untuk permintaan -
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
public class GetLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Get the client's Locale
Locale locale = request.getLocale();
String language = locale.getLanguage();
String country = locale.getCountry();
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Detecting Locale";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + language + "</h1>\n" +
"<h2 align = \"center\">" + country + "</h2>\n" +
"</body>
</html>"
);
}
}
Pengaturan Bahasa
Sebuah servlet dapat mengeluarkan halaman yang ditulis dalam bahasa Eropa Barat seperti Inggris, Spanyol, Jerman, Perancis, Italia, Belanda dll. Di sini penting untuk mengatur header ContentLanguage untuk menampilkan semua karakter dengan benar.
Poin kedua adalah menampilkan semua karakter khusus menggunakan entitas HTML, Misalnya, "& # 241;" mewakili "ñ", dan "& # 161;" mewakili "¡" sebagai berikut:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
public class DisplaySpanish extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Set spanish language code.
response.setHeader("Content-Language", "es");
String title = "En Español";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1>" + "En Español:" + "</h1>\n" +
"<h1>" + "¡Hola Mundo!" + "</h1>\n" +
"</body>
</html>"
);
}
}
Tanggal Khusus Lokal
Anda dapat menggunakan kelas java.text.DateFormat dan metode getDateTimeInstance () statisnya untuk memformat tanggal dan waktu khusus untuk lokal. Berikut adalah contoh yang menunjukkan bagaimana memformat tanggal khusus untuk lokal tertentu -
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.DateFormat;
import java.util.Date;
public class DateLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
String date = DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.SHORT, locale).format(new Date( ));
String title = "Locale Specific Dates";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + date + "</h1>\n" +
"</body>
</html>"
);
}
}
Mata Uang Khusus Lokal
Anda bisa menggunakan kelas java.txt.NumberFormat dan metode getCurrencyInstance () statisnya untuk memformat angka, seperti tipe panjang atau ganda, dalam mata uang lokal tertentu. Berikut adalah contoh yang menunjukkan bagaimana memformat mata uang khusus untuk suatu lokal -
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
public class CurrencyLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
String formattedCurr = nft.format(1000000);
String title = "Locale Specific Currency";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + formattedCurr + "</h1>\n" +
"</body>
</html>"
);
}
}
Persentase Khusus Lokal
Anda bisa menggunakan kelas java.txt.NumberFormat dan metode getPercentInstance () statisnya untuk mendapatkan persentase khusus lokal. Berikut adalah contoh yang menunjukkan bagaimana memformat persentase khusus untuk suatu lokal tertentu -
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
public class PercentageLocale extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getPercentInstance(locale);
String formattedPerc = nft.format(0.51);
String title = "Locale Specific Percentage";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + formattedPerc + "</h1>\n" +
"</body>
</html>"
);
}
}
Sejauh ini, Anda telah mempelajari bagaimana Servlet menggunakan deskriptor penerapan (file web.xml) untuk menerapkan aplikasi Anda ke server web. Servlet API 3.0 telah memperkenalkan paket baru yang disebut javax.servlet.annotation. Ini menyediakan tipe anotasi yang dapat digunakan untuk membuat anotasi kelas servlet. Jika Anda menggunakan anotasi, deskriptor penerapan (web.xml) tidak diperlukan. Tetapi Anda harus menggunakan tomcat7 atau versi tomcat yang lebih baru.
Anotasi dapat menggantikan konfigurasi XML yang setara dalam file deskriptor penerapan web (web.xml) seperti deklarasi servlet dan pemetaan servlet. Kontainer servlet akan memproses kelas beranotasi pada waktu penerapan.
Jenis anotasi yang diperkenalkan di Servlet 3.0 adalah -
Sr.No. | Anotasi & Deskripsi |
---|---|
1 | @WebServlet Untuk mendeklarasikan servlet. |
2 | @WebInitParam Untuk menentukan parameter inisialisasi. |
3 | @WebFilter Untuk mendeklarasikan filter servlet. |
4 | @WebListener Untuk mendeklarasikan WebListener |
5 | @HandlesTypes Untuk mendeklarasikan tipe kelas yang dapat ditangani oleh ServletContainerInitializer. |
6 | @HttpConstraint Penjelasan ini digunakan dalam penjelasan ServletSecurity untuk mewakili batasan keamanan yang akan diterapkan ke semua metode protokol HTTP yang elemen HttpMethodConstraint yang sesuai TIDAK terjadi dalam penjelasan ServletSecurity. |
7 | @HttpMethodConstraint Anotasi ini digunakan dalam anotasi ServletSecurity untuk mewakili batasan keamanan pada pesan protokol HTTP tertentu. |
8 | @MultipartConfig Anotasi yang dapat ditentukan pada kelas Servlet, yang menunjukkan bahwa contoh Servlet mengharapkan permintaan yang sesuai dengan tipe MIME multipart / form-data. |
9 | @ServletSecurity Anotasi ini digunakan pada kelas implementasi Servlet untuk menentukan batasan keamanan yang akan diberlakukan oleh wadah Servlet pada pesan protokol HTTP. |
Di sini kita telah membahas beberapa Anotasi secara mendetail.
@Web
@WebServlet digunakan untuk mendeklarasikan konfigurasi Servlet dengan sebuah wadah. Tabel berikut berisi daftar atribut yang digunakan untuk penjelasan WebServlet.
Sr.No. | Atribut & Deskripsi |
---|---|
1 | String name Nama Servlet |
2 | String[] value Array pola URL |
3 | String[] urlPatterns Susunan pola URL tempat Filter ini diterapkan |
4 | Int loadOnStartup Nilai integer memberi Anda petunjuk pengurutan mulai |
5 | WebInitParam[] initParams Array parameter inisialisasi untuk Servlet ini |
6 | Boolean asyncSupported Operasi asinkron yang didukung oleh Servlet ini |
7 | String smallIcon Ikon kecil untuk Servlet ini, jika ada |
8 | String largeIcon Ikon besar untuk Servlet ini, jika ada |
9 | String description Deskripsi Servlet ini, jika ada |
10 | String displayName Nama tampilan Servlet ini, jika ada |
Setidaknya satu pola URL HARUS dideklarasikan di value atau urlPattern atribut anotasi, tetapi tidak keduanya.
Itu value atribut direkomendasikan untuk digunakan ketika pola URL adalah satu-satunya atribut yang disetel, jika tidak, urlPattern atribut harus digunakan.
Contoh
Contoh berikut menjelaskan cara menggunakan anotasi @WebServlet. Ini adalah servlet sederhana yang menampilkan teksHello Servlet.
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(value = "/Simple")
public class Simple extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("<html><body>");
out.print("<h3>Hello Servlet</h3>");
out.print("</body></html>");
}
}
Menyusun Simple.java dengan cara biasa dan letakkan file kelas Anda di <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / kelas.
Sekarang coba panggil servlet apa saja dengan hanya menjalankan http: // localhost: 8080 / Simple . Anda akan melihat output berikut di halaman web.
Hello servlet
@Bayu_joo
Anotasi @WebInitParam digunakan untuk menentukan parameter inisialisasi untuk Servlet atau Filter. Ini digunakan dalam anotasi WebFilter atau WebSevlet. Tabel berikut berisi daftar atribut yang digunakan untuk penjelasan WebInitParam.
Sr.No. | Atribut & Deskripsi |
---|---|
1 | String name Nama parameter inisialisasi |
2 | String value Nilai parameter inisialisasi |
3 | String description Deskripsi parameter inisialisasi |
Contoh
Contoh berikut menjelaskan cara menggunakan anotasi @WeInitParam bersama dengan anotasi @WebServlet. Ini adalah servlet sederhana yang menampilkan teksHello Servlet dan nilai string Hello World! yang diambil dari init parameter.
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(value = "/Simple", initParams = {
@WebInitParam(name = "foo", value = "Hello "),
@WebInitParam(name = "bar", value = " World!")
})
public class Simple extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("<html><body>");
out.print("<h3>Hello Servlet</h3>");
out.println(getInitParameter("foo"));
out.println(getInitParameter("bar"));
out.print("</body></html>");
}
}
Menyusun Simple.java dengan cara biasa dan letakkan file kelas Anda di <Tomcat-installationdirectory>; / webapps / ROOT / WEB-INF / kelas.
Sekarang coba panggil servlet apa saja dengan hanya menjalankan http: // localhost: 8080 / Simple . Anda akan melihat output berikut di halaman web.
Hello Servlet
Hello World!
@Filter_kecil
Ini adalah anotasi yang digunakan untuk mendeklarasikan filter servlet. Ini diproses oleh penampung pada waktu penerapan, dan filter terkait diterapkan ke pola URL, servlet, dan jenis operator yang ditentukan.
Itu @WebFilteranotasi mendefinisikan filter dalam aplikasi web. Anotasi ini ditentukan pada kelas dan berisi metadata tentang filter yang dideklarasikan. Filter beranotasi harus menentukan setidaknya satu pola URL. Tabel berikut mencantumkan atribut yang digunakan untuk penjelasan WebFilter.
Sr.No. | Atribut & Deskripsi |
---|---|
1 | String filterName Nama filter |
2 | String[] urlPatterns Menyediakan larik nilai atau urlPatterns yang diterapkan filter |
3 | DispatcherType[] dispatcherTypes Menentukan jenis petugas operator (Permintaan / Respons) tempat filter diterapkan |
4 | String[] servletNames Menyediakan larik nama servlet |
5 | String displayName Nama filter |
6 | String description Deskripsi filter |
7 | WebInitParam[] initParams Larik parameter inisialisasi untuk filter ini |
8 | Boolean asyncSupported Operasi asinkron didukung oleh filter ini |
9 | String smallIcon Ikon kecil untuk filter ini, jika ada |
10 | String largeIcon Ikon besar untuk filter ini, jika ada |
Contoh
Contoh berikut menjelaskan cara menggunakan anotasi @WebFilter. Ini adalah LogFilter sederhana yang menampilkan nilai Init-paramtest-paramdan stempel waktu waktu saat ini di konsol. Artinya, filter berfungsi seperti lapisan antarmuka antara permintaan dan respons. Di sini kami menggunakan "/ *" untuk urlPattern. Artinya, filter ini berlaku untuk semua servlet.
import java.io.IOException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.*;
import java.util.*;
// Implements Filter class
@WebFilter(urlPatterns = {"/*"}, initParams = {
@WebInitParam(name = "test-param", value = "Initialization Paramter")})
public class LogFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// Get init parameter
String testParam = config.getInitParameter("test-param");
//Print the init parameter
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// Log the current timestamp.
System.out.println("Time " + new Date().toString());
// Pass request back down the filter chain
chain.doFilter(request,response);
}
public void destroy( ) {
/* Called before the Filter instance is removed
from service by the web container*/
}
}
Menyusun Simple.java dengan cara biasa dan letakkan file kelas Anda di <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / kelas.
Sekarang coba panggil servlet apa saja dengan hanya menjalankan http: // localhost: 8080 / Simple . Anda akan melihat output berikut di halaman web.
Hello Servlet
Hello World!
Sekarang, buka konsol servlet. Di sana, Anda akan menemukan nilai fileinit parameter testparam dan current timestamp bersama dengan pesan notifikasi servlet.