• 方法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
    ---------------------------------

  • 相关阅读:
    Nginx-php-mysql
    Smokeping配置调整
    Smokeping外置邮箱告警
    部署Smokeping
    Centos7部署cacti
    通过yum安装最新服务
    Cacti部署
    MySQL磁盘写入策略以及数据安全性的相关参数
    linux中一些特殊的中文文件不能删除问题
    Slave_SQL_Running:No的两种解决办法
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3098011.html
Copyright © 2020-2023  润新知