首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

HTTP Status 500,该如何处理

2013-06-19 
HTTP Status 500package package1import java.io.IOExceptionimport java.io.PrintWriterimport java.s

HTTP Status 500
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.

求高手解答!


[解决办法]
500是服务器错误,一般是连接不上数据库或配置哪里写错了,你先注释掉
package1.RegisterProcessAction.doGet(RegisterProcessAction.java:45)这里的代码,然后一步一步的调错试试。
[解决办法]
在每个response.sendRedirect() 调用后面加上return
[解决办法]


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



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


[解决办法]
sendRedirect无法被重复调用。

你想一下userid和password都为null的时候会发生什么?
[解决办法]
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 ;
要么改你这块的逻辑、

[解决办法]

引用:
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……


顶楼上。

response重定向之后的代码都会无效的
[解决办法]
顶5楼,这里是If判断,即使不符合条件也不影响下一个的判断。
所以即使这些if都不符合条件,最后一样运行,应该加入一个跳出。
[解决办法]
你不要用这个response去跳转,应该用的是request。。。具体里面的什么方法,记得不是很清楚。。
[解决办法]
response跳转是不能带参数的,,request跳转还可以带点参数过去。。

热点排行