English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Wie man in javaweb Anfragen und Antworten implementiert

 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,这取决与

的method属性值;

GET请求和POST请求的区别:

)1)GET请求:

请求参数会在浏览器的地址栏中显示,所以不安全;

请求参数长度限制长度在1K之内;

GET请求没有请求体,无法通过request.setCharacterEncoding()来设置参数的编码;

)2)POST请求:

请求参数不会显示浏览器的地址栏,相对安全;

请求参数长度没有限制;

4、请求转发和请求包含(*****重点*****)

无论是请求转发还是请求包含,都表示由多个Servlet共同来处理一个请求。例如Servlet1来处理请求,然后Servlet1又转发给Servlet2来继续处理这个请求。

请求转发和请求包含
RequestDispatcher rd = request.getRequestDispatcher("/MyServlet");  使用request获取RequestDispatcher对象,方法的参数是被转发或包含的Servlet的Servlet路径

请求转发:rd.forward(request,response);
请求包含:rd.include(request,response);

有时一个请求需要多个Servlet协作才能完成,所以需要在一个Servlet跳到另一个Servlet!
    > 一个请求跨多个Servlet,需要使用转发和包含。
 > 请求转发:由下一个Servlet完成响应体!当前Servlet可以设置响应头!(留头不留体)            即当前Servlet设置的相应头有效,相应体无效。
    > 请求包含:由两个Servlet共同未完成响应体!(都留)                                                                     都有效。     
    Sowohl bei Request Forwarding als auch bei Request Inclusion liegt der Request im gleichen Anfragenbereich! Der gleiche Request und die gleiche Response werden verwendet!  

Vergleich von Anfrage-Forwarding und Request-Include:

)1) Wenn eine Anfrage von AServlet zu BServlet umgeleitet wird, ist es in AServlet nicht erlaubt, den Antwortkörper weiter auszugeben, d.h. es kann nicht weiter response.getWriter() und response.getOutputStream() verwendet werden, um dem Client auszugeben, diese Aufgabe sollte von BServlet erledigt werden; Wenn der Request-Include verwendet wird, gibt es diese Einschränkung nicht;

)2) Obwohl das Anfrage-Forwarding keine Antwortkörper ausgeben kann, kann dennoch die Antwortkopfzeile festgelegt werden, z.B.: response.setContentType(”text/) html;charset=utf-8);

)3) Die Anfragen enthalten werden hauptsächlich in JSP-Seiten angewendet, um die Zusammenführung mehrerer Seiten zu erreichen;

)4) Das Anfrage-Forwarding wird hauptsächlich in Servlets angewendet, und die Umleitungsziele sind hauptsächlich JSP-Seiten;

) Wie im Bild gezeigt:


Vergleich von Anfrage-Forwarding und Umleitung

)1) Das Anfrage-Forwarding ist eine Anfrage, während die Umleitung zwei Anfragen sind;

)2) Nach dem Anfrage-Forwarding ändert sich die Adresse im Browser-Adressfeld nicht, während die Umleitung dies tut, da die Umleitung zwei Anfragen sind;

)3) Das Ziel der Anfrage-Forwarding kann nur Ressourcen in dieser Anwendung sein, während das Ziel der Umleitung andere Anwendungen sein kann;

)4) Die Anfrage-Forwarding-Methoden für AServlet und BServlet sind identisch, d.h. entweder beide sind GET oder beide sind POST, da das Anfrage-Forwarding eine Anfrage ist;

)5) Der zweite Request der Umleitung muss immer GET sein;

 Das ist der gesamte Inhalt dieses Artikels. Wir hoffen, dass er Ihnen bei Ihrem Lernen hilft und dass Sie die Anleitungshilfe stark unterstützen.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrechtsinhaber. Der Inhalt wurde von Internetbenutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine Haftung für rechtliche Verpflichtungen. Wenn Sie urheberrechtlich relevante Inhalte entdecken, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden.3codebox.com (Bitte ersetzen Sie # durch @ beim Senden einer E-Mail zur Meldung von Verstößen und stellen Sie relevante Beweise zur Verfügung. Sobald nachgewiesen, wird diese Website die beanstandeten urheberrechtlichen Inhalte sofort löschen.)

Gefällt mir