HTTP Status 500 - Cannot call sendRedirect() after the response has been committ

wo__666 2012-09-25 11:19:35
package package1;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import javax.servlet.ServletConfig;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class RegisterProcessAction
*/
public class RegisterProcessAction extends HttpServlet {
private static final long serialVersionUID = 1L;
private Connection cn = null;
private String drivername = null;
private String url = null;
private String user = null;
private String password = null;
public void init(ServletConfig config) throws ServletException
{
super.init(config);
drivername = config.getInitParameter("drivername");
url = config.getInitParameter("url");
try{
Class.forName(drivername);
cn = DriverManager.getConnection(url,user,password);
}catch(Exception e){
System.out.println("取得数据库连接错误:"+e.getMessage());
}
}


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userid = request.getParameter("userid");
String password = request.getParameter("password");
String repassword = request.getParameter("repassword");
String name = request.getParameter("name");
if(userid==null||userid.trim().length()==0){
response.sendRedirect("register.jsp");
}
if(password==null||password.trim().length()==0){
response.sendRedirect("register.jsp");
}
if(repassword==null||repassword.trim().length()==0){
response.sendRedirect("register.jsp");
}
if(!password.equals(repassword)){
response.sendRedirect("register.jsp");
}
if(name!=null&&name.trim().length()>0){
name = new String(name.getBytes("UTF-8"));
}
String sql = "insert into register(userid,name,password)values(?,?,?)";
try{
PreparedStatement ps = cn.prepareStatement(sql);
ps.setString(1, userid);
ps.setString(2, name);
ps.setString(3, password);
ps.executeUpdate();
ps.close();
response.sendRedirect("success.jsp");
}catch(Exception e){
System.out.println("错误:"+e.getMessage());
response.sendRedirect("register.jsp");
}
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
public void destroy(){
super.destroy();
try{
cn.close();
}catch(Exception e){
System.out.println("关闭数据库错误:"+e.getMessage());
}
}

}

运行之后老是出现HTTP Status 500 - Cannot call sendRedirect() after the response has been committed

--------------------------------------------------------------------------------

type Exception report

message Cannot call sendRedirect() after the response has been committed

description The server encountered an internal error (Cannot call sendRedirect() after the response has been committed) that prevented it from fulfilling this request.

exception

java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:483)
package1.RegisterProcessAction.doGet(RegisterProcessAction.java:45)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.29 logs.

求高手解答!

...全文
6634 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
糖炒粟子 2014-04-17
  • 打赏
  • 举报
回复
if-else if-else if - else s这样使用
财富自由之路 2013-06-13
  • 打赏
  • 举报
回复
[s[size=12px]二次ize=人][/size][/size]
yexiongMYBH 2012-10-07
  • 打赏
  • 举报
回复
response跳转是不能带参数的,,request跳转还可以带点参数过去。。
yexiongMYBH 2012-10-07
  • 打赏
  • 举报
回复
你不要用这个response去跳转,应该用的是request。。。具体里面的什么方法,记得不是很清楚。。
失落夏天 2012-10-05
  • 打赏
  • 举报
回复
顶5楼,这里是If判断,即使不符合条件也不影响下一个的判断。
所以即使这些if都不符合条件,最后一样运行,应该加入一个跳出。
soton_dolphin 2012-09-26
  • 打赏
  • 举报
回复
在每个response.sendRedirect() 调用后面加上return
leandzgc 2012-09-26
  • 打赏
  • 举报
回复
500是服务器错误,一般是连接不上数据库或配置哪里写错了,你先注释掉
package1.RegisterProcessAction.doGet(RegisterProcessAction.java:45)这里的代码,然后一步一步的调错试试。
ciltr 2012-09-26
  • 打赏
  • 举报
回复
sendRedirect无法被重复调用。

你想一下userid和password都为null的时候会发生什么?
  • 打赏
  • 举报
回复

ActionForward forward = new ActionForward("XXX.jsp");
forward.setRedirect(true);
return forward ;



protected void doGet()最好不要定义void类型的,改成ActionForward 类型,像上面那样重定向。

walkman_22 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
if(userid==null||userid.trim().length()==0){
response.sendRedirect("register.jsp");
}
if(password==null||password.trim().length()==0){
response.sendRedirect("register.jsp");
}
if(repassword==nul……
[/Quote]

顶楼上。

response重定向之后的代码都会无效的
  • 打赏
  • 举报
回复
if(userid==null||userid.trim().length()==0){
response.sendRedirect("register.jsp");
}
if(password==null||password.trim().length()==0){
response.sendRedirect("register.jsp");
}
if(repassword==null||repassword.trim().length()==0){
response.sendRedirect("register.jsp");
}
if(!password.equals(repassword)){
response.sendRedirect("register.jsp");
}
其实我不懂你这if的逻辑

如果都进入这些if里面了 都会执行response.sendRedirect("register.jsp");

而response.sendRedirect只能执行一次、像#4楼说的无法被重复调用多次

你得把你这个逻辑搞清楚了、

如果都进入了if 你会执行很多次的response.sendRedirect
要么解决像#2楼说的加return ;
要么改你这块的逻辑、

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