1.1 interface Servlet

Ngayon ay magsisimula tayo ng bago at kawili-wiling paksa - mga servlet . Ito ay ang pagdaragdag ng mga servlet sa Java na humantong sa Java bilang de facto na pamantayan para sa malalaking aplikasyon ng server. 80% ng lahat ng enterprise software sa mundo ay nakasulat sa Java. At sa China, lahat ay 100%. Kaya ano ang mga servlet?

Ang isang servlet ay eksakto kung ano ang ginagawang isang serbisyo sa web ang isang Java program at pinapayagan itong magproseso ng mga kahilingan mula sa mga kliyente. At naging ganito...

Noong 90s, kaagad pagkatapos ng pagdating ng World Wide Web, lumitaw ang mga web client (browser) at web server. Karaniwang ipinamahagi ng mga web server ang file na inimbak nila sa Internet: mga html na pahina, script, larawan, atbp.

Sa ilang mga punto, ang lahat ay dumating sa konklusyon na ito ay kinakailangan upang gawing mas matalino ang magkabilang panig. Ang JavaScript ay idinagdag sa mga pahina ng HTML, at ang mga plugin ay idinagdag sa mga server - mga espesyal na script na tinawag bilang tugon sa ilang partikular na kahilingan at ginawang mas flexible at mas matalinong ang pag-uugali ng server.

Kaya ang isang servlet ay tulad ng isang Java plugin na binuo Java web-serverat pinapayagan itong magsagawa ng Java code kapag hiniling para sa ilang mga pahina. At ang Java code na ito, na kinakatawan ng isang klase na minana mula sa klase ng Servlet, ay ginawa kung ano ang inilaan ng mga developer nito.

At tulad ng alam mo na, ang pinakasikat na Java web server ay Tomcat . Pinangalanan, sa pamamagitan ng paraan, bilang parangal sa pusang Tom mula sa cartoon na "Tom and Jerry".

Paano nakikipag-ugnayan ang Tomcat sa mga servlet? Sa katunayan, ang prosesong ito ay na-standardize at tinatawag na servlet life cycle . Sa loob nito, ang isang servlet ay isang mai-load na bagay, at ang isang web server ay isang lalagyan ng servlet .

Kung ang servlet ay hindi pa na-load , kung gayon:

  1. Ang servlet class ay ni-load ng container.
  2. Ang lalagyan ay lumilikha ng isang instance ng klase (object) ng servlet.
  3. Ang lalagyan ay tumatawag ng isang paraan init()sa servlet object. Ang pamamaraan ay tinatawag na isang beses lamang.

Karaniwang ikot ng trabaho - pagseserbisyo sa kahilingan ng kliyente :

  • Ang bawat kahilingan ay pinoproseso sa isang hiwalay na thread.
  • Ang lalagyan ay tumatawag ng isang pamamaraan service()sa servlet at ipinapasa ang ServletRequest at ServletResponse na mga bagay doon.
  • Upang wakasan ang servlet, ang isang pamamaraan ay tinatawag destroy()sa servlet object. Ito ay tinatawag na isang beses lamang.

Maaaring maraming dahilan kung bakit nagwawakas ang isang servlet:

  • Ini-restart ng programmer ang web server, kinakailangang maayos na isara ang lahat ng mga servlet.
  • Ang programmer ay naglo-load ng isang bagong bersyon ng servlet, ang luma ay dapat na i-unload nang tama.
  • At iba pa.

Tandaan ang pangunahing bagay: ang web server at ang mga servlet nito ay dapat gumana nang walang pagkabigo at mag-restart sa loob ng ilang buwan, na naghahatid ng libu-libong kahilingan kada minuto. Samakatuwid, ang code para sa parehong paglo-load, at pagtatrabaho, at pagbabawas ng isang servlet ay dapat palaging nakasulat na napakataas na kalidad.

1.2 klase ng HttpServlet

Umiiral ang Servlet class upang i-standardize kung paano gumagana ang isang servlet at isang container. Ang mga programmer ay hindi direktang gumagana sa klase na ito. Well, bihira silang magtrabaho. Ang pinakakaraniwang ginagamit na klase HttpServletay minana mula sa Servlet.

Ang klase na ito ay may ilang mga pamamaraan na magiging kapaki-pakinabang sa atin. Madalas mong gamitin ang mga ito:

Pamamaraan Paglalarawan
1 init() Tinatawag nang isang beses kapag na-load ang servlet
2 destroy() Tinatawag nang isang beses kapag na-unload ang servlet
3 service(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong kahilingan sa servlet
4 doGet(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong kahilingan sa GET sa servlet
5 doPost(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong kahilingan sa POST sa servlet
6 doHead(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong kahilingan sa HEAD sa servlet
7 doDelete(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong DELETE na kahilingan sa servlet
8 doPut(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong kahilingan sa PUT sa servlet

init()Ang at mga pamamaraan destroy()ay minana mula sa klase ng Servlet. Samakatuwid, kung magpasya kang i-override ang mga ito sa iyong servlet, kakailanganin mo ring tawagan ang kanilang pagpapatupad mula sa base class. Ang utos ay ginagamit para dito super.method name().

Halimbawa ng Servlet:


public class FirstHttpServlet extends HttpServlet {
  
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // Getting the parameter “secret” from request
        String secret = request.getParameter("secret");
 
        // Put parameter “secret” into Http-session
        HttpSession session = request.getSession(true);
        session.setAttribute("secret", secret);
 
        // Print HTML as response for browser
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Header</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet example "+ secret +"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}

1.3 serbisyo(HttpServletRequest, HttpServletResponse) na pamamaraan

Kung titingnan mo ang pagproseso ng isang kahilingan ng kliyente mula sa punto ng view ng isang servlet, kung gayon ang mga bagay ay katulad nito.

Para sa bawat kahilingan ng kliyente, ang lalagyan (web server) ay lumilikha HttpServletRequestat mga bagay HttpServletResponse, at pagkatapos ay tumatawag ng isang pamamaraan service(HttpServletRequest request, HttpServletResponse response)sa kaukulang servlet. Ang mga bagay na ito ay ipinapasa dito upang ang pamamaraan ay maaaring kumuha ng kinakailangang data mula sa requestat ilagay ang resulta ng gawain sa response.

Ang pamamaraan service()ay may default na pagpapatupad. Kung hindi ito muling tinukoy, pagkatapos ay isasagawa ito. Ganun ang ginagawa niya.

service()Tinutukoy ng pamamaraan ang uri ng pamamaraan ng HTTP mula sa kahilingan (GET, POST, ...) at tinatawag ang pamamaraang naaayon sa kahilingan.

Pamamaraan Paglalarawan
1 service(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong kahilingan sa servlet
2 doGet(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong kahilingan sa GET sa servlet
3 doPost(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong kahilingan sa POST sa servlet
4 doHead(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong kahilingan sa HEAD sa servlet
5 doDelete(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong DELETE na kahilingan sa servlet
6 doPut(HttpRequest, HttpResponse) Tinatawag para sa bawat bagong kahilingan sa PUT sa servlet

Sa iyong klase, maaari mong muling tukuyin ang isang pamamaraan service(), o iwanan ito, ngunit pagkatapos ay muling tukuyin ang mga pamamaraan doGet(), doPost(), ... kung kinakailangan.