利用HttpSessionListener監聽器實現使用者資料儲存
阿新 • • 發佈:2019-01-07
3、去呼叫封裝到service中獲取百度定位資訊的業務方法
獲取百度定位資訊的業務方法所在的業務類以被我們註冊成spring管理的bean,所以我們想在監聽器中呼叫需要首先獲得spring的上下文WebApplicationContext。 如何取到它呢? web容器初始化的時候會提供一個上下文,就是我們常見的ServletContext,同時還會定義一個ContextLoaderListener監聽器來監聽它的建立、銷燬等,WebApplicationContext就是在這個監聽器中被建立的,可以看下它監聽ServletContext建立時的方法。
獲取百度定位資訊的業務方法所在的業務類以被我們註冊成spring管理的bean,所以我們想在監聽器中呼叫需要首先獲得spring的上下文WebApplicationContext。 如何取到它呢? web容器初始化的時候會提供一個上下文,就是我們常見的ServletContext,同時還會定義一個ContextLoaderListener監聽器來監聽它的建立、銷燬等,WebApplicationContext就是在這個監聽器中被建立的,可以看下它監聽ServletContext建立時的方法。
有興趣的可以繼續跟蹤下,WebApplicationContext最終被放在了ServletContext中,也就是說我們可以從ServletContext中取到我們所需要的WebApplicationContext。@Override public void contextInitialized(ServletContextEvent event) { initWebApplicationContext(event.getServletContext()); }
可以看到,我們成功取到想用的bean,並從其中取出我們所需要的定位資料放入到session屬性中,供我們使用。@WebListener public class WebHttpSessionListener implements ServletRequestListener,HttpSessionListener{ private HttpServletRequest request; private MemberService memberService; @Override public void sessionCreated(HttpSessionEvent se) { WebApplicationContext application = (WebApplicationContext) se.getSession().getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); memberService = (MemberService) application.getBean("memberService"); se.getSession().setAttribute("memberAddress", memberService.getMemberAddress(request.getRemoteAddr())); System.out.println("一個session例項得到建立,並放入定位地址值"); } @Override public void sessionDestroyed(HttpSessionEvent se) { System.out.println("一個session例項正在銷燬"); } @Override public void requestDestroyed(ServletRequestEvent sre) { } @Override public void requestInitialized(ServletRequestEvent sre) { request = (HttpServletRequest) sre.getServletRequest(); } }