12-15-2010, 01:34 AM
You can't.
From JSP, only character stream should be used.
JSP pages were designed for *text* output. The "out" object is a Writer, which means it will play games with text encoding.
For binary output, like PDF or dynamically generated GIF, it's a better idea to use a servlet.
Having said that, since a JSP will be converted to a servlet, it's possible to modifed the output stream.
You must be careful to format your JSP to emit no whitespace
[image.jsp]
<%@ page import="java.io.*" %>
<%@ page import="java.net.*" %>
<%@page contentType="image/gif" %><%
OutputStream o = response.getOutputStream();
InputStream is =
new URL("http://myserver/myimage.gif").getInputStream();
byte[] buf = new byte[32 * 1024]; // 32k buffer
int nRead = 0;
while( (nRead=is.read(buf)) != -1 ) {
o.write(buf, 0, nRead);
}
o.flush();
o.close();// *important* to ensure no more jsp output
return;
%>
Thanks to Benjamin Grant for the bug fix.
There is a trimWhiteSpaces directive that should help to remove the whitespaces form the generated JSP.
In your JSP code :
<%@ page trimDirectiveWhitespaces="true" %>
Or in the jsp-config section your web.xml
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
If you really have a required space in the generated JSP then you need use the HTML non-breaking space entity : .
From JSP, only character stream should be used.
JSP pages were designed for *text* output. The "out" object is a Writer, which means it will play games with text encoding.
For binary output, like PDF or dynamically generated GIF, it's a better idea to use a servlet.
Having said that, since a JSP will be converted to a servlet, it's possible to modifed the output stream.
You must be careful to format your JSP to emit no whitespace
[image.jsp]
<%@ page import="java.io.*" %>
<%@ page import="java.net.*" %>
<%@page contentType="image/gif" %><%
OutputStream o = response.getOutputStream();
InputStream is =
new URL("http://myserver/myimage.gif").getInputStream();
byte[] buf = new byte[32 * 1024]; // 32k buffer
int nRead = 0;
while( (nRead=is.read(buf)) != -1 ) {
o.write(buf, 0, nRead);
}
o.flush();
o.close();// *important* to ensure no more jsp output
return;
%>
Thanks to Benjamin Grant for the bug fix.
There is a trimWhiteSpaces directive that should help to remove the whitespaces form the generated JSP.
In your JSP code :
<%@ page trimDirectiveWhitespaces="true" %>
Or in the jsp-config section your web.xml
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
If you really have a required space in the generated JSP then you need use the HTML non-breaking space entity : .