[ Pobierz całość w formacie PDF ]
.getDateHeader() odsy³a wartoœæ nag³Ã³wka nazwanego, jako long (reprezentuj¹cyDate), okreœlaj¹ce ile milisekund up³ynê³o od „epoki”) lub — 1 je¿eli nag³Ã³weknie zosta³ przes³any jako czêœæ zlecenia.Metoda ta zg³asza wyj¹tekIllegalArgumentException, kiedy wywo³ywany jest nag³Ã³wek, którego wartoœæ niemo¿e zostaæ przekszta³cona na Date.Metoda ta jest u¿yteczna przy operowaniunag³Ã³wkami takimi jak Last-Modified czy If-Modified-Since.GetIntHeader() odsy³a wartoœæ nag³Ã³wka nazwanego jako int, lub 1 — gdy nag³Ã³weknie zosta³ przes³any jako czêœæ zlecenia.Metoda zg³asza wyj¹tekNumberFormatException przy wywo³ywaniu nag³Ã³wka, którego wartoœæ nie mo¿e byæprzekszta³cona na int.Aplet mo¿e równie¿, u¿ywaj¹c metody getHeaderNames(), uzyskaæ nazwy wszystkichnag³Ã³wków:public Enumeration HttpServletRequest.getHeaderNames()Metoda ta odsy³a nazwy wszystkich nag³Ã³wków jako Enumeration (wyliczenie)obiektów String.W przypadku gdy nie by³o ¿adnych nag³Ã³wków metoda odsy³a pusteEnumeration.Interfejs API daje wdro¿eniom pojemników apletów prawouniemo¿liwienia takiego sposobu dostêpu do nag³Ã³wków, w przypadku któregometoda ta odsy³a null.Niektóre nag³Ã³wki takie jak np.Accept czy Accept-Language, obs³uguj¹ wartoœciwielokrotne.Zwykle wartoœci te s¹ przekazywane w jednym nag³Ã³wku, oddzielonymodstêpami, jednak niektóre przegl¹darki preferuj¹ przesy³anie wartoœciwielokrotnych przez nag³Ã³wki wielokrotne:Accept-Language: enAccept-Language: frAccept-Language: jaW celu odczytania nag³Ã³wka za pomoc¹ wartoœci wielokrotnych, aplety mog¹pos³u¿yæ siê metod¹ getHeaders():public Enumeration HttpServletRequest.getHeaders(String name)Omawiana metoda odsy³a wszystkie wartoœci dla danego nag³Ã³wka jako Enumeration(wyliczenie)obiektów String, lub puste Enumeration — je¿eli nag³Ã³wek nie zosta³przes³any jako czêœæ zlecenia.W przypadku gdy pojemnik apletu nie pozwala nadostêp do informacji nag³Ã³wka, wywo³anie odsy³a null.Nie istniej¹ metodygetDateHeaders() ani getIntHeaders().Na przyk³adzie 4.19 zosta³o zaprezentowane zastosowanie powy¿szych metod waplecie, który wyœwietla informacje o swoich nag³Ã³wkach zleceñ HTTP.Przyk³ad 4.19.„Podpatrywanie” nag³Ã³wkówimport java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;public class HeaderSnoop extends HttpServlet {public void doGet (HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException {res.setContentType(tekst/zwyk³y") ;PrintWriter out = res.getWriter();out.println("Nag³Ã³wki zleceniowe:") ;out.println() ;Enumeration names = req.getHeaderNames();while (names.hasMoreElements ()) {String name = (String) names.nextElement ();Enumeration values=req.getHeaders(name);//obs³uguj wartoœciwielokrotneif (values != null) {while (values.hasMoreElements ()) {String value = (String) values.nextElement();out.println (name + ": " + value);Przyk³adowy wydruk wyjœciowy z tego apletu móg³by wygl¹daæ w nastêpuj¹cysposób:Request Headers;Connection: Keep-AliveIf-Modified-Since: Thursday, 17-Feb-OO 23:23:58 GMT; length=297User-Agent: Mozilla/4.7 [en] (WiriNT; U)Host: localhost:8080Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*Accept-Language: enAccept-Language: esAccept-Charset: iso-8859-1,*,utf-8Cookie: JSESSIONID=ql886xlc31Strumieñ wyjœciowyZ ka¿dym zleceniem, obs³ugiwanym przez aplet zwi¹zany jest strumieñ wejœciowy.Tak jak w przypadku PrintWriter czy OutpurStream zwi¹zanych z zwi¹zanych zobiektem odpowiedzi apletu, do których mo¿e on pisaæ, w przypadku Reader czyInputStream zwi¹zanych z obiektem zlecenia apletu, mo¿e on z nich czytaæ.Daneodczytywane ze strumienia wejœciowego mog¹ mieæ dowolny typ treœci i dowoln¹d³ugoœæ.Strumieñ wejœciowy ma dwa zasadnicze cele:Przekazanie apletowi HTTP treœci zwi¹zanej ze zleceniem POSTPrzekazanie apletowi innemu ni¿ HTTP dane nieprzetworzone, przes³ane przezklientaW celu odczytania danych znakowych ze strumienia wejœciowego, powinniœmy u¿yæmetody getReader(), pobieraj¹c strumieñ wejœciowy jako obiekt BufferReader:public BufferedReader ServletRequest.getReader() throws IOExceptionPrzewaga u¿ywania BufferReader dla odczytywania danych znakowych, to poprawnet³umaczenie zestawów znaków.Metoda ta zg³asza wyj¹tek IllegalStateException wprzypadku gdy metoda getInputStream() zosta³a wywo³ana do tego samego zlecenia.Metoda ta zg³asza równie¿ wyj¹tek UnsupportedEncodingException je¿eli kodowanieznaków sygna³u wejœciowego jest nieobs³ugiwane lub nieznane.W celu odczytania danych binarnych ze strumienia wejœciowego, nale¿y pos³u¿yæsiê metod¹ getInputStream(), pobieraj¹c strumieñ wejœciowy jako obiektServletInputStream:public ServletInputStream ServletRequest.getInputStream() throws IOExceptionObiekt ServletInputStream jest bezpoœredni¹ podklas¹ InputStream i mo¿e byætraktowany jako normalny InputStream, z dodan¹ zdolnoœci¹ odczytywania sygna³uwejœciowego (wiersz na jeden raz) w tablicê bitów.Metoda zg³asza wyj¹tekIllegalStateException je¿eli getReader() zosta³a wywo³ana wczeœnie do tegosamego zlecenia.Kiedy ju¿ mamy ServletInputStream, mo¿emy odczytaæ z stamt¹dwiersz przy u¿yciu readLine():public int ServletInputStream.readLine(byte b[], int off, int len)throws IOExceptionMetoda ta czyta bity ze strumienia wejœciowego do tablicy bitów b, pocz¹wszy odpozycji w tablicy podanej przez off.Przerywa zaœ czytanie kiedy napotyka na \nlub kiedy przeczyta liczbê bitów len.*[Wdro¿enia readLine Interfejsu API 2.0 by³y obci¹¿one b³êdem, przekazanyparametr len by³ ignorowany, stwarzaj¹c problemy w³¹cznie zArrayIndexOutOfBoundsException — je¿eli d³ugoœæ linii przekracza³a objêtoœæbufora.B³¹d ten zosta³ usuniêty w Interfejsie 2.1 oraz póŸniejszychwersjach.]Znak koñcowy \n jest równie¿ czytany do bufora.Metoda ta odsy³a sczytan¹liczbê bajtów, lub 1 — je¿eli zosta³ osi¹gniêty koniec strumienia.Aplet mo¿e dodatkowo sprawdziæ typ zawartoœci oraz d³ugoœæ danych przesy³anychprzez strumieñ wejœciowy, przy wykorzystaniu metod getContentType() orazgetContentLength() odpowiednio:public String ServletRequest.getContentType()public int ServletRequest.getContentLength()getContentType() odsy³a typ noœnika treœci przesy³anej przez strumieñwejœciowy, lub null — je¿eli typ ten nie jest znany (tak jak w przypadku kiedynie ma ¿adnych danych).GetContentLength() odsy³a d³ugoœæ, w bitach, treœci przesy³anej przez strumieñwejœciowy, lub -1 — je¿eli d³ugoœæ ta nie jest znana.£adowanie plików przy u¿yciu strumienia wejœciowegoAplety mog¹ równie¿ otrzymywaæ za³adowania plików przy u¿yciu swojegostrumienia wejœciowego.Zanim dowiemy siê jak to jest mo¿liwe, musimyzaznaczyæ, ¿e ³adowanie plików jest na razie w fazie eksperymentowania i, wzwi¹zku z tym nie jest obs³ugiwane przez wszystkie przegl¹darki.Co siê tyczyNetscape’a to wprowadzi³ on obs³ugê ³adowania plików w Netscape Navigator’ze 3;w przypadku Microsoftu by³ to Internet Explorer 4.Pe³na charakterystyka ³adowani plików zosta³a zamieszczona w eksperymentalnymRFC 1867, dostêpnym na stronie http:/www.ietf.org/rfc/rfc1867
[ Pobierz całość w formacie PDF ]