严重: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:610)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:188)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:77)
at org.apache.jsp.yanzhengma_jsp._jspService(yanzhengma_jsp.java:128)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:413)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Unknown Source)
运行Tomcat就抱错,能进入第一个页面但不能进入第二个页面,报错页面的错误提示
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: java.lang.NullPointerException
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
root cause java.lang.NullPointerException
wyf.cgq.LoginDB.login(LoginDB.java:20)
wyf.cgq.LoginAction.execute(LoginAction.java:57)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept

解决方案 »

  1.   

    java.lang.NullPointerException
    wyf.cgq.LoginDB.login(LoginDB.java:20)空指针,看看哪个值没取到,这个20行
      

  2.   

    照着书上写的,我估计这里是不是有错rs=pstmt.executeQuery();
      

  3.   

    你是不是用来操作流了?
    在servlet中我没有查到好的方法;
    直接用jsp吧 
    在使用完输出流以后调用以下两行代码即可:
    out.clear();
    out = pageContext.pushBody();
      

  4.   

    这有个相关的文章:
    http://club.tech.sina.com.cn/thread-673833-1-1.html
      

  5.   

    用Struts2写的系统
    public class LoginDB
    {
    public static String[] login(String uid,String pwd)
    {
    String[] impinfo=new String[2];//impinfo[0]:0表示没有这个用户,1表示是人事部的人,2表示不是人事部的人
    impinfo[0]="0";
    String impId=null;
    Connection conn=null;
    PreparedStatement pstmt=null;
    ResultSet rs=null;
    try
    {
    conn=getConnection();
    String sql="select impRight,impId from userinfo where impId=? and pwd=?";
    pstmt=conn.prepareStatement(sql);
    pstmt.setString(1,uid);
    pstmt.setString(2,pwd);
    rs=pstmt.executeQuery();
    if(rs.next())
    {
    impinfo[0]=rs.getInt("impRight")+"";
    impinfo[1]=rs.getString("impId");
    }
    else
    {
    impinfo[0]="0";
    }
    }
    catch(SQLException e)
    {
    e.printStackTrace();
    }
    finally
    {
    try
    {
    if(conn!=null){conn.close();}
    if(pstmt!=null){pstmt.close();}
    if(rs!=null){rs.close();}
    }
    catch(SQLException e)
    {
    e.printStackTrace();
    }
    }
    return impinfo;
    }
      

  6.   

    LoginAction.java:57行附近的reponse对象设置的对象重复了,你仔细对照下
      

  7.   

    if(rs.next())
    if->while
    还有关闭顺序也有问题
      

  8.   

    解决了,用的
    out.clear();
    out = pageContext.pushBody();方法解决的,谢谢大家帮助