提交响应后无法调用sendRedirect()的异常

提交响应后无法调用sendRedirect()的异常

package com.imooc.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.imooc.domain.User;
import com.imooc.service.UserService;
import com.imooc.service.impl.UserServiceImpl;

/**
 * 用户注册Servlet
 */
@WebServlet("/RegistServlet")
public class RegistServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //数据接受
        String password1=request.getParameter("password1");
        String password2=request.getParameter("password2");
        String checkCode=request.getParameter("checkCode");
        String correctCheckCode=(String) request.getSession().getAttribute("checkCode");
        System.out.println(checkCode+correctCheckCode);
        //验证码校验
        if(checkCode==null||!checkCode.toLowerCase().equals(correctCheckCode.toLowerCase())) {
            request.setAttribute("regMsg", "验证码错误!");
            request.getRequestDispatcher("/reg.jsp").forward(request,response);
        }
        //密码校验
        if(!password1.equals(password2)) {
            request.setAttribute("regMsg", "两次输入的密码不匹配!");
            request.getRequestDispatcher("/reg.jsp").forward(request,response);
        }else if(password1.length()<6||password2.length()<6){
            request.setAttribute("regMsg", "密码过短!");
            request.getRequestDispatcher("/reg.jsp").forward(request,response);
        }else if(password1.length()>16||password2.length()>16) {
            request.setAttribute("regMsg", "密码过长!");
            request.getRequestDispatcher("/reg.jsp").forward(request,response);
        }
        //封装数据
        String username=request.getParameter("username");
        User newUser=new User();
        newUser.setUsername(username);
        newUser.setPassword(password1);
        //调用Service存入数据
        UserService userService=new UserServiceImpl();
        userService.registUser(newUser);
        response.sendRedirect(request.getContextPath()+"/login.jsp");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

报错:

严重: 在路径为[/MessageBoard]的上下文中,servlet[com.imooc.web.servlet.RegistServlet]的Servlet.service()引发异常
java.lang.IllegalStateException: 提交响应后无法调用sendRedirect()。
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:488)
    at com.imooc.web.servlet.RegistServlet.doGet(RegistServlet.java:57)
    at com.imooc.web.servlet.RegistServlet.doPost(RegistServlet.java:61)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.imooc.web.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:23)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:616)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1626)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

为什么会这样呢老师

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,在转发后不能在重定向了,要结束doGet()方法,同学可以使用return;语句。

参考代码如下:

http://img1.sycdn.imooc.com//climg/5ffe5b1e09c5537507720508.jpg

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师