zoukankan      html  css  js  c++  java
  • 方法sessionjsp之监听器

    发一下牢骚和主题无关:

        (1)什么是监听器?

        是servlet标准当中定义的一种特殊的组件,用来监听容器发生的事件并且停止响应的处理。

        容器会发生两大类事件:

        a,生命周期相关的事件:容器创建或者销毁request,session,ServletContext(servlet上下文)这些对象时发生的事件。b,绑订相关的事件:

        对request,session,ServletContext(servlet上下文)调用了setAttribute,removeAttribute发生的事件。

        (2)如何写一个监听器?

        step1, 写一个java类,实现响应的监听器接口(要看监听的事件类型: HttpSessionListener)。

        step2, 在监听器接口对应的方法里面,实现监听的处理逻辑。

        step3,注册(web.xml)

        (3)ServletContext

        1)什么是Servlet上下文?

        容器在启动的时候,会为每个应用创建唯一的一个

        符合ServletContext接口的一个对象。该对象会始终存在,

        除非关闭容器。

        2)如何获得servlet上下文?

        a,GenericServlet供给了getServletContext方法。

        b,ServletConfig供给了getServletContext方法。

        c, FilterConfig供给了getServletContext方法。

        d, HttpSession供给了getServletContext方法。

        3)servlet上下文的作用?

        a,绑订相关的方法

        setAttribute,removeAttribute,getAttribute

        request,session,ServletContext这三个对象都有绑订

        相关的方法,应当优先应用生命周期短(request<session

        <servlet上下文)的。

        b, 拜访全局的初始化参数

        step1, 应用<context-param>来配置,该参数可以被

        所有的servlet,filter拜访。

        step2, 应用ServletContext供给的getInitParameter方法

        来获取参数值。

        c, 获得实际部署时的物理路径。

        String getRealPath(String path);

        通过代码先懂得一下servletContext,即servlet上下文。   

    //获得ServletContext
        	  ServletContext sctx=getServletContext();
        	  sctx.setAttribute("username","user1");
        	  out.println("已将username绑定"+"到了ServletContext下面");

        输出通过servletContext得到的内容:

    ServletContext sctx=getServletContext();
               String username=(String)sctx.getAttribute("username");

        配置web.xml:

    <!-- 全局初始化参数 -->
    	<context-param>
    	    <param-name>version</param-name>
    	    <param-value>1.0</param-value>
    	</context-param>
    	<listener>
    	    <listener-class>web.CountListener</listener-class>
    	</listener>
        每日一道理
    生活的无奈,有时并不源于自我,别人无心的筑就,那是一种阴差阳错。生活本就是矛盾的,白天与黑夜间的距离,春夏秋冬之间的轮回,于是有了挑剔的喜爱,让无奈加上了喜悦的等待。

        在servlet中得到该数据:

    String version=sctx.getInitParameter("version");
        	  out.println("version:"+version);

        最后写一个统计在线人数的程序,利用到监听器知识,即触发某个事件时,对应的方法自动触发执行:

        step1

        编写servlet

    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    public class CountListener implements HttpSessionListener {
         //session对象一旦创建胜利,会执行该方法
    	private int count=0;
    	public void sessionCreated(HttpSessionEvent arg0) {
    		// TODO Auto-generated method stub
    		count++;
    		HttpSession session=arg0.getSession();
    		ServletContext sctx=session.getServletContext();
    		sctx.setAttribute("count", count);
    	}
         //session对象被销毁会执行该方法
    	public void sessionDestroyed(HttpSessionEvent arg0) {
    		// TODO Auto-generated method stub
    		count--;
    		HttpSession session=arg0.getSession();
    		ServletContext sctx=session.getServletContext();
    		sctx.setAttribute("count", count);
    	}
         
    }

        step2

        配置全局化参数:

    <listener>
    	    <listener-class>web.CountListener</listener-class>
    	</listener>

        step3,编写jsp文件

    <body style="font-size:30px;">
          当前系统在线人数是:
          <%=application.getAttribute("count") %>     
          <%=application.getAttribute("username") %>
        </br>
        <a href="logout.jsp">退出系统</a>
      </body>

        step4,编写logout.jsp文件

    <body>
        <%
           session.invalidate();
         %>
      </body>

    文章结束给大家分享下程序员的一些笑话语录: 马云喜欢把自己包装成教主,张朝阳喜欢把自己包装成明星,李彦宏喜欢把自己包装成的很知性,丁磊喜欢把自己包装的有创意,李开复总摆出一副叫兽的样子。看来的。其实我想说,缺啥补啥,人之常情。

    --------------------------------- 原创文章 By
    方法和session
    ---------------------------------

  • 相关阅读:
    使用NBU进行oracle异机恢复
    mycat偶尔会出现JVM报错double free or corruption并崩溃退出
    exp导出数据时丢表
    service_names配置不正确,导致dg创建失败
    XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
    HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端
    java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类
    【JAVA集合框架一 】java集合框架官方介绍 Collections Framework Overview 集合框架总览 翻译 javase8 集合官方文档中文版
    java内部类深入详解 内部类的分类 特点 定义方式 使用
    再谈包访问权限 子类为何不能使用父类protected方法
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3098011.html
Copyright © 2011-2022 走看看