<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>request1</title>
</head>
<body>
<form action="MyServlet">username:<input type="text" name="username">
<input type="submit" value="提交"></form></body>
</html>---------------------------
import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MyServlet extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doGet(req, resp);

this.process(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);

this.process(req, resp);
}

protected void process(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

String username = req.getParameter("username");

if("123".equals(username)) {

req.getRequestDispatcher("success.jsp").forward(req, resp);
}else {
req.getRequestDispatcher("fail.jsp").forward(req, resp);
}
}
}请问:当在request1.jsp页面中提交时,为什么总是报下面这个错误
      java.lang.IllegalStateException: Cannot forward after response has been committed
com.tangjun.register.MyServlet.process(MyServlet.java:40)
com.tangjun.register.MyServlet.doGet(MyServlet.java:19)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)当我试着把super.doGet(req, resp);这句删了,转发成功。请问这是为什么啊

解决方案 »

  1.   

    doGet()方法中这样调用 this.doPost(request,response)
      

  2.   

    其实错误中已经说明了,当执行super.doGet(req, resp);
    后,请求已经发送出去了,所以就不会实现页面转发了。
      

  3.   

    是的,很少你这样写的 @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            / / TODO Auto-generated method stub
            super.doGet(req, resp);
            
            this.process(req, resp);
        }直接this.process(req,resp),你这里加个super.doGet()作用是啥?可以去掉的
      

  4.   

    在servlet中调用一下doGet(reuest,response);