過濾器(Filter)----是否登陸判斷、監聽器(Listener)----線上人數判斷
阿新 • • 發佈:2018-12-14
Java專案有三大元件:servlet(服務聯結器)、filter(過濾器)、listener(監聽器)
本篇部落格主要介紹過濾器以及監聽器。
過濾器
過濾器顧名思義就是將來自使用者介面的某些不合理請求過濾或進行其他處理。
例如:內部網路沒有登陸想要直接訪問時將其跳轉至登陸介面。
@WebFilter("/*")//範圍為全介面過濾 public class TestFIlter implements Filter { private String encoding = "GBK"; private Log log = LogFactory.getLog(TestFIlter.class); public void destroy() { } /* * 注意傳參不是httpservletRequest和httpservletResponse * */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { log.info("====>過濾器被使用"); request.setCharacterEncoding(encoding);//設定編碼格式 HttpServletRequest request0 = (HttpServletRequest) request; HttpServletResponse response0 = (HttpServletResponse) response; HttpSession session = request0.getSession();//獲取session方法 String local = request0.getLocalName();//獲取訪問的地址 if(!"login.jsp".equals(local)&&session.getAttribute("userName")==null&&"".equals(local)){ response0.sendRedirect("login.jsp"); //若訪問地址不為登陸介面且從session獲取userName如果為空則跳轉至登陸介面 } chain.doFilter(request, response);//繼續進行下一個過濾器,如果沒有則返回jsp等 }
新增過濾器步驟:
1.編寫Java類實現Filter介面,並實現方法
2.在web.xml中註冊filter實現類,一定要註明作用域
註冊方法兩種
(1)web.xml註冊
<filter> <filter-name>TestFilter</filter-name>//名字和下面filter-mapping對應 <filter-class>com.zzxt.hmq.filter.TestFIlter</filter-class>//實現類所在位置 <init-param>//初始化屬性 <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>add.jsp,index.jsp</url-pattern>// 作用範圍/*表示全部 </filter-mapping>
2)第二種引入servlet api後採用@WebFilter(“作用域”)上面完整示例採用.既是
注:兩種方法只能採用一個·
監聽器(Listener)
監聽器,即對所屬專案進行監聽,得到當前專案的一些實時資訊。
listener實現介面種類:
對應中文描述如下:
例:獲取當前網站的線上人數
public class TestListener implements HttpSessionListener {//監聽session建立消失過程 public void sessionCreated(HttpSessionEvent se) { //當session建立時HttpSessionEvent為httpsession事件 Integer onlinePeopleNum = 0;//初始化引數定義為封裝類,因為下面還要向 Object object = se.getSession().getServletContext().getAttribute("onlinePeopleNum"); //從servletContext中獲取原來初始數,使用object類接收 if(object != null){ onlinePeopleNum = (Integer) object; //如果原來不為空,則將servletContext中的數量賦值給onlinePeopleNum } //建立則人數加一 onlinePeopleNum++; se.getSession().getServletContext().setAttribute("onlinePeopleNum", onlinePeopleNum); //將新數重新賦值回servletContext中 /* * 注:servletContext作用域為全站,所以將其存入其中,使用時再取出即可 */ } public void sessionDestroyed(HttpSessionEvent se) { //大體如上 Integer onlinePeopleNum = (Integer)se.getSession().getServletContext().getAttribute("onlinePeopleNum"); //銷燬則人數減一 onlinePeopleNum--; se.getSession().getServletContext().setAttribute("onlinePeopleNum", onlinePeopleNum); }