response对象所封装的PrintWriter其实是和HTTP的应答输出流关联的,你在自己的javabeans里面new了一个PrintWriter如果没有明确指定和HTTP输出流关联,那么怎么可能得到你想要的结果呢?

解决方案 »

  1.   

    /**
         * 修改电子邮件
         * @param request HttpServletRequest
         * @param response HttpServletResponse
         * @throws IOException
         */
        public void modifyEmail(HttpServletRequest request, HttpServletResponse response) throws
                IOException{
            String newemail = request.getParameter("tb_nemail");        HttpSession session = request.getSession();
            PrintWriter out = response.getWriter();        String memberID = (String)session.getAttribute("memberID");
            try{
                //执行包
                String spStr = "{ call REGISTINFO.MODIFYEMAIL(?,?) }";            ArrayList params = new ArrayList();
                params = DbSetParams.setParam(1, newemail, DbParamType.DbVarchar,params);
                params = DbSetParams.setParam(2, memberID, DbParamType.DbVarchar,params);
                if (db.executeNonQueryCallSql(spStr, params)) {
                    out.print(errorMsg.Erroralert("电子邮件修改成功!","/MemberSpace/MemberUpgrade/emailChange.jsp", 0));
                } else {
                    out.print(errorMsg.Erroralert("电子邮件修改失败!","/MemberSpace/MemberUpgrade/emailChange.jsp", 0));
                }
            }catch(Exception ex){
                System.out.print("modifyEmail Exception :"+ex.toString());
            }
        }errorMsg是可以输出错误的js代码,这些都是在javabean中,以前可以实现输出的,现在怎么不行了?
      

  2.   

    估计丢出了一个异常吧.使用 out 打印异常信息看看
      

  3.   

    就是out打印不出东西来的,用system.out.println可以打印出东西来
      

  4.   

    丢出的异常应该是ioexception吧,已经丢出了啊
      

  5.   

    1. print完毕之后flush一下看看。
    2. debug一下看看你的errorMsg.Erroralert()方法返回是否为null或""。
      

  6.   

    谢谢 wingtrace(无心·无梦·无语) 的回答,我试了一下,errorMsg.Erroralert()能输出信息,不是null也不是"",再flush了也不行
      

  7.   

    这个jsp执行时不会抛出异常吗?你用了HttpServletResponse.getWriter(),这个方法不应该在jsp里面被调用。如果这是Servlet里的一个方法,那是没有问题的,但是在jsp里,容器已经调用了getWriter方法来初始化out对象,如果你再去调,就会出一个IllegalStateException。这个方法应该放在一个Servlet里,由Servlet的doGet或doPost方法来调。但是你把jsp和Servlet混起来了。如果我猜得没错,jsp执行时,会在这句PrintWriter out = response.getWriter();抛出异常。
      

  8.   

    谢谢 chongkai() 的回答,我试了一下,在jsp中并没有抛出异常,而且,作了一个例子,就是jsp调用javabean,在javabean里边用response.getWriter方法,也没有什么错误,奇怪的是那个就不行了
      

  9.   

    对不起,我搞错了,在jsp里调用response.getOutputStream()会抛出IllegalStateException。
      

  10.   

    我帮你写了个例子试了一下,没问题。java bean的代码package test;import javax.servlet.http.*;
    import java.io.*;public class OutTest {
      public void output(HttpServletRequest request, HttpServletResponse response)
      throws IOException{
        PrintWriter out = response.getWriter();
        out.println("hello world");
        
      }
    }jsp:<jsp:useBean id="outTest" class="test.OutTest"/>
    <%
    outTest.output(request, response);
    out.println("After bean invocation");
    %>页面输出结果:hello world After bean invocation