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");
}
