KodeGym/Blog Jawa/Acak/Part 5. Servlets lan Java Servlet API. Nulis aplikasi web...
John Squirrels
tingkat
San Francisco

Part 5. Servlets lan Java Servlet API. Nulis aplikasi web prasaja

Diterbitake ing grup
Materi iki minangka bagéan saka seri "Introduction to Enterprise Development". Artikel sadurunge: Part 5. Servlets lan Java Servlet API.  Nulis aplikasi web sing prasaja - 1Apa sampeyan wis ngerti carane nulis aplikasi Java sing nampilake teks ing console, nanging sampeyan isih durung ngerti carane nggawe aplikasi web pisanan? Banget, nggawe dhewe nyaman. Ing artikel iki, kita bakal kenalan karo servlets lan nulis aplikasi sing bisa sampeyan banggakake menyang kanca-kanca tanpa ngirim file JAR lan tanpa meksa wong-wong mau ngundhuh Java. Ayo nulis aplikasi web sing prasaja . Yen sampeyan durung ngerti pendekatan sing digunakake ing pangembangan web, aku nyaranake sampeyan miwiti kanthi maca artikel pisanan ing seri " Introduction to Enterprise Development ".

Apa iku servlet?

Pisanan, ayo goleki apa servlet lan kenapa sampeyan kerep krungu babagan iki. Java Servlet API minangka API standar sing dimaksudake kanggo dileksanakake ing server. Sesambungan karo klien miturut skema panjalukan-respon. Servlet minangka kelas sing bisa nampa panjalukan saka klien lan menehi respon marang klien. Nyatane, servlet persis minangka blok bangunan sing digunakake kanggo nggawe arsitektur klien-server ing Jawa. Sampeyan bisa uga kelingan manawa kita wis ngomong babagan arsitektur kasebut ing salah sawijining artikel ing seri kasebut. Kita ora bakal ngalahake grumbulan: ayo langsung nulis kode.

Apa sampeyan kudu nggawe aplikasi web

Kanggo luwih gampang nalika nggarap servlet Java, sampeyan butuh IntelliJ IDEA Ultimate Edition. Iki minangka produk mbayar, nanging sampeyan bisa ngaktifake uji coba 30 dina utawa nggunakake versi akses awal, sing mesthi gratis. Uga, instal Apache Tomcat — server aplikasi kita. Tomcat minangka wadhah servlet: ngolah panjaluk sing mlebu lan ngirim menyang aplikasi kita. Download Tomcat ing kene .

Ayo nggawe aplikasi web pisanan kita

Yen kabeh wis siyap, nggawe proyek Maven. Yen sampeyan ora kenal karo Maven, deleng artikel sadurunge . Ayo miwiti!
  1. Ing pom.xml, tambahake dependensi javax.servlet-api lan nemtokake kemasan WAR:

    <?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 prasaja:

    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();
       }
    }
  2. Kanggo mbukak aplikasi, sampeyan kudu nggawe konfigurasi Tomcat:

    Part 5. Servlets lan Java Servlet API.  Nulis aplikasi web sing prasaja - 2Part 5. Servlets lan Java Servlet API.  Nulis aplikasi web sing prasaja - 3

  3. Sabanjure, kita nuduhake versi Tomcat sing bakal digunakake, lan URL lan port kanggo komunikasi karo server. Sampeyan kudu duwe kaya iki:

    Part 5. Servlets lan Java Servlet API.  Nulis aplikasi web sing prasaja - 4
  4. Saiki kita mung kudu nemtokake artefak (proyek sing dirakit ing arsip JAR) sing bakal dipasang ing wadhah kasebut. Sampeyan bisa ngeklik tombol Ndandani lan pilih perang njeblug : iki tegese sawise proyek dibangun maneh, artefak kasebut bakal diselehake kanthi otomatis ing wadhah servlet. Part 5. Servlets lan Java Servlet API.  Nulis aplikasi web sing prasaja - 5

  5. Nilai standar kanggo konteks Aplikasi yaiku servlets_war_exploded . Iki tegese kita ngakses aplikasi ing: http://localhost:8080/servlets_war_exploded .

    Napa kita pengin teks ekstra? Ayo mbusak sing ora perlu. Saiki alamat aplikasi web kita yaiku: http://localhost:8080 .

    Part 5. Servlets lan Java Servlet API.  Nulis aplikasi web sing prasaja - 6
  6. Klik OK. Kita weruh yen saiki bisa mbukak aplikasi kasebut:

    Part 5. Servlets lan Java Servlet API.  Nulis aplikasi web prasaja - 7

    Saiki nalika sampeyan mbukak aplikasi ing browser sampeyan, sampeyan kudu entuk kesalahan 404. Iki masuk akal, amarga alamat http: // localhost: 8080/ mbutuhake servlet sing peta menyang "/", nanging mung servlet kita peta menyang "/ hello" .

  7. Kita bisa ngakses ing http://localhost:8080/hello . Sawise nindakake, kita entuk jawaban sing dikarepake - senar "Hello"!

