Wie um zu zeigen, eine JSP-Seite mit Servlet, welches Bild in seine Antwort?
Servlet doGet () - code für ein Bild aus der Datenbank und speichern Bild in Antwort
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
//Get userid from session
try {
//Get photos from database in (image)
//Init servlet response.
response.reset();
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setContentType(image.getContenttype());
response.setHeader("Content-Length", String.valueOf(image.getLength()));
response.setHeader("Content-Disposition", "inline; filename=\"" + image.getTitle()
+ "\"");
//Prepare streams.
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
//Open streams.
input = new BufferedInputStream(image.getPhoto(), DEFAULT_BUFFER_SIZE);
output = new BufferedOutputStream(response.getOutputStream(),
DEFAULT_BUFFER_SIZE);
//Write file contents to response.
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
} finally {
//Gently close streams.
output.close();
input.close();
}
//Redirect it to photo page
RequestDispatcher rd = request.getRequestDispatcher
("/webplugin/jsp/profile/photos.jsp");
rd.forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
Jedoch, Wenn das servlet zeigt die JSP-Seite zeigt es only image
und nicht die JSP-Seite.
JSP-code:
... JSP code
<img src="Servlet url">
... JSP code cont...
Welche Ausgabe bekomme ich:
- Bekomme ich nur Bild statt Bild im JSP
- Wenn ich RequestDispatcher/sendRedirect() bekomme ich folgende Exception
java.lang.IllegalStateException: Cannot forward after response has been committed
Frage:
- Wie man Bild im JSP statt nur Bild im browser
- Wie Sie vermeiden, über Ausnahme?
EDIT: Meine Web.xml sieht so aus
<servlet>
<servlet-name>Photo Module</servlet-name>
<servlet-class>app.controllers.PhotoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Photo Module</servlet-name>
<url-pattern>/Photos</url-pattern>
</servlet-mapping>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Geben Sie die URL der JSP-Datei mit den
<img>
element in der browser-Adresse bar.Entfernen die folgenden Zeilen aus dem servlet-code.
Dem servlet sollte nur wieder das Bild. Nichts mehr. Es ist der webbrowser selbst, die angeblich zum herunterladen und Anzeige des Bildes, nicht der webserver.
Siehe auch:
<img src="Photos" >
aber immer noch, es zeigt nur Bild im browser und nicht Bild im JSP.http://localhost:8080/contextname/webplugin/jsp/profile/photos.jsp
ist, dann ist dieserimg src
im Grunde zeigen Sie aufhttp://localhost:8080/contextname/webplugin/jsp/profile/Photos
, aber das servlet hört tatsächlich aufhttp://localhost:8080/contextname/Photos
. Wie um das zu beheben, wieder die Antwort Lesen, die ich gepostet in Ihrer vorherigen Frage stackoverflow.com/questions/6315671/... ja, Sie brauchen, um stellen Sie die URL mit${pageContext.request.contextPath}
.<img src="${pageContext.request.contextPath}/Photos" />
aber es zeigt immer noch nur Bild und nicht-Bild innerhalb einer JSP.http://localhost:8080/contextname/webplugin/jsp/profile/photos.jsp
http://localhost:8080/contextname/webplugin/jsp/profile/photos.jsp
? Nachdem alle, tun Sie in keiner Weise verstehen, dass Sie die Anforderung der JSP-URL zu sehen, die JSP mit dem Bild und NICHT allein die Bild-URL?<a href="<c:url value="Photos" />">
was ich bin, drücken, um Anruf PhotoServlet mit web.xml<img>
nicht auf die URL der Sohle Bild. Befestigen Sie es entsprechend.<a href="<c:url value="/webplugin/jsp/profile/photos.jsp" />">
und so weiter. Mal ehrlich, ist das wirklich so schwer zu verstehen?<img>
und sendet eine neue Anfrage auf. Schließlich zeigt der browser das Bild. Mit einem HTTP-traffic checker wie Firebug in Net Registerkarte sollte Ihnen zeigen, all diese Anfragen (und Antworten).1, die Sie ändern Antwort und dann weiterleiten , ist es nutzlos. tun Sie es nicht.
2 Wie man Bild von servlet zu jsp