错误信息:HTTP Status 500 – Internal Server Error
Type Exception Report
Message Cannot call sendRedirect() after the response has been committed
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:488) servlet.LoginServlet.doPost(LoginServlet.java:38) javax.servlet.http.HttpServlet.service(HttpServlet.java:661) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Note The full stack trace of the root cause is available in the server logs.
原因:不能在response提交之后再调用response.sendRedirect(); response提交包括重定向、过滤器放行、转发,执行上述提交操作后,不能再对response进行操作,比如修改或再次提交。
解决:在response提交之前,完成对response的修改
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接收参数
String username = req.getParameter("username");
String password = req.getParameter("password");
//判断正误
if("admin".equals(username) && "000000".equals(password)){
resp.sendRedirect("success.jsp");
}else {
//如果输入的不正确,重定向到原来的jsp页面,但还想保留用户名,所以先创建cookie,保存用户名,然后添加到respond,最后重定向
//后台创建cookie
Cookie cookie = new Cookie("uname",username);//键值对的value里面存上用户原来输入的username
resp.addCookie(cookie);
resp.sendRedirect("index.jsp");
}