在testfilter.jsp里
<form name="f1" method="post" action="FilterServlet">
<input type="text" name="user_id"> 
<input type="submit" name="submit" value="确定" >
</form>在FilterServlet里
String user_id=request.getParameter("user_id");
HttpSession session=request.getSession();
session.setAttribute("USER_ID",user_id);
request.getRequestDispatcher("testfilter2.jsp").forward(request, response);在TestFilter里
public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException { HttpServletRequest req=(HttpServletRequest )request;
HttpServletResponse res=(HttpServletResponse )response;
HttpSession session=req.getSession(true);
String user_id="";
if(session.getAttribute("USER_ID")!=null)
{
user_id=(String)session.getAttribute("USER_ID");

}

if(user_id.equals("") || user_id==null)
{
req.getRequestDispatcher("lottery.jsp").forward(req, res);
chain.doFilter(request,response);
}
else
{
chain.doFilter(request,response);
}

}在web.xml里
<filter>
  <filter-name>loginz</filter-name>
  <filter-class>test.TestFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>loginz</filter-name>
  <url-pattern>/testfilter2.jsp</url-pattern> 
</filter-mapping>但运行的时候无论我有没有输入数据,TestFilter都没有执行,调试了很久都找不到问题所在,请教一下高手。

解决方案 »

  1.   

    你web.xml写错了
    <filter>
      <filter-name>loginz</filter-name>
      <filter-class>test.TestFilter</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>loginz</filter-name>
      <url-pattern>/FilterServlet</url-pattern> //修改这里
    </filter-mapping>
      

  2.   

    web.xml配置是否正确。
    FilterServlet的req.getRequestDispatcher("lottery.jsp").forward(req, res);
    指向是否正确。
      

  3.   

    req.getRequestDispatcher("lottery.jsp").forward(req, res);
    这个转向是当session为空时,转去的页面,没有错的
      

  4.   

    if(session.getAttribute("USER_ID")!=null)
    {
    user_id=(String)session.getAttribute("USER_ID");

    }

    if(user_id.equals("") || user_id==null)
    {
    req.getRequestDispatcher("lottery.jsp").forward(req, res);
    chain.doFilter(request,response);
    }
    else
    {
    chain.doFilter(request,response);
    }

    }
    你这样写没什么意义啊.
      

  5.   

    回楼上的,
    我这个是判断session是否为空,不知道这样写是否正确
      

  6.   

    if(session.getAttribute("USER_ID")!=null){ user_id=(String)session.getAttribute("USER_ID");
    if(user_id.equals("") || user_id==null)
    {
    req.getRequestDispatcher("lottery.jsp").forward(req, res);
                               return;
    }
                  chain.doFilter(request,response);

    }else{
    req.getRequestDispatcher("lottery.jsp").forward(req, res);
                               return;}这样看看
      

  7.   

    use_id=(String)session.getAttribute("USER_ID");
    if(use_id==null || use_id.equal(" ")) 比较空格.
    {
      req.getRequestDispatcher("lottery.jsp").forward(req, res);
    }
    else
    {
     chain.doFilter(request,response);
    }
    chain.doFilter(request,response);
    这样试一下!
      

  8.   

    还是不行啊,用debug调试
    程序都没经过TestFilter
      

  9.   

    <filter-class>test.TestFilter</filter-class>
    你写对了没?是不是不全啊?
      

  10.   

    我写对了,
    现在奇怪的是,如果我把<url-pattern>/testfilter2.jsp</url-pattern> 
    改成<url-pattern>/testfilter.jsp</url-pattern> 的时候TestFilter就起作用,
    在第一次打开testfilter.jsp的时候TestFilter就判断session是否为空,然后跳转到指定的页面。
      

  11.   

    <url-pattern>/testfilter2.jsp</url-pattern> 
    你是主怎样访问/testfilter2.jsp的?
      

  12.   

    testfilter2.jsp是FilterServlet跳转过去的
      

  13.   

    request.getRequestDispatcher("/testfilter2.jsp").forward(request, response);
    这样看看
      

  14.   

    我现在不知道这个<url-pattern>/testfilter2.jsp</url-pattern> 是什么意思
      

  15.   

    就是访问与这个<url-pattern>/testfilter2.jsp</url-pattern>匹配的请求都会经过那个FILTER
      

  16.   

    我在FilterServlet里写了:
    request.getRequestDispatcher("testfilter2.jsp").forward(request, response);
    但程序运行的时候并没有过filter
      

  17.   

    request.getRequestDispatcher("/testfilter2.jsp").forward(request, response);
    这样看看
      

  18.   

    filter为什么不被触发????  -_-|||
      

  19.   

    改为
    request.sendRedirect(request.getContextPath() + "testfilter2.jsp");
      

  20.   

    request.sendRedirect(request.getContextPath() + "/testfilter2.jsp");
      

  21.   

    response.sendRedirect(request.getContextPath() + "/testfilter2.jsp");
      

  22.   

    终于搞好了,^-^,谢谢大家正解:response.sendRedirect(request.getContextPath() + "/testfilter2.jsp");