Yen kabeh bisa digunakake, ayo analisa kode kasebut. Kanggo nggawe HTTP-servlet metu saka kelas biasa , iku kudu oleh warisan kelas HttpServlet. Ing ndhuwur deklarasi kelas, kita nuduhake @WebServlet()anotasi. Iki ngendi kita ikatan (utawa map) servlet kanggo path tartamtu ("/ hello"). Anotasi iki mung katon ing Java Servlet API 3.0, mula Internet duwe akeh conto ing ngendi pemetaan servlet dumadi liwat file XML. Iki ora perlu maneh. Kanggo nangani panjalukan GET , kita ngilangi doGet()cara kasebut. Pay manungsa waé kanggo paramèter cara kang: HttpServletRequestlan HttpServletResponse. Objek kasebut HttpServletRequestmenehi kabeh informasi sing dibutuhake babagan panjaluk kasebut. Ing HttpServletResponse, kita nulis respon lan nyetel header sing perlu.

Nggarap paramèter lan sesi

Ayo nambah servlet supaya bisa ngolah paramèter panyuwunan lan nggarap 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();
   }
}
Saiki servlet bisa digunakake karo sesi, nambah nilai visitCountersaben kaca dibukak. Yen visitCounteratribut durung digawe (nalika riko pisanan menyang kaca), getAttribute()cara kasebut ngasilake null, mula kita kudu mriksa null. Padha dadi kanggo paramèter request. Yen pangguna ora ngliwati parameter jeneng pangguna, nilai kasebut bakal null. Ing kasus iki, kita menehi salam marang pangguna minangka pengunjung anonim. Kanggo pass parameter ing request GET, string query digunakake, Contone, kita bisa nggunakake URL ing ngisor iki: http: // localhost: 8080 / hello? Jeneng panganggo=Paulus. Sampeyan bisa maca liyane babagan panjalukan HTTP ing artikel sadurungeing seri. Aplikasi kita saiki ora duwe logika akeh, nanging rada ngganggu yen kita entuk kesalahan 404 ing path root. Kanggo ndandani iki, kita bakal nggawe servlet liyane lan peta menyang kaca wiwitan: @WebServlet("/"). Tujuan saka servlet iki kanggo ngarahake panjalukan menyang path "/ hello". Ana rong cara kanggo nindakake iki: nggunakake "maju" utawa "pangalihan". Mbok menawa ana gunane kanggo mangerteni bedane. A maju delegasi pangolahan panjalukan kanggo servlet liyane ing server. Klien ora melu. Kanggo nindakake iki, tambahake kode ing ngisor iki menyang metode doGet() servlet anyar:
getServletContext().getRequestDispatcher("/hello").forward(req, resp);
Ing kode iki, kita ngakses konteks servlet, njaluk dispatcher panjalukan kanggo servlet sing cocog, lan takon kanggo ngolah panjalukan tartamtu kanthi argumen sing ditemtokake (req, resp). A pangalihan bali menyang klien alamat sing kudu digunakake klien kanggo proses panjalukane. Umume browser kanthi otomatis navigasi menyang URL sing bali. Kanggo ngleksanakake pangalihan, sampeyan kudu nambah kode iki:
resp.sendRedirect(req.getContextPath() + "/hello");
Kita nelpon redirect()cara ing HttpServletResponseparameter lan pass alamat sing klien kudu nggunakake. Punika rincian penting: Parameter HTTP uga kudu ditambahake ing mburi path pangalihan lengkap, sing ora trep banget. Ing kahanan kita, luwih becik nggunakake forward, nanging kadhangkala nggunakake redirectluwih apik. Yen sampeyan ngerti bedane cara kerjane, sampeyan ora bakal salah milih. Kode kanggo servlet anyar katon kaya iki:
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");
   }
}

Ringkesan

Aplikasi web pisanan sampeyan wis rampung. Ing artikel sabanjure, sampeyan bakal sinau carane nyebarake tanpa nggunakake IntelliJ IDEA. Kita nulis aplikasi sing mung ngolah panjaluk GET. Cara HTTP sing isih ana ditangani kanthi cara sing padha - kanthi ngganti metode kelas induk sing cocog. Sampeyan bisa nggunakake servlet prasaja kaya iki kanggo mbangun aplikasi web serbaguna sing canggih. Mesthi, nggunakake kerangka gedhe kayata Spring nggawe iki luwih gampang. Nanging yen sampeyan pengin luwih jero babagan kabeh kemampuan servlet, sampeyan bisa maca spesifikasi resmi . Part 6. Wadah Servlet Part 7. Ngenalake pola MVC (Model-View-Controller)
Komentar
  • Popular
  • Anyar
  • lawas
Sampeyan kudu mlebu kanggo ninggalake komentar
Kaca iki durung duwe komentar