Filter 是過濾器,凡是通過servlet JSP 的請求需要filter 進行過濾或者攔截操作,保證數據的合法或者邏輯正確性
但是寫第一個filter 配置完成后,發現jsp 文件進不去了,直接是500服務器錯誤,指示空指針錯誤
最后發現了不是jsp 文件寫錯,而是filter 中沒有判空
比如我在登陸成功前提下在session 域中添加了一個字段值,但是沒有登陸的情況下session 沒有該字段值,取該值判斷應該先判斷非空,在進行操作,就不會產生空指針錯誤了
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; response.setContentType("text/html;charset=utf-8"); String contextPath = request.getContextPath(); String requestURI = request.getRequestURI(); HttpSession session = request.getSession(false); //思路,放行首頁和登陸頁||登陸后所有頁面 //放行首頁和登陸頁 if (requestURI.equals("/index.jsp")||requestURI.equals("/")||requestURI.equals("/login.jsp")||requestURI.equals("/person") ){ chain.doFilter(req,resp); return; } //放行登陸后狀態 if (session!=null){ String checked = (String) session.getAttribute("checked");// null 問題 if (checked!=null){ chain.doFilter(req,resp); return; } } //不放行,返回首頁,要求登陸 response.getWriter().println("請先登陸"); response.setHeader("Refresh","2;url="+contextPath+"/login.jsp"); }