<filter-mapping>
    <filter-name>loginfilter</filter-name>
    <url-pattern>/test/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>loginfilter</filter-name>
    <url-pattern>/test/viewStudentServle</url-pattern>
  </filter-mapping>你的filter相当于只过滤了/test/viewStudentServle
filter的url-pattern在正则匹配上没做太多处理,要想匹配的话你得另作文章,如指定/*
过滤所有的请求,再通过uri分析哪些直接pass.

解决方案 »

  1.   

    一楼说的没错、另外:
    LoginFilter已经implements Filter 
    为什么还要extends HttpServlet?这不多余吗?
      

  2.   

    <filter-mapping>
        <filter-name>loginfilter</filter-name>
        <url-pattern>/test/*</url-pattern>
      </filter-mapping>
      <filter-mapping>
        <filter-name>loginfilter</filter-name>
        <url-pattern>/test/viewStudentServle</url-pattern>
      </filter-mapping>你的filter相当于只过滤了/test/viewStudentServle
    filter的url-pattern在正则匹配上没做太多处理,要想匹配的话你得另作文章,如指定/*
    过滤所有的请求,再通过uri分析哪些直接pass.GODProbe(世界探针) 说得没错,是我贴错了,这是我改了的,下面才是原来没改的
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
      <display-name>Test</display-name>
      <filter>
        <filter-name>encodefilter</filter-name>
        <filter-class>filter.EncodeFilter</filter-class>
      </filter>
      <filter>
        <filter-name>loginfilter</filter-name>
        <filter-class>filter.LoginFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>encodefilter</filter-name>
        <url-pattern>/test/*</url-pattern>
      </filter-mapping>
      <filter-mapping>
        <filter-name>loginfilter</filter-name>
        <url-pattern>/test/*</url-pattern>
      </filter-mapping>
      <servlet>
        <servlet-name>longinservlet</servlet-name>
        <servlet-class>servlet.LonginServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>viewStudentServlet</servlet-name>
        <servlet-class>servlet.viewStudentServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>DeleteServlet</servlet-name>
        <servlet-class>servlet.DeleteServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>AddServlet</servlet-name>
        <servlet-class>servlet.AddServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>ModifyStudent</servlet-name>
        <servlet-class>servlet.ModifyStudent</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>Findinfo</servlet-name>
        <servlet-class>servlet.Findinfo</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>longinservlet</servlet-name>
        <url-pattern>/longinservlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>viewStudentServlet</servlet-name>
        <url-pattern>/viewStudentServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>DeleteServlet</servlet-name>
        <url-pattern>/DeleteServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>AddServlet</servlet-name>
        <url-pattern>/AddServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>ModifyStudent</servlet-name>
        <url-pattern>/ModifyStudent</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>Findinfo</servlet-name>
        <url-pattern>/Findinfo</url-pattern>
      </servlet-mapping>
    </web-app>
      

  3.   

    二楼说错了一楼说的没错、另外:
    LoginFilter已经implements Filter 
    为什么还要extends HttpServlet?
    如果不extends HttpServletpublic void doFilter(ServletRequest request, ServletResponse response,
                           FilterChain filterChain) {
    这个方法怎么写
      

  4.   

    else {
            RequestDispatcher requestDis = ( (HttpServletRequest) request).
                getRequestDispatcher("/login.html");
            requestDis.forward(request, response);
    return ; ///////
          }      filterChain.doFilter(request, response);不管是 requestDis.foward() 还是 response.redirect() 之后都请紧跟着一个  return ;
    要记得之后不应该用任何代码. 有的编译器会自动去掉, 有的不会. 这样没有去掉的话可能会导致 死锁 或其他未知错误.