提交响应后无法调用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)
为什么会这样呢老师
33
收起
正在回答
1回答
同学你好,在转发后不能在重定向了,要结束doGet()方法,同学可以使用return;语句。
参考代码如下:

祝学习愉快~
3. Java 数据库开发与实战应用
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星