有关getOutputStream() has already been called for this response,敬请留步!
功能:根据byte[],输出图片到JSP页面
开发:servlet + jsp
servlet代码:
/**
* showPic
* 测试使用,显示图片
* @param request HttpServletRequest
* @param response HttpServletResponse
*/
private void showPic(HttpServletRequest request, HttpServletResponse response)
{
request.setAttribute("leftPic",Common.busiLeftPic(request,response));//送入一个byte[]
request.setAttribute("centerPic",Common.busiCenterPic(request,response));//送入一个byte[]
request.setAttribute("rightPic",Common.busiRightPic(request,response));//送入一个byte[]
dispatch(request,response,JspName.picTest,getServletContext());
}
/**
* 资源分发
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param Location String
*/
public static void dispatch(HttpServletRequest request, HttpServletResponse response, String Location,ServletContext context)
{
RequestDispatcher dipatcher = null;
try
{
dipatcher = context.getRequestDispatcher(Location);
//dipatcher = request.getRequestDispatcher(Location);
dipatcher.forward(request,response);
}
catch(Exception e)
{
System.out.println("dispatch Err: " + e.getMessage());
}
dipatcher = null;
}
JSP页面
<%@ page language="java" import="java.sql.*" errorPage="" %>
<%@ page import= "java.lang.*"%>
<%@ page import= "java.sql.*"%>
<%@ page import= "java.util.*"%>
<%
response.setContentType("image/jpeg");
byte[] leftPic = null;
if( request.getAttribute("leftPic") != null )
leftPic = (byte[])request.getAttribute("leftPic");
ServletOutputStream leftSos = response.getOutputStream();
leftSos.write(leftPic,0,leftPic.length);
leftSos.flush();
leftSos.close();
%>
错误类型:
ApplicationDispatcher[]: Servlet.service() for servlet debugjsp threw exception
org.apache.jasper.JasperException: getOutputStream() has already been called for this response
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356)
at com.freely.busi.Common.dispatch(Common.java:36)
at com.freely.busi.OperatorMgr.showPic(OperatorMgr.java:71)
at com.freely.busi.OperatorMgr.doGet(OperatorMgr.java:55)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:601)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)
dispatch Err: getOutputStream() has already been called for this response