Sobes.tech
Middle

Ինչպես է կատարվում HTTP հարցման մշակումը HttpServlet դասում?

sobes.tech AI

Պատասխան AI-ից

HTTP-պահանջի մշակումը HttpServlet դասում կատարվում է doGet, doPost, doPut, doDelete, doHead, doOptions, doTrace կամ service մեթոդներից մեկի վերագրումով:

Հարցման մշակման ցիկլը՝

  1. Սերվլետների կոնտեյները (օրինակ, Tomcat) ստանում է HTTP-հարցումը:
  2. Կոնտեյները որոշում է համապատասխան սերվլետը հարցման URL-ով:
  3. Եթե սերվլետը դեռ չի բեռնված, կոնտեյները այն ստեղծում է, կանչում init() մեթոդը (մեկ անգամ ողջ կյանքի ընթացքում) և տեղադրում է պուլում:
  4. Կոնտեյները ստեղծում է HttpServletRequest և HttpServletResponse օբյեկտները, որոնք պարունակում են հարցման տվյալները և տրամադրում մեթոդներ պատասխան ձևավորելու համար:
  5. Կոնտեյները կանչում է սերվլետի service(HttpServletRequest req, HttpServletResponse resp) մեթոդը:
  6. Ստանդարտ service-ի իրականացման ժամանակ, որոշում է HTTP մեթոդի տեսակն (GET, POST և այլն) և փոխանցում համապատասխան do<Method> մեթոդին՝ հարցման և պատասխանների օբյեկտները փոխանցելով:
  7. Ծրագրավորողը վերագրում է անհրաժեշտ do<Method> մեթոդը՝ հատուկ հարցման մշակման լոգիկայի համար:
  8. do<Method> մեթոդը ձևավորում է պատասխան՝ գրելով տվյալներ HttpServletResponse-ում:
  9. service-ի ավարտից հետո կոնտեյները ուղարկում է ձևավորված պատասխան հաճախորդին:
  10. Երբ կոնտեյները որոշում է սերվլետը անջատել (օրինակ, ծրագրի կանգնեցման ժամանակ), նա կանչում է destroy() մեթոդը ռեսուրսները ազատելու համար:

doGet-ի վերագրումը օրինակով՝

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // պատասխանին պարունակության տեսակն ու կոդավորումը սահմանել
        response.setContentType("text/html;charset=UTF-8");

        // ստանալ PrintWriter-ը պատասխանին գրելու համար
        try (PrintWriter out = response.getWriter()) {
            // HTML markup-ը գրել պատասխանին
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Ողջույն</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Բարև իմ սերվլետից!</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }
}

do<Method> մեթոդների հիմնական գործառույթներն ու նշանակությունը՝ աղյուսակով:

Մեթոդ Նպատակը
doGet GET-հարցումների մշակումը (մուտքագրում տվյալներ, իդեմպոտենտ գործողություններ):
doPost POST-հարցումների մշակումը (տվյալների ուղարկում և մշակում, ռեսուրսների ստեղծում):
doPut PUT-հարցումների մշակումը (ռեսուրսների թարմացում):
doDelete DELETE-հարցումների մշակումը (ռեսուրսների ջնջում):
doHead HEAD-հարցումների մշակումը (միայն պատասխանների վերնագրերը ստանալ):
doOptions OPTIONS-հարցումների մշակումը (հասանելի մեթոդների մասին տեղեկություն ստանալ):
doTrace TRACE-հարցումների մշակումը (խնդրահարույց, հարցման էկո):

service մեթոդի վերագրումը թույլ է տալիս ամբողջությամբ փոխել հարցման մենեջմենթի տրամաբանությունը, սակայն սովորաբար վերագրում են կոնկրետ do<Method> մեթոդները: