Acesta este doar o parte a referatului! Referatul original trebuie descarcat!
Preview
Pentru fluxurile de intrare este folosită clasa:
public abstract class ServletInputStream extends InputStream.
Un flux de intrare poate citi date la nivel de octet, furnizând în plus metoda readLine pentru citirea de linii:
public int readLine(byte[] octeti, int depl, int nr)
citeşte în octeti câte o linie din fluxul de intrare, plecând de la poziţia curentă, cu deplasarea depl. Metoda se termină fie la detectarea sfârşitului de linie după citirea a maximum nr octeţi (caz în care rezultatul întors este numărul de octeţi citiţi), fie la citirea a nr octeţi fără detectarea sfârşitului de linie (caz în care întoarce valoarea -1).
Pentru un obiect-cerere (de unul dintre tipurile ServletRequest sau HttpServletRequest) putem regăsi fluxul de intrare prin invocarea următoarei metode a clasei ServletRequest :
public ServletInputStream getInputStream()
Pentru fluxurile de ieşire este folosită clasa:
public abstract class ServletOutputStream extends OutputStream
Pentru un obiect-răspuns (de unul dintre tipurile ServletResponse sau HttpServletResponse) putem regăsi fluxul de ieşire prin invocarea uneia dintre metodele următoare, ambele folosite dacă dorim ca transmiterea să se facă la nivel de octet:
public ServletOutputStream getOutputStream()
din interfaţa ServletResponse;
public PrintWriter getWriter()
din interfaţa HttpServletResponse. Invocarea metodei flush() încheie acest răspuns. Setarea versiunii MIME (prin setContentType) trebuie făcută înainte de a folosi acest flux de ieşire.
Exemplu. Dorim să trimitem serverului un nume de fişier, folosind metoda POST. Servletul va folosi fluxul său de intrare pentru a citi din el numele fişierului.
Clientul va cere prin intermediul browser-ului fişierul File.html următor:
În fereastra browser-ului vor apărea un câmp de text, un buton cu eticheta Browse şi un al doilea buton cu eticheta Apasa.
Acţionarea butonului Browse permite alegerea unui fişier al cărui nume (cu calea completă) este înscris în câmpul de text. Acţionarea butonului Apasa transmite serverului aceste informaţii, care le prelucrează prin următorul servlet:
public class File extends HttpServlet {
public void doPost(HttpServletRequest req,
HttpServletResponse resp)
throws IOException, ServletException {
ServletInputStream f = req.getInputStream();
String s=\"\"; int c;
while( (c=f.read()) != -1) s += (char) c;
StringTokenizer st = new StringTokenizer(s,\"&\");
while( st.hasMoreTokens() )
System.out.println(st.nextToken());
}
}
Sunt necesare câteva explicaţii.
S-a citit în s informaţia din fluxul de intrare. Aceată informaţie este prelucrată cu StringTokenizer, pentru care am prevăzut delimitatorul \'&\'.
Presupunând că am ales să trimitem numele de fişier autoexec.bat din C:, informaţia afişată de server în fereastra Tomcat va avea forma:
fisier=C%3A%5CAUTOEXEC.BAT
Buton=Apasa
deoarece, la transmiterea informaţiei, caracterul \':\' este înlocuit prin şirul de caractere \"%3A\", iar caracterul \'\\\' este înlocuit prin şirul de caractere \"%5C\", conform schemei de codare implicite.