我做一个Struts的Demo , 首页面需要输入宠物ID , 密码 和 验证码 , 全部验证通过后 , 显示宠物的详细信息页面 . 这个功能我是完成了的 ,但是在完成后看到 Myeclipse的 console 中有一个错误信息 是这样的
严重: 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:186)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:77)
at org.apache.jsp.vcode_jsp._jspService(vcode_jsp.java:149)
错误信息中的最后一行指向的我的一个生成验证码的jsp 文件 , 出现上面错误最有可能是在Action 中 ,下面列出action代码
public ActionForward doLogin(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
HttpSession session = request.getSession(true);
DynaActionForm dynaAction = (DynaActionForm)form ;
int petId = ((Integer)dynaAction.get("petId")).intValue();
String password = dynaAction.getString("petPassword");
String vCode2 = dynaAction.getString("valiCode");
String vCode1 = (String)session.getAttribute("vcode");
PetInfo pet = biz.login(petId, password);
if(pet != null && vCode1.equals(vCode1)){
session.setAttribute("current_pet", pet);
try {
response.sendRedirect("ShowBaby.do?id="+petId);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null ;
}
ActionMessages errors = new ActionMessages();
if(!vCode1.equals(vCode2)){
errors.add("login_valiCode", new ActionMessage("errors.login.valiCode"));
super.addErrors(request, errors);
return mapping.findForward("fail");
}
errors.add("login_fail", new ActionMessage("errors.login.fail"));
super.saveErrors(request, errors);
return mapping.findForward("fail");
严重: 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:186)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:77)
at org.apache.jsp.vcode_jsp._jspService(vcode_jsp.java:149)
错误信息中的最后一行指向的我的一个生成验证码的jsp 文件 , 出现上面错误最有可能是在Action 中 ,下面列出action代码
public ActionForward doLogin(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
HttpSession session = request.getSession(true);
DynaActionForm dynaAction = (DynaActionForm)form ;
int petId = ((Integer)dynaAction.get("petId")).intValue();
String password = dynaAction.getString("petPassword");
String vCode2 = dynaAction.getString("valiCode");
String vCode1 = (String)session.getAttribute("vcode");
PetInfo pet = biz.login(petId, password);
if(pet != null && vCode1.equals(vCode1)){
session.setAttribute("current_pet", pet);
try {
response.sendRedirect("ShowBaby.do?id="+petId);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null ;
}
ActionMessages errors = new ActionMessages();
if(!vCode1.equals(vCode2)){
errors.add("login_valiCode", new ActionMessage("errors.login.valiCode"));
super.addErrors(request, errors);
return mapping.findForward("fail");
}
errors.add("login_fail", new ActionMessage("errors.login.fail"));
super.saveErrors(request, errors);
return mapping.findForward("fail");
解决方案 »
- hibernate-memcached的集成中,hibernate是采用什么作为memcached缓存的key。急求大牛,大蛇,大虾等各种大的帮助···
- 关于Tomcat启动异常
- struts2不用action可以转向吗?
- struts 2.0 文件名过长下载乱码
- 关于scoket连接FTP服务器的登录问题,请各位帮我看一下了.先谢了!
- oracle.xml.parser.v2.*;这个包在什么地方下载
- 求助帖 JAVA程序运行时JList中内容动态显示过程中有时候消失的问题
- java建模uml的工具常用的有什么呢
- datagramsocket问
- 高分求教中文标点符号的 unicode 的范围,请告知!!!急急急
- jsp如何获取从当前页面是从哪个页面跳转过来的
- smartupload上传的问题
session.setAttribute("current_pet", pet);
try {
response.sendRedirect("ShowBaby.do?id="+petId);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null ;
}
这两个都是跳转语句。。感觉后面那个return null不该这么写吧。。
这个当时一定要返回一个 ActionForward类型的数据的 , 在前面response 的情况下 , 后面也只能这样写了, 如果有什么更好的写法 , 请指教
在使用完输出流以后调用以下两行代码即可:
out.clear();
out = pageContext.pushBody();