比如说我现在有一个这样的简单项目(MVC)
登陆页面 login.jsp
主页 index.jsp
一个servlet LoginServlet.java 用来处理登陆业务
在不用过滤器的情况下 要实现必须登陆才能访问我的index.jsp
那么我的index.jsp必须要对一个session进行判断 判断是否进行登陆 否则会forward到login.jsp上去
session在LoginServlet.java 中当ID和PASSWORD都正确时进行设置
可能在index.jsp的代码如下
代码块 #1   <%
if(session.getAttribute("uname")!=null)
    {
   %>
    <h2>登陆成功</h2><br>
    欢迎,<font color="red"><%=session.getAttribute("uname") %></font>光临留言管理系统<br>
    <h3><a href="notes_list.jsp">进入留言管理页面</a></h3>
   
   <%
    }else
        {
               //经过登陆
        }
    %>
那么我现在加入一个LoginFilter.java用来处理该过程 减少这个经常出现的代码块
LoginFilter.java代码如下public class LoginFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletrequest;
HttpSession session = request.getSession(true);
if(session.getAttribute("uname")!=null)
{
filterchain.doFilter(servletrequest, servletresponse);
}
else
{
request.getRequestDispatcher("login.jsp").forward(servletrequest, servletresponse);
}
} public void init(FilterConfig filterconfig) throws ServletException {

}}那么在我的web.xml里面的<filter>
   <filter-name>loginfilter</filter-name>
   <filter-class>cn.suiyang.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>loginfilter</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>中的<url-pattern>/*</url-pattern> 这样写是可以去掉很多代码块 #1 
但是 由于在<url-pattern></url-pattern>里面是 /*所以我的  
<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login.ser</url-pattern>
</servlet-mapping>
里面影射的/login.ser也会进行过滤 
那么 登陆操作的时候 就不能进行 
当我在login.jsp登陆的时候 提交到 LoginServlet.java 的时候进行过滤 
那么 session.getAttribute("uname")为null就会回到login.jsp如果大家看到这里的话 回问 那你不知道将web.xml里面 过滤器的配置改成   <filter-mapping>
   <filter-name>loginfilter</filter-name>
   <url-pattern>/login.jsp</url-pattern>
  </filter-mapping>
这样只对login.jsp进行过滤 而不对 Servlet映射的地址过滤?
这样确实可以 但是 如果我不是只有一个index.jsp页面呢?我有100个1000个甚至更多呢?
难道我要在我的web.xml里面写
  <filter-mapping>          .....
  </filter-mapping>
快写100个1000个吗?初学JSP,对这个问题有点不解 希望各位能够指点 
要使用过滤器来完成我这样的功能 但是不过滤掉一些Servlet和一些我不希望进行过滤的页面 怎样处理?不知道问题描述的可清楚 在线等解答 不清楚的地方我会在描述

解决方案 »

  1.   

    上面有个错误 
    如果大家看到这里的话 回问 那你不知道将web.xml里面 过滤器的配置改成     <filter-mapping> 
       <filter-name>loginfilter </filter-name> 
       <url-pattern>/login.jsp </url-pattern> 
       </filter-mapping> 
    这样只对login.jsp进行过滤 而不对 Servlet映射的地址过滤? 
    这里因该是 <url-pattern>/index.jsp </url-pattern> 
      

  2.   

    <filter-mapping>  
        <filter-name>loginfilter  </filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping> 試試看
      

  3.   

    LS的谢谢你回帖
    但是你好像没有自己看我的帖子 如果 
    这么写
    <filter-mapping>   
         <filter-name>loginfilter   </filter-name>   
         <url-pattern>/* </url-pattern>   
    </filter-mapping>  那么servlet他的mapping同样会被过滤
      

  4.   

    因为filter特别笨,只能处理/*这种,或者*.do这种所以就配上/*
    然后在filter里头用java判断处理哪些url要不,你就写1000个filter-mapping吧。
      

  5.   

    最好在filter类中对某些URL不进行判断,而其他URL则要判断SESSION中有没有uname这个对象,这样就排除了登录页面的判断