我自已在做一个,session 的滤器,也就是说当session这null时,那么就跳转到login.jsp界面,但是现在出现了一种情况,跳转到login.jsp了,可是login.jsp页面上,只有文本的内容,也就是说背景图片消失了,还有就是css样式表也不显示了,这是怎么回事呢?下面是我的过滤代码,请高手帮我看看package com.jiang.utils;
import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.sun.org.apache.bcel.internal.generic.GETSTATIC;public class LoginFilter implements Filter {

public void destroy() {
System.out.println("过滤器销毁");
} public void doFilter(ServletRequest req, ServletResponse res,   
            FilterChain chain) throws IOException, ServletException {   
        // TODO Auto-generated method stub   
req.setCharacterEncoding("GBK");
HttpServletRequest request = (HttpServletRequest) req;
//HttpServletResponse response = (HttpServletResponse) res; HttpSession session = request.getSession();
String czy = (String) session.getAttribute("adminName");
String action = request.getParameter("action");
if("Login".equals(action)) {
chain.doFilter(req, res);
}
if(czy == null || "".equals(czy)){
//chain.doFilter(req, res);如果把这个注释去掉的话,那么可以跳转到login.jsp并且显示图片,但是tomcat会报错
request.getRequestDispatcher("/admin/login.jsp").forward(req, res);



}else{
chain.doFilter(req, res);
}


        
    }   
    
  
    public void init(FilterConfig fc) throws ServletException {   
        // TODO Auto-generated method stub   
         
    }   
}下面是web.xml中的内容
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <filter>
   <filter-name>LoginFilter</filter-name>
   <filter-class>com.jiang.utils.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>LoginFilter</filter-name>
   <url-pattern>/admin/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
请帮忙解决下 谢谢!

解决方案 »

  1.   

    图片跟CSS 也在放在 admin 下面了是吧这样子,图片跟CSS也会被过滤的了.如果 图片跟 CSS 不是被过滤的话,可能是路径问题. 尝试用重定向,不要用 转发
      

  2.   

    <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
    在web.xml里改一下,就可以了.只过滤jsp页面就行.
      

  3.   

    这是我的页面代码
    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
    + request.getServerName() + ":" + request.getServerPort()
    + path + "/";
    String action = request.getParameter("action");
    if ("login".equals(action)) {//测试用
    session.setAttribute("adminName", "acb");
    }

    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <LINK href="<%=path%>/admin/img/text.css" rel=stylesheet>
    <meta http-equiv=Content-Type content=text/html;charset=gb2312>
    </head>
    <body leftMargin=0 topMargin=0>
    <p>
    &nbsp;
    </p>
    <p>
    &nbsp;
    </p>
    <form action='' method='post' name="loginform" target='_top'
    id="loginform">
    <input type="hidden" name="action" value="login">
    <table width="450" height="358" border="0" align="center"
    cellpadding="0" cellspacing="0"
    background="<%=path%>/admin/img/p_member_login.gif">
    <tbody>
    <tr>
    <td align="middle">
    <table cellspacing="0" cellpadding="4" width="300" border="0">
    <tbody>
    <tr>
    <td nowrap="nowrap" align="right">
    用户名:
    </td>
    <td nowrap="nowrap">
    <input class="input2" id="Name" maxlength="12" size="10"
    name="username" /> </td>
    </tr>
    <tr>
    <td align="right">
    密&nbsp;码:
    </td>
    <td>
    <input class="input2" id="Password" type="password" size="10"
    name='pwd' /> </td>
    </tr> <tr>
    <td align="center" colspan="2">
    <input type="submit" value=" 登录 " name="Submit1" />
    </td>
    </tr>
    <tr>
    <td align="middle" colspan="2">
    <span id="Message"></span>
    </td>
    </tr>
    </tbody>
    </table>
    </td>
    </tr>
    </tbody>
    </table>
    </form> </body>
    </html>
      

  4.   

    我只想过滤工程目录下的admin文件夹下的文件,该怎么写呢 
    <filter-mapping>
       <filter-name>LoginFilter</filter-name>
       <url-pattern>/admin/*.jsp</url-pattern>
      </filter-mapping>
     这样写的话 tomcat地报错的
      

  5.   

    <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>xxx.LoginFilter</filter-class>
    </filter><filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/admin/*.jsp</url-pattern>
    </filter-mapping>
    这样行啊
      

  6.   

    我多试过了, tomcat6.0 报一般错呢 不能这样写
      

  7.   

    request.getRequestDispatcher("/admin/login.jsp").forward(req, res);会把请求转到login.jsp,同时你又想使用chain.doFilter(req, res);
    将请求转到下一个过滤器,这样就导致了模棱两可的情况,虽然可以执行成功,但是tomcat会给出相应的错误。