Žádost klienta JSP
Akce JSP, které používají konstrukce v syntaxi XML k řízení chování servletového enginu. Dozvíme se podrobněji o různých prvcích akcí JSP, jako je požadavek klienta, odpověď serveru, stavové kódy HTTP.
Žádost klienta JSP
- Když je webová stránka požadována, odešle informace na webový server v hlavičce HTTP.
- Tyto informace můžeme použít pomocí objektu HTTPServletRequest.
- Informace odeslané prohlížečem jsou uloženy v záhlaví požadavku HTTP požadavku.
- K odesílání informací do objektu požadavku používáme různé hlavičky.
Záhlaví v JSP
Různé hlavičky v JSP jsou popsány níže:
Hlavička | Description | Příklad |
---|---|---|
akceptovat | Určuje typy MIME, které prohlížeč nebo jiní klienti zvládnou | Obrázek/png nebo obrázek/jpeg |
Accept-charset | K zobrazení informací používá znakovou sadu používanou prohlížečem | ISO-8859-1 |
Accept- Kódování | Určuje typ kódování zpracovávaného prohlížečem | Gzip nebo komprimujte |
Přijímací jazyk | Specifikuje klienty zadaný jazyk | En, en_us |
Povolení | Záhlaví používané klienty při pokusu o přístup na webové stránky chráněné heslem | |
Přípojka | Označuje, zda klient dokáže zpracovat trvalá připojení HTTP (prohlížeč může načíst více souborů) | Udržet naživu |
Obsahová délka | Platí pro žádosti o zasílání příspěvků. Udává velikost dat příspěvku v bajtech | |
sušenka | Vrátí soubory cookie na server (ty, které byly dříve odeslány do prohlížeče) | |
hostitel | Určuje hostitele a port původní adresy URL | |
Pokud byly od té doby změněny | Označuje, že vyžaduje pouze stránku, pokud byla změněna nebo upravena | |
Pokud od té doby nezměněno | Označuje, že vyžaduje stránku pouze v případě, že nebyla změněna nebo upravena | |
Referrer | Označuje URL odkazující URL stránky | |
Uživatelský agent | Identifikuje prohlížeč nebo požadavek klienta |
Metody záhlaví HTTP v JSP
Ke čtení hlavičky HTTP na stránce JSP se používají následující metody:
- Cookie[] getCookies() – vrátí pole obsahující objekty cookie, které klient odeslal
- Výčet getAttributeNames() – obsahuje výčet jmen atributů pro požadavek
- Výčet getHeaderNames() – obsahuje výčet jmen hlavičky .
- Výčet getParameterNames() – obsahuje výčet získání názvů parametrů v požadavku.
- HttpSessiongetSession() – vrátí aktuální relaci spojenou s požadavkem, nebo pokud relaci nemá, vytvoří novou.
- Národní prostředí getLocale() – vrátí preferované národní prostředí, ve kterém klient přijme obsah. Bylo přiřazeno k odpovědi. Ve výchozím nastavení bude hodnotou výchozí národní prostředí serveru.
- Object getAttribute(název řetězce) – vrátí hodnotu pojmenovaného atributu jako objekt.
- ServletInputStreamgetInputStream() – načte tělo požadavku jako binární data.
- Řetězec getAuthType() – vrací název autentizačního schématu pro ochranu servletu
- Řetězec getCharacterEncoding() – vrací název kódování znaků použitého v těle požadavku.
- String getContentType() – vrací MIME typ těla požadavku.
- Řetězec getContextPath() – vrací část požadavku URI označuje kontextovou cestu URI
- String getHeader(název řetězce) – vrátí hlavičku požadavku jako řetězec
- String getMethod() – vrátí název metody HTTP jako GET, POST
- String getParameter(název řetězce) – vrátí parametr požadavku jako řetězec.
- Řetězec getPathInfo() – vrátí informace o cestě spojené s URL
- String getQueryString() – vrátí řetězec dotazu, který je přidružen k adrese URL požadavku
- Řetězec getServletPath() – vrátí část adres URL požadavku, která volá JSP
- String[] getParameterValues(název řetězce) – vrátí pole objektů typu string obsahující hodnoty, které má parametr požadavku
Příklad:
V níže uvedeném příkladu používáme různé metody pomocí objektu požadavku
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page import="java.io.* java.util.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Client Request Guru JSP</title> </head> <body> <h2>Client Request Guru JSP</h2> <table border="1"> <tr> <th>guru header</th><th>guru header Value(s)</th> </tr> <% HttpSession gurusession = request.getSession(); out.print("<tr><td>Session Name is </td><td>" +gurusession+ "</td.></tr>"); Locale gurulocale = request.getLocale (); out.print("<tr><td>Locale Name is</td><td>" +gurulocale + "</td></tr>"); String path = request.getPathInfo(); out.print("<tr><td>Path Name is</td><td>" +path+ "</td></tr>"); String lpath = request.get(); out.print("<tr><td>Context path is</td><td>" +lipath + "</td></tr>"); String servername = request.getServerName(); out.print("<tr><td>Server Name is </td><td>" +servername+ "</td></tr>"); int portname = request.getServerPort(); out.print("<tr><td>Server Port is </td><td>" +portname+ "</td></tr>"); Enumeration hnames = request.getHeaderNames(); while(hnames.hasMoreElements()) { String paramName = (String)hnames.nextElement(); out.print ("<tr><td>" + paramName + "</td>" ); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>"); } %>
Vysvětlení kódu:
17. řádek kódu: Pomocí objektu požadavku získáváme objekt relace této konkrétní relace a získáme hodnotu objektu této relace
19. řádek kódu: Pomocí objektu požadavku získáváme národní prostředí této konkrétní relace i.een_US locale pro daný JSP.
21. řádek kódu: Pomocí objektu požadavku získáváme informace o cestě pro tento JSP. V tomto případě je null, protože není uvedena žádná cesta pro URL.
23. řádek kódu: Pomocí objektu požadavku získáváme kontextovou cestu, tj. kořenovou cestu
25. řádek kódu: Pomocí objektu požadavku získáváme název serveru.
27. řádek kódu: Pomocí objektu požadavku získáváme port serveru.
Řádek 29–35 kódu: Pomocí objektu požadavku získáváme názvy hlaviček, které vycházejí jako výčet, a proto dostáváme všechny hodnoty hlaviček v názvech hlaviček.
V tomto získáme všechny hodnoty záhlaví jako a sušenka, hostitel, připojení, přijmout jazyk, přijmout kódování.
Když spustíte výše uvedený kód, získáte následující výstup:
Výstup:
Získáváme řadu hodnot, jako je název relace, název národního prostředí, název cesty, název serveru, název portu, hostitel, kontextová cesta a všechny hodnoty záhlaví. JSP.
Odezva serveru JSP
- Když je požadavek zpracován a poté je z webového serveru vygenerována odpověď. Skládá se ze stavového řádku, záhlaví odpovědí, prázdného řádku a dokumentu.
- Je to objekt třídy HTTPServletResponseclass, což je objekt odpovědi.
- Stavový řádek je verze HTML.
Záhlaví odpovědí v JSP
Záhlaví odpovědí v JSP jsou zmíněna níže:
Hlavička | Description |
---|---|
povolit | Určuje metody požadavku jako GET, POST, které server požaduje |
Ovládání mezipaměti | Dokument odpovědi lze uložit do mezipaměti. Může být veřejný, soukromý a bez mezipaměti. Žádná mezipaměť neurčuje, že dokument by neměl být ukládán do mezipaměti |
Přípojka | Dává pokyn, zda má prohlížeč používat uložená připojení HTTPS nebo ne. Zavřít hodnota znamená, že prohlížeč by neměl používat persistent v HTTPConnections a „keep-alive“ znamená používat trvalá připojení |
Obsah-dispozice | Zeptat se uživatele, zda uložit odpověď na disk nebo ne |
Kódování obsahu | Stránka musí být během přenosu zakódována |
Obsahová délka | Počet bajtů v odpovědi |
Typ obsahu | Určuje typ MIME odpovědi |
Vyprší | Určuje, do kdy by měl být obsah považován za zastaralý a neměl by být uložen do mezipaměti |
Poslední úprava | Označuje, kdy byl dokument naposledy změněn |
Lokalita | Měl by být součástí všech odpovědí, které mají stavový kód 300 jako stavový kód |
Obnovit | Určuje, jak najít aktualizovanou stránku. |
Opakovat-poté | Může být použit s odpovědí 503, aby řekl klientovi, jak brzy může opakovat požadavek |
Nastavit soubor cookie | Určuje soubor cookie spojený se stránkou |
Metody záhlaví odpovědi HTTP v JSP
Níže jsou uvedeny metody v JSP pomocí objektu odpovědi:
- String encodeRedirectURL(String URL) – zakóduje adresu URL v metodě redirectURL.
- String encodeURL(String URL) – zakóduje adresu URL zahrnutím ID relace.
- Boolean obsahujeHeader (název řetězce) – obsahuje záhlaví v JSP nebo ne.
- Boolean isCommited() – odpověď byla učiněna nebo ne.
- Void addCookie (Cookie cookie) – přidá cookie do odpovědi
- Void addDateHeader(název řetězce, hodnota řetězce) – přidá datum hlavičky odpovědi, název a hodnotu
- Void addHeader(název řetězce, hodnota řetězce) – přidá hlavičku odpovědi s názvem a hodnotou
- Void addIntHeader(název řetězce, hodnota int) – přidá hlavičku odpovědi s názvem a celočíselnou hodnotou
- Void flushBuffer() - vynutí obsah ve vyrovnávací paměti na výstup klientovi.
- Void reset() – vymaže data ve vyrovnávací paměti.
- Void resetBuffer - vymaže obsah vyrovnávací paměti v odpovědi bez vymazání stavových kódů.
- Void sendError(intsc,Stringmsg) – odešle klientovi chybovou odpověď pomocí stavového kódu.
- Void sendRedirect (umístění řetězce) – odešle klientovi dočasnou odpověď přesměrování.
- Prázdná sadaBufferVelikost (int size) – nastavuje velikost vyrovnávací paměti těla
- Void setCharacterEncoding (znaková sada řetězce) – nastavuje kódování znaků
- Void setContentType (typ řetězce) – nastavuje typ obsahu odpovědi
- Void setContentLength(intlen) – nastavuje délku obsahu odpovědi
- Void setLocale(Locale lcl) – nastavuje typ národního prostředí odpovědi
- Void setStatus(intsc) – nastavuje stavový kód odpovědi
Příklad:
V tomto příkladu pokrýváme různé metody getLocale,flushbuffer, getWriter, get ContentType, setIntHeader.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page import="java.io.* java.util.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Action Response</title> </head> <body> <center> <h2>Guru Response</h2> <% Locale lcl = response.getLocale(); out.println("Locale is : " + lcl + "\n"); response.flushBuffer(); PrintWriter output = response.getWriter(); output.println("This is from writer object"); String type = response.getContentType(); out.println("The content type : " + type + "\n"); // Set refresh,autoload time as 5 seconds response.setIntHeader("Refresh", 5); //Get current time Date dt = new Date(); out.println("Today's date is : " +dt.toString() + "\n"); %> </center> </body> </html>
Vysvětlení kódu:
13. řádek kódu: Pomocí objektu odpovědi získáme objekt národního prostředí této relace JSP
15. řádek kódu: Pomocí objektu odpovědi se flushbuffer používá k vynucení obsahu vyrovnávací paměti do klienta
16. řádek kódu: Pomocí objektu odpovědi získáme objekt Writer, který dostane výstup ve výstupním proudu
Řádek 18 kódu: Pomocí objektu odpovědi získáme typ obsahu, tj. typ MIME objektu odpovědi
21. řádek kódu: Pomocí objektu odezvy se používá k automatickému načítání každých 5 sekund, protože 5 je nastaveno jako druhý parametr
Když spustíte výše uvedený kód, získáte následující výstup:
Výstup:
- Zde získáme výstup, protože je to z objektu Writer z getWriter, který nám poskytne objekt a můžeme jej vytisknout ve výstupním proudu.
- Dostaneme národní prostředí jako en_us a typ obsahu jako text/html
- Získáme znakovou sadu jako ISO 8859
- Dnešní datum jako aktuální datum.
Stavové kódy HTTP JSP
- Když je požadavek zpracován, je vygenerována odpověď. Stavový řádek odpovědi se skládá z verze HTTP, stavového kódu a související zprávy.
- Zpráva je přímo spojena se stavovým kódem a verzí HTTP a je určena serverem.
- Ve výchozím nastavení je v JSP nastaveno 200 jako stavový kód, takže je nemusíme nastavovat explicitně.
- Můžeme nastavit jako metodu response.setStatus().
Kódy spadají do následujících 5 kategorií:
- 100-199 – Zde klient uvádí, že by měl reagovat nějakou akcí
- 200-299 – Znamená, že požadavek byl úspěšný
- 300-399 – Používají se pro soubory, které byly přesunuty a obvykle obsahují hlavičku umístění označující novou adresu
- 400-499 – Označuje chybu klienta
- 500-599 – Označuje chybu serveru
Některé běžné stavové kódy jsou uvedeny níže:
- 200 – Označuje, že je vše v pořádku
- 301 – Trvale se přestěhoval
- 304 – Nezměněno od poslední změny
- 400 – špatný požadavek
- 404 nenalezeno
- 405 – Metoda nenalezena
- 500 – Interní chyba serveru
- 503 služba nedostupná
- 505 – verze HTTP není podporována
Metody stavového kódu HTTP v JSP
Některé z metod stavového kódu v JSP jsou uvedeny níže:
- Public void setStatus(intstatusCode): Nastaví stavový kód podle toho, co chceme nastavit na této stránce JSP. To nám dá zprávu o nastaveném stavovém kódu
- Public void sendRedirect (String URL): Vygeneruje odpověď 302 spolu s hlavičkou umístění s URL nového dokumentu
- Public void sendError(intcode,Stringmsg): Odešle stavový kód spolu s krátkou zprávou a je naformátován v dokumentu HTML.
Příklad:
V tomto příkladu explicitně posíláme chybu na stránku JSP.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Status Code</title> </head> <body> <% response.sendError(404,"Guru Page Not Found"); %> </body> </html>
Vysvětlení kódu:
10. řádek kódu: Pomocí objektu odpovědi posíláme chybu na stránku se dvěma parametry.
- Stavový kód – Může to být kterýkoli z výše uvedených. V tomto případě jsme popsali jako 404
- Zpráva – Může to být jakákoli konkrétní zpráva, kterou chceme zobrazit chybu
Pokud provedete výše uvedený kód, získáte následující výstup:
Výstup:
Zde dostaneme chybový kód jako 404, který byl odeslán z kódu a také zobrazí zprávu „Guru Page not found“ zobrazenou ve výstupu.
Shrnutí
- V tomto článku jsme se dozvěděli o požadavku klienta a odpovědi serveru o tom, jak je požadavek zachycen a jak se s odpověďmi manipuluje.
- akce JSP které používají konstrukce v syntaxi XML k řízení chování servletového enginu.
- Když je webová stránka požadována, odešle informace na webový server v hlavičce HTTP.
- Když je požadavek zpracován a poté je z webového serveru vygenerována odpověď. Skládá se ze stavového řádku, záhlaví odpovědí, prázdného řádku a dokumentu.
- Když je požadavek zpracován, je vygenerována odpověď. Stavový řádek odpovědi se skládá z verze HTTP, stavového kódu a související zprávy.