Filter中实现页面转发

在过滤器中实现页面转发时,报错

java.lang.IllegalStateException:Cannot forward after response has been committed

转发代码如下

if(article!=null){
    req.getSession().setAttribute("article",article);
    //resp.sendRedirect("/article");
    request.getRequestDispatcher("/article").forward(req, resp);
    return;
}else{
    chain.doFilter(request,response);
}

这个是错误是由于response多次提交或者是由于有页面显示后仍然含请求转向产生的,就是说程序在return之前就已经执行了跳转或者执行过response,之后遇到return的话,程序想再次执行跳转,也就是重定向,这时功能也许会实现了,但是控制台会报错,所以控制好跳转是很重要的。

更具体的原因就不清楚了,查找之后,修改代码如下:

if(article!=null){
    req.getSession().setAttribute("article",article);
    //resp.sendRedirect("/article");
    RequestDispatcher rd = request.getRequestDispatcher("/article");
    try {
        rd.forward(req, resp);
        return;
    }catch(Exception e){}
}else{
    chain.doFilter(request,response);
}

转发效果实现

posted @ 2018-08-30 17:56  市井俗人  阅读(2050)  评论(0编辑  收藏  举报