English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Schauen wir uns zunächst ein Flussdiagramm an:
Der Ablauf des Servers bei der Verarbeitung von Anfragen:
)1Der Server öffnet für jede empfangene Anfrage eine neue Thread.
)2Der Server verpackt die Anfrageinformationen des Clients in das request-Objekt, request ist also der Träger der Anfrageinformationen!
)3Der Server erstellt ebenfalls eine response-Objekt, dieses Objekt ist mit der Verbindung des Clients verbunden und kann verwendet werden, um Antworten an den Client zu senden.
Aus dem Flussdiagramm lässt sich erkennen, dass die wichtigsten beiden Parameter in den Anfragen und Antworten von JavaWeb der request und response sind, diese beiden Parameter befinden sich im service( )-Methoden des Servlets.
1、response概念:
response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来对客户端进行响应的,这说明在service()方法中使用response对象可以完成对客户端的响应工作。
)1
)2
)3
)4,
2、response响应正文
)1
)2,
当然,如果响应正文内容为字符,那么使用response.getWriter(),如果响应内容是字节,例如下载时,那么可以使用response.getOutputStream()。
注意,在一个请求中,不能同时使用这两个流!也就是说,要么你使用repsonse.getWriter(),要么使用response.getOutputStream(),但不能同时使用这两个流。不然会抛出illegalStateException异常。
3、设置响应头信息
)1-type", "text/) html;charset=utf-8,-type响应头,该头的作用是告诉浏览器响应内容为html类型,编码为utf-8。而且同时会设置response的字符流编码为utf-8-8"):Zeichenkodierung der Antwortstroms auf utf setzen
)2,5; URL=http://www.baidu.com):5秒后自动跳转到百度主页。
4、设置状态码及其他方法
)1")response.setContentType("text/) html;charset=utf-8"):Äquivalent zu Aufruf von response.setHeader(“content-type", "text/) html;charset=utf-8"):Zeichenkodierung der Antwortstroms auf utf setzen
)2)response.setCharacterEncoding("utf-8)response.setCharacterEncoding("utf-8;
)3)response.setStatus(200): Statuscode setzen;
)4)response.sendError(404, "Die gesuchte Ressource ist nicht vorhanden")": Wenn ein Fehlerstatuscode gesendet wird, springt Tomcat zu einer festen Fehlerseite, aber Fehlerinformationen können angezeigt werden.
5、Umleitung (*****重点*****)
5.1 Was ist eine Umleitung (zwei Requests)?
Wenn Sie http://www.sun.com, dann wird der URL im Adressfeld des Browsers http://www.oracle.com/us/sun/index.htm, das ist eine Umleitung. Eine Umleitung ist eine Benachrichtigung des Servers an den Browser, um eine andere Adresse zu besuchen, d.h. einen weiteren Request auszuführen.
5.2 Wie kann eine Umleitung durchgeführt werden?
Antwort: Der Statuscode der Umleitung beträgt302,wenn wir302Zunächst verwenden wir das response-Objekt, um dem Browser eine Umleitung zu senden, indem wir eine Location festlegen, die eine verfügbare URL angibt, die der Browser besuchen soll, um die Umleitung durchzuführen.
Beispiel:
public class AServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setStatus(302); response.setHeader("Location", "http:)//www.baidu.com); } }
Die Funktion des obigen Codes ist: Nach dem Zugriff auf AServlet wird dem Browser mitgeteilt, dass er auf die Hauptseite von Baidu umgeleitet wird. Der Client-Browser parst den Statuscode302dann weiß der Server, dass er eine Umleitung ausführen soll, daher holt er sofort den Header Location ab und sendet den zweiten Request.
Es gibt auch eine schnelle Methode zur Umleitung:Daher kann die Methode response.sendRedirect() verwendet werden. Zum Beispiel können die beiden Zeilen im obigen Beispiel in response.sendRedirect("http://www.baidu.com) ersetzen.
request - Verpackt alle Anfragedaten des Clients
1、Request-Übersicht
Request ist ein Parameter des Servlet.service()-Methods, Typ javax.servlet.http.HttpServletRequest. Bei jedem von einem Client ausgestellten Request erstellt der Server ein Request-Objekt, packt die Anfragedaten in das Request-Objekt und übergibt sie an die service()-Methode, was bedeutet, dass in der service() -Methode über das Request-Objekt auf die Anfragedaten zugegriffen werden kann.
) Wie im Bild gezeigt:
)Die Funktionen des Requests können in die folgenden Arten unterteilt werden:
)1)Enthält die Daten des Request-Headers;
)2)Enthält die Daten des Request-Körpers, bei GET-Anfragen gibt es keinen Körper;
)3)Der Request ist ein Domänennamenobjekt, kann als Map verwendet werden, um Daten hinzuzufügen und zu erhalten;
)4)Der Request bietet die Funktionen Request-Weiterleitung und Request-Inklusion.
2、Request-Domänenmethoden
Request ist ein Domänennamenobjekt! In JavaWeb gibt es insgesamt vier Domänennamenobjekte, davon ist ServletContext ein Domänennamenobjekt, das im gesamten Anwendungsbereich nur ein ServletContext-Objekt erstellt. Ein Request ist einer von ihnen, der Request kann Daten in einer Anfrage teilen.
Eine Anfrage erstellt ein Request-Objekt. Wenn mehrere Servlets in einer Anfrage durchlaufen werden, können mehrere Servlets die Anfrage verwenden, um Daten zu teilen. Wir wissen noch nicht, wie viele Servlets in einer Anfrage durchlaufen werden.
Nachstehend sind die Methoden des Request-Domänenobjekts:
)1)void setAttribute(String name, Object value):Wird verwendet, um ein Objekt zu speichern, kann auch als das Speichern eines Domänennamen-Attributs bezeichnet werden, z.B.: servletContext.setAttribute(“xxx”, “XXX”) speichert einen Domänennamen-Attribut im Request, der Name des Attributs ist xxx, der Wert des Attributs ist XXX. Beachten Sie, dass, wenn diese Methode mehrmals aufgerufen wird und der gleiche Name verwendet wird, der vorherige Wert überschrieben wird, was mit Map übereinstimmt;
)2)Object getAttribute(String name):Wird verwendet, um Daten im Request zu erhalten. Bevor die Daten abgerufen werden, müssen sie zunächst gespeichert werden, z.B.: String value = (String)request.getAttribute(“xxx”);, um das Domänennamen Attribut xxx zu erhalten;
)3)void removeAttribute(String name):Wird verwendet, um das Attribut-Domänennamen im Request zu entfernen. Fügt das Attribut nicht existiert, führt diese Methode nichts aus;
)4)Enumeration getAttributeNames():获取所有域属性的名称;
3、request传递参数
最为常见的客户端传递参数方式有两种:
)1)浏览器地址栏直接输入:一定是GET请求;
)2)超链接:一定是GET请求;
)3)表单:可以是GET,也可以是POST,这取决与