【问题标题】:java.lang.IllegalStateException: Cannot forward after response has been committed after add `return`java.lang.IllegalStateException:添加`return`后提交响应后无法转发
【发布时间】:2015-01-27 23:12:00
【问题描述】:

我想在用户输入名称和密码后重定向 url,但出现了问题。 有人说forward(request,response)后面加return,这个方法不行。

    RequestDispatcher dispatcher;
    String username = request.getParameter("username");
    String passwd = request.getParameter("passwd");
    if(username != null && passwd != null){
        try{
            Database database = new Database("com.mysql.jdbc.Driver",
                    "jdbc:mysql://localhost:3306/picshow","root","000000");
            ResultSet rs = database.query("select * from ps_user where name=?", username);
            if(rs.next()){
                if(rs.getString("passwd").equals(passwd)){
                    HttpSession session = request.getSession();
                    session.setAttribute("username", username);
                    System.out.println("login successful");
                    dispatcher = request.getRequestDispatcher(request.getContextPath()+"/personalpage.jsp");
                    dispatcher.forward(request, response);
                    return;
                }else {
                    errMsg = "invalid password";
                }
            }else {
                errMsg="user not exist";
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        if(errMsg != null && !errMsg.equals("")){
            dispatcher = request.getRequestDispatcher(request.getContextPath()+"/login.jsp");
            request.setAttribute("errMsg", errMsg);
            dispatcher.forward(request, response);
            return;
        }
    }else {
        dispatcher = request.getRequestDispatcher(request.getContextPath()+"/login.jsp");
        dispatcher.forward(request, response);
        return;
    }

【问题讨论】:

    标签: java servlets requestdispatcher


    【解决方案1】:

    而是创建一个字符串变量,根据你的条件设置你的目的地,最后转发它。

    RequestDispatcher dispatcher;
    String username = request.getParameter("username");
    String passwd = request.getParameter("passwd");
    String destination = "";//new targe variable
    if(username != null && passwd != null){
        try{
            Database database = new Database("com.mysql.jdbc.Driver",
                    "jdbc:mysql://localhost:3306/picshow","root","000000");
            ResultSet rs = database.query("select * from ps_user where name=?", username);
            if(rs.next()){
                if(rs.getString("passwd").equals(passwd)){
                    HttpSession session = request.getSession();
                    session.setAttribute("username", username);
                    System.out.println("login successful");
                    destination=request.getContextPath()+"/personalpage.jsp";//set your target
                }else {
                    errMsg = "invalid password";
                }
            }else {
                errMsg="user not exist";
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        if(errMsg != null && !errMsg.equals("")){
            destination=request.getContextPath()+"/login.jsp";//set your target
            request.setAttribute("errMsg", errMsg);
        }
    }else {
        destination=request.getRequestDispatcher(request.getContextPath()+"/login.jsp");//set 
    }
    
    dispatcher = request.getRequestDispatcher(destination);
    dispatcher.forward(request, response);
    

    【讨论】:

    • 感谢您的回答,我已经找到了错误的原因。原因是我两次调用forward(在这段代码之前)。所以这段代码是正确的......
    猜你喜欢
    • 2013-09-15
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2014-05-09
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    相关资源
    最近更新 更多