- tentang jaringan ;
- tentang arsitektur perangkat lunak ;
- tentang protokol HTTP/HTTPS ;
- tentang dasar-dasar Maven .
Apa itu servlet
Pertama, mari kita cari tahu apa itu servlet dan mengapa Anda begitu sering mendengarnya. Java Servlet API adalah API standar yang dirancang untuk implementasi di server dan bekerja dengan klien menggunakan skema permintaan-respons. Servlet adalah kelas yang dapat menerima permintaan dari klien dan mengembalikan tanggapannya. Ya, servlet di Java adalah elemen yang membangun arsitektur client-server. Jika Anda ingat, kami telah membicarakannya di salah satu artikel seri ini. Jangan bertele-tele: ayo segera tulis beberapa kode.Apa yang Anda perlukan untuk membuat aplikasi web
Untuk bekerja dengan nyaman dengan servlet di Java, Anda memerlukan Intellij IDEA Ultimate Edition. Ini berbayar, tetapi Anda dapat mengaktifkan masa uji coba 30 hari atau menggunakan versi akses awal - selalu gratis. Instal juga server aplikasi kami - Apache Tomcat. Tomcat adalah wadah servlet: wadah yang memproses permintaan masuk dari luar dan meneruskannya ke aplikasi kita. Anda dapat mengunduh Tomcat dari tautan ini .Membuat aplikasi web pertama
Jika semuanya sudah siap, mari kita buat proyek Maven. Jika Anda belum familiar dengan Maven, perhatikan artikel sebelumnya . Mari kita mulai!-
Di pom.xml, tambahkan ketergantungan javax.servlet-api dan atur perang pengemasan:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>servlets</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> </dependencies> </project>
Kelas servlet sederhana:
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet("/hello") public class MainServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter printWriter = resp.getWriter(); printWriter.write("Hello!"); printWriter.close(); } }
-
Untuk menjalankan aplikasi, Anda perlu membuat konfigurasi Tomcat:
-
Selanjutnya, kami menunjukkan versi Tomcat mana yang akan kami gunakan, URL yang dapat kami gunakan untuk mengakses server, dan portnya. Anda harus mendapatkan sesuatu seperti ini:
-
Yang tersisa hanyalah menentukan artefak (proyek yang dirakit menjadi arsip jar), yang akan disebarkan dalam wadah. Anda dapat mengklik tombol Perbaiki dan memilih perang meledak : ini berarti bahwa setelah proyek dibangun kembali, artefak akan secara otomatis ditempatkan di wadah servlet.
-
Konteks Aplikasi diatur ke servlets_war_exploded secara default , yang berarti aplikasi harus diakses di: http://localhost:8080/servlets_war_exploded .
Mengapa kita memerlukan teks tambahan? Mari kita hilangkan hal-hal yang tidak perlu. Sekarang alamat aplikasi kita adalah: http://localhost:8080 .
-
Klik Oke. Kami melihat bahwa sekarang kami memiliki kesempatan untuk meluncurkan aplikasi:
Sekarang, saat Anda meluncurkan aplikasi, browser akan terbuka dan menampilkan kesalahan 404. Ini logis, karena di alamat http://localhost:8080/ seharusnya ada servlet dengan pemetaan “/”, dan satu-satunya servlet kita yang memiliki pemetaan “/hello” .
-
Kami menghubunginya di http://localhost:8080/hello dan mendapatkan respons yang diharapkan - string “Halo”!
Bekerja dengan parameter dan sesi
Mari tingkatkan servlet kita sehingga dapat memproses parameter permintaan dan bekerja dengan sesi:import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/hello")
public class MainServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
Integer visitCounter = (Integer) session.getAttribute("visitCounter");
if (visitCounter == null) {
visitCounter = 1;
} else {
visitCounter++;
}
session.setAttribute("visitCounter", visitCounter);
String username = req.getParameter("username");
resp.setContentType("text/html");
PrintWriter printWriter = resp.getWriter();
if (username == null) {
printWriter.write("Hello, Anonymous" + "<br>");
} else {
printWriter.write("Hello, " + username + "<br>");
}
printWriter.write("Page was visited " + visitCounter + " times.");
printWriter.close();
}
}
Servlet sedang menjalankan sesi, menambah visitCounter setiap kali halaman dikunjungi. Jika atribut visitCounter belum dibuat (pertama kali Anda mengunjungi halaman), metode getAttribute() akan mengembalikan null, jadi Anda perlu memeriksa null. Hal yang sama berlaku untuk parameter permintaan. Jika pengguna tidak meneruskan parameter nama pengguna, nilainya akan menjadi nol. Dalam hal ini, kami akan menyapa pengguna sebagai anonim. Untuk meneruskan parameter dalam permintaan GET, variabel jalur digunakan, yaitu, Anda perlu mengakses tautan http://localhost:8080/hello?username=Pavel . Anda dapat membaca lebih lanjut tentang permintaan http di artikel seri sebelumnya. Sekarang aplikasi kita memiliki logika yang minim, namun error 404 pada jalur root sedikit mengganggu. Untuk memperbaikinya, mari buat servlet lain dan petakan ke halaman awal @WebServlet("/"). Tugas servlet ini adalah mengarahkan permintaan ke jalur “/ hello”. Ada dua cara untuk melakukan ini: menggunakan penerusan atau pengalihan. Mungkin ada baiknya memahami perbedaan di antara keduanya. meneruskan - mendelegasikan pemrosesan permintaan ke servlet lain di server, klien tidak terlibat. Untuk melakukannya, Anda perlu menambahkan kode berikut ke metode doGet() di servlet baru:
getServletContext().getRequestDispatcher("/hello").forward(req, resp);
Dalam kode ini, kita mengakses konteks servlet, mendapatkan manajer permintaan servlet yang diinginkan darinya dan memintanya untuk memproses permintaan spesifik dengan parameter yang ditentukan (req, resp). redirect - mengembalikan ke klien alamat yang perlu dia hubungi untuk memproses permintaannya. Sebagian besar browser membuka tautan yang dikirimkan secara otomatis. Untuk menerapkan pengalihan Anda perlu menambahkan kode ini:
resp.sendRedirect(req.getContextPath() + "/hello");
Di HttpServletResponse kita memanggil metode redirect() dan meneruskannya ke alamat yang perlu dihubungi klien. Detail penting: parameter http juga harus ditambahkan di akhir jalur pengalihan lengkap, yang sangat tidak nyaman. Dalam situasi kami, lebih baik menggunakan penerusan, tetapi kebetulan lebih baik menggunakan pengalihan. Jika Anda memahami perbedaan pekerjaan mereka, Anda tidak akan salah dalam memilih. Kode untuk servlet baru terlihat seperti ini:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/")
public class IndexServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// getServletContext().getRequestDispatcher("/hello").forward(req, resp);
resp.sendRedirect(req.getContextPath() + "/hello");
}
}
GO TO FULL VERSION