首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

写了一个过滤器 所有路径都找不到了解决思路

2012-04-01 
写了一个过滤器 所有路径都找不到了没写之前还好好的 用过滤器写的检测用户是否登录 结果所有的网页都打不

写了一个过滤器 所有路径都找不到了
没写之前还好好的 用过滤器写的检测用户是否登录 结果所有的网页都打不开了(报的是404路径错误)
地址

http://localhost:8000/hospital/web/login.jsp

下面是我在web.xml中配置的(把这段注释掉以后就可以打开网页了)

XML code
    <filter>        <filter-name>checkLogin</filter-name>        <filter-class>hospital.filters.LoginFilter</filter-class>          <init-param>            <param-name>redirectURL</param-name>            <param-value>/web/login.jsp</param-value>        </init-param>        <init-param>            <param-name>checkSessionKey</param-name>            <param-value>loginName</param-value>        </init-param>        <init-param>            <param-name>notCheckURLList</param-name>            <param-value>/web/LoginServlet;/web/login.jsp</param-value>        </init-param>    </filter>         <filter-mapping>        <filter-name>checkLogin</filter-name>        <url-pattern>/web/*</url-pattern>    </filter-mapping>

filter是这样的
Java code
package hospital.filters;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;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;public class LoginFilter implements Filter{    protected FilterConfig filterConfig = null;    private String redirectURL = null;    private List notCheckURLList = new ArrayList();    private String sessionKey = null;        public void destroy() {        System.out.println("destroy");        notCheckURLList.clear();            }    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)         throws IOException, ServletException {        System.out.println("doFilter");        HttpServletRequest request = (HttpServletRequest) servletRequest;        HttpServletResponse response = (HttpServletResponse) servletResponse;        HttpSession session = request.getSession();        if (sessionKey == null) {            filterChain.doFilter(request, response);            return;        }        if ((!checkRequestURIIntNotFilterList(request))                && session.getAttribute(sessionKey) == null) {            response.sendRedirect(request.getContextPath() + redirectURL);            return;        }        filterChain.doFilter(servletRequest, servletResponse);            }    public void init(FilterConfig arg0) throws ServletException {        System.out.println("init");        this.filterConfig = filterConfig;        redirectURL = filterConfig.getInitParameter("redirectURL");        sessionKey = filterConfig.getInitParameter("checkSessionKey");        String notCheckURLListStr = filterConfig                .getInitParameter("notCheckURLList");        if (notCheckURLListStr != null) {            StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";");            notCheckURLList.clear();            while (st.hasMoreTokens()) {                notCheckURLList.add(st.nextToken());            }        }    }        private boolean checkRequestURIIntNotFilterList(HttpServletRequest request) {        String uri = request.getServletPath()                + (request.getPathInfo() == null ? "" : request.getPathInfo());        return notCheckURLList.contains(uri);    }    } 






[解决办法]
response.sendRedirect可能转向了不存在的页面。检查URL路径是否正确。
另外他不是转发,是重定向。还是用request.getRequestDispatch().forward吧。

另外,HttpSession session = request.getSession();
if (sessionKey == null) {
是不可能的
request.getSession();在没有session的情况下会创建一个
要request.getSession(false);这样写才有用
[解决办法]
FilterConfig filterConfig = null;

没有值啊。

init(FilterConfig arg0) 改为 init(FilterConfig filterConfig)


[解决办法]
3楼正解
[解决办法]
this.filterConfig = filterConfig;
你可以的,自己赋给自己啊

热点排行