2012-04-03 22 views
0

Wir wollen jPlayer verwenden, einen HTML5 Audio Player mit Firefox, um .ogg Dateien abzuspielen. Wir haben festgestellt, dass es Probleme mit HTML5-Audio und Firefox gibt, wenn man das MEME-Attribut in der HTTP-Antwort berücksichtigt. In diesem Fall ähnelt unser Inhaltstyp "audio/ogg; charset = UTF-8". Wir denken, dass das Entfernen der Zeichensatzcodierung dazu führen könnte, dass Firefox die Datei korrekt interpretiert.Jetty HttpServletResponse kann nicht geändert werden

Daher habe ich in meiner Frühjahrsimplementierung Folgendes versucht: response.setContentType ("audio/ogg"); response.setCharacterEncoding ("");

Die erste Zeile sollte keine Codierung festlegen. Es ist jedoch schon vorher im Antwortobjekt vorhanden (dies wurde beim Debuggen erkannt). Das Seltsame ist: Die zweite Zeile ändert nichts, die Zeichencodierung wird nicht verändert. Dieses Verhalten steht im Widerspruch zur API-Beschreibung.

Referenz: es funktioniert nicht wie bei der Probe # 2 von diesem Beitrag beschrieben: Jetty Response with no Charset

ich irgendwelche Ideen, wie man zu schätzen wissen, das Problem zu beheben.

Cheers, Chris

+0

** Welche Version von Jetty? ** _Bitte geben Sie alle relevanten Details in Ihrer SO Fragen. Es gibt 3 große und mehrere kleinere Versionen von Jetty in einer weit verbreiteten Verwendung - es ist fast unmöglich für uns, Ihre Ergebnisse zu verifizieren, es sei denn, wir wissen, von welcher Version Sie sprechen._ – Tim

+0

@Tim: Sie haben völlig Recht. Wir arbeiten mit Jetty 7.4.5 und SpringSource 2.9.1.RELEASE. Vielen Dank! – Chris

Antwort

0

Ich weiß nicht, ob dies etwas anderes tun, aber man konnte direkt die bequeme Methode und Aufrufen setHeader Methode versuchen unter Umgehung:

setHeader("Content-Type", "audio/ogg"); 

Wenn Sie wirklich stolpern über eine Art Bug in Jetty ist es einen Versuch wert.

+0

Danke, habe das aber schon probiert -> gleiches Ergebnis. Wenn Sie dies nur verwenden, wird die Zeichenverschlüsselung automatisch auf UTF-8 gesetzt. Noch eine Bemerkung: Wenn ich die Kodierung in meiner web.xml-Datei ändere, wird sie auch in der HTTP-Antwort geändert (so wie sie sollte), also wird sie nirgendwo explizit gesetzt. – Chris

2

„Werke für mich ...“

Ich schrieb einige Beispiel-Code (unten) und es lief gegen 7.4.5 ich (obwohl Sie die Zeichen Codierung null anstatt "" gesetzt sollte) Der richtige Inhaltstyp wird gesendet.

Ich bin nicht sicher, was für Sie falsch läuft - vielleicht könnten Sie etwas Code posten.

Meine beste Vermutung ist, dass Sie versuchen, den Inhaltstyp festzulegen, nachdem Sie bereits Inhalte gesendet haben. Da es sich bei dem Inhaltstyp um eine Kopfzeile handelt, müssen Sie diese festlegen, bevor der Body übergeben wird.

public class JettyServer 
{ 
    public static class OggServlet extends HttpServlet 
    { 
     protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException 
     { 
      File file = new File("src/main/ogg/file.ogg"); 

      response.setContentType("audio/ogg"); 
      response.setCharacterEncoding(null); 
      response.setContentLength((int) file.length()); 

      FileInputStream in = new FileInputStream(file); 
      int by; 
      while ((by = in.read()) != -1) 
      { 
       response.getOutputStream().write(by); 
      } 
     } 
    } 

    public static void main(String[] args) throws Exception 
    { 
     Server server = new Server(8080); 
     ServletContextHandler handler = new ServletContextHandler(); 
     handler.addServlet(OggServlet.class, "/audio"); 
     server.setHandler(handler); 
     server.start(); 
    } 
} 
Verwandte Themen