为什么打印报表不适用于请求调度程序的转发方法?

时间:2015-07-07 16:43:10

标签: java

我想理解为什么在使用forward方法时打印语句不起作用。我知道在forward方法中我们重定向到另一个servlet但是应该在重定向打印/显示之前使用我的print语句浏览器。当我使用sendredirect()方法时,这些语句也不起作用,但在使用include()方法时工作

public class RdServlet extends HttpServlet
{

public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
res.setContentType("text/html");

PrintWriter out = res.getWriter();
out.println("<html><body>");

 String name=req.getParameter("name");
 String pass=req.getParameter("pass");
 try
 {
 Class.forName("oracle.jdbc.driver.OracleDriver");

 Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","mca6");
 Statement s = c.createStatement();
 String  s1="select * from emp101  where   name='"+name+"'  and   pass='"+pass+"'";
 ResultSet rs=s.executeQuery(s1);
 out.println("before dispatcher");
 out.println("<br>");
 if(rs.next())
 {

 RequestDispatcher rd=req.getRequestDispatcher("/wel");
 //rd.include(req,res);
 rd.forward(req,res);
 }
else
 {
  RequestDispatcher rd=req.getRequestDispatcher("/err");
  //rd.include(req,res);
  rd.forward(req,res);
 }
 }catch(Exception e){out.println(e);}     
out.println("<br>");
out.println("after  requestDispatcher");
out.println("</body></html>");
}
}

1 个答案:

答案 0 :(得分:0)

RequestDispatcher.forward()表示请求处理的完整控制转发到另一个servlet。转发servlet不应该做任何事情,比如写响应或提交响应。如果响应在转发之前在调用servlet中提交,则抛出IllegalStateException。如果响应尚未提交,则响应将被清除。

如果要包含来自两个servlet的响应,请使用RequestDispatcher.include

<强>参考文献:

How redirect request from jsp to a servlet