10-实验十 监听器编程实验

合集下载

实验报告_网络扫描与监听

实验报告_网络扫描与监听

信息安全实验报告学号:学生姓名:班级:实验一网络扫描与监听一、实验目的网络扫描是对整个目标网络或单台主机进行全面、快速、准确的获取信息的必要手段。

通过网络扫描发现对方,获取对方的信息是进行网络攻防的前提。

该实验使学生了解网络扫描的内容,通过主机漏洞扫描发现目标主机存在的漏洞,通过端口扫描发现目标主机的开放端口和服务,通过操作系统类型扫描判断目标主机的操作系统类型。

通过该实验,了解网络扫描的作用,掌握主机漏洞扫描、端口扫描、操作系统类型扫描软件的使用的方法,能够通过网络扫描发现对方的信息和是否存在漏洞。

要求能够综合使用以上的方法来获取目标主机的信息。

而网络监听可以获知被监听用户的敏感信息。

通过实验使学生了解网络监听的实现原理,掌握网络监听软件的使用方法,以及对网络中可能存在的嗅探结点进行判断的原理。

掌握网络监听工具的安装、使用,能够发现监听数据中的有价值信息,了解网络中是否存在嗅探结点的判断方法及其使用。

二、实验要求基本要求了解网络扫描的作用,掌握主机漏洞扫描、端口扫描、操作系统类型扫描软件的使用的方法,能够通过网络扫描发现对方的信息和是否存在漏洞。

掌握网络监听工具的安装、使用,能够发现监听数据中的有价值信息等。

提高要求能够对网络中可能存在的嗅探结点进行判断的方法及工具使用等。

三、实验步骤1)扫描软件X-Scan 和Nmap 以及WinPcap 驱动安装包并安装。

2)打开X-Scan,如下图所示。

3)点击“设置”->“扫描参数”,弹出扫描参数设置对话框,在“指定IP 范围”输入被扫描的IP 地址或地址范围。

在“全局设置”的“扫描模块”设置对话框中选择需要检测的模块。

其他可以使用默认的设置,也可以根据实际需要进行选择。

最后点击“确定”回到主界面。

4)在主界面点击“文件”->“开始扫描”,开始对目标主机或目标网络的扫描。

不久,就可以得到目标主机的扫描结果,从分析报告中可以看到有关目标主机开放端口和服务的详细报告。

实验五、过滤器与监听器

实验五、过滤器与监听器

实验五:过滤器与监听器一、实验目的1.掌握过滤器的创建与配置方法;2.掌握监听器的创建与配置方法;二、实验内容2.1 创建Web项目1. 打开MyEclipse,创建一个Web Project,命名为ServletTest。

2.1 SecurityFilter详细过程见securityFilter.rmvb1.过滤器SecurityFilter的代码如下:package filters;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;public class SecurityFilter implements Filter {private FilterConfig filterConfig;public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request;// 获得用户输入的密码String pwdInput = httpRequest.getParameter("password");// 获得filter配置参数中的rightpass的值String rightPwd = filterConfig.getInitParameter("rightpass");if (!rightPwd.equals(pwdInput)) {PrintWriter out = response.getWriter();out.println("<h3>Wrong password! Please try again.</h3>");out.flush();return;}filterChain.doFilter(request, response);}public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig;}}2.LoginServlet的主要代码如下:package servlets;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class LoginServlet extends HttpServlet {/*** Constructor of the object.*/public LoginServlet() {super();}/*** Destruction of the servlet. <br>*/public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/*** The doGet method of the servlet. <br>** This method is called when a form has its tag value method equals to get.** @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();HttpSession session = request.getSession();session.setAttribute("username", request.getParameter("username"));out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.println("<h3>Welcome, " + request.getParameter("username") + ", you are logged in.</h3>");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}/*** The doPost method of the servlet. <br>** This method is called when a form has its tag value method equals to post.** @param request the request send by the client to the server* @param response the response send by the server to the client* @throws ServletException if an error occurred* @throws IOException if an error occurred*/public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.print(" This is ");out.print(this.getClass());out.println(", using the POST method");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}/*** Initialization of the servlet. <br>** @throws ServletException if an error occurs*/public void init() throws ServletException {// Put your code here}}3.新建login.jsp,用于进行登录测试,代码如下:<%@page language="java"import="java.util.*"pageEncoding="GBK"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>登录页面</title></head><body><p>This example shows you how the security filter is used to protect the LoginServlet. Pleaseenter the password and click the submit button to see results(correct password is "hello"):</p><form action="servlet/LoginServlet"method="get"><input type="text"name="username"/> User Name<br/><input type="password"name="password"/> Password<br/><input type="submit"value="Login"/></form></body></html>4.测试运行:打开http://localhost:8080/ServletTest/login.jsp,输入正确的用户名与密码,查看网页结果回到login页面,输入错误的密码,再次查看网页结果。

Java实现一个简单的事件监听器

Java实现一个简单的事件监听器

Java实现⼀个简单的事件监听器关于事件监听我们需要知道的⼀些基础知识。

a)事件三要素(who when what):source -- 事件源when -- 事件发⽣时间message -- 事件主题消息,即希望通过事件传递出去的信息b)事件模型的构成:event -- 事件source -- 事件源listener -- 事件监听器c)事件流转过程:(1)事件源注册监听器 -> (2)事件发⽣ -> (3)通知监听器 -> (4)监听器处理那么基于以上背景知识,我们来是实现⼀个简单的监听器,并测试⼀下事件监听的完整流程。

根据事件三要素设计出⼀个简单合理的事件载体:Eventpublic interface Event extends Serializable {Object getSource();Date getWhen();String getMessage();/*** 事件回调⽅法*/void callback();}事件实现:MyEventpublic class MyEvent implements Event {private Log log = LogFactory.getLog(getClass());private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");private Object source;private Date when;private String message;@Overridepublic Object getSource() {return source;}public void setSource(Object source) {this.source = source;}@Overridepublic Date getWhen() {return when;}public void setWhen(Date when) {this.when = when;}@Overridepublic String getMessage() {return message;}public void setMessage(String message) {this.message = message;}@Overridepublic void callback() {(toString());}@Overridepublic String toString() {return "source: " + getSource() + ", message: " + getMessage() + ", when: " + sdf.format(getWhen()); }}View Code监听器接⼝:EventListenerpublic interface EventListener {/*** 事件触发* @param event*/void handleEvent(Event event);}监听器实现:MyListenerpublic class MyListener implements EventListener {@Overridepublic void handleEvent(Event event) {event.callback();}}事件源接⼝:EventSourcepublic interface EventSource {/*** 增加监听器* @param listener*/void addListener(EventListener listener);/*** 通知监听器*/void notifyListener();}编写测试的事件源:MySourcepublic class MySource implements EventSource {private List<EventListener> listeners = new ArrayList<EventListener>();private int value;@Overridepublic void addListener(EventListener listener) {listeners.add(listener);}@Overridepublic void notifyListener() {for (EventListener listener : listeners) {MyEvent event = new MyEvent();event.setSource(this);event.setWhen(new Date());event.setMessage("setValue " + value);listener.handleEvent(event);}}public int getValue() {return value;}public void setValue(int value) {this.value = value;notifyListener();}@Testpublic void testEventListener() {MySource source = new MySource();source.addListener(new MyListener());source.setValue(100);}}测试输出:[INFO]-[Event-callback(50)]: source: com.lichmama.test.listen.MySource@119126ab, message: setValue 100, when: 2018-05-01 02:52:13*PS:监听器模式和观察者模式看起来很像,不过在事件模型的设置上有些许差别。

网络监听实验

网络监听实验

⽹络监听实验实验报告实验四:⽹络监听实验班级:姓名:学号:⽇期:⼀、实验⽬的掌握协议分析器的使⽤⽅法,并根据实验总结针对⽹络监听的防范措施。

⼆、实验内容安装Sniffer,进⾏⽹络分析监听,再对结果数据进⾏分析,撰写报告。

三、实验步骤1.虚拟机安装2.jre1.5.0.04.exe安装1.软件安装在选择Sniffer Pro的安装⽬录时,默认是安装在c:\Program files\nai\SnifferNT⽬录中,我们可以通过旁边的Browse按钮修改路径,不过为了更好的使⽤还是建议按默认路径进⾏安装。

在注册⽤户时,注册信息随便填写即可,不过EMAIL⼀定要符合规范,需要带“@”,如图2-14所⽰,在随后出现的“Sniffer Pro Usr Registration”对话框中,⼤家注意有⼀⾏"Sniffer Serial Number"需要⼤家填⼊注册码“SA154-2558Y-255T9-2LASH”。

接下来,需要设置⽹络连接状况,⼀般对于企业⽤户只要不是通过“代理服务器”上⽹的都可以选择第⼀项——Direct Connection to the Internet,如图2-15所⽰。

接下来才是真正的复制Sniffer Pro必需⽂件到本地硬盘,完成所有操作后出现Setup Complete提⽰,我们点Finish按钮完成安装⼯作。

由于在使⽤Sniffer Pro时需要将⽹卡的监听模式切换为混杂,所以不重新启动计算机是⽆法实现切换功能的,因此在安装的最后,软件会提⽰重新启动计算机,如图2-16所⽰。

2.使⽤Sniffer查询流量信息:重新启动计算机后我们可以通过Sniffer Pro来监测⽹络中的数据包。

通过“开始->所有程序->Sniffer Pro->Sniffer”来启动该程序。

(1)第⼀步:默认情况下Sniffer Pro会⾃动选择你的⽹卡进⾏监听,不过如果不能⾃动选择或者本地计算机有多个⽹卡的话,就需要⼿⼯指定⽹卡了。

事件驱动编程实验报告

事件驱动编程实验报告

一、实验目的1. 理解事件驱动编程的基本概念和原理。

2. 掌握事件驱动编程在Java环境下的实现方法。

3. 通过实验加深对事件驱动编程在实际应用中的理解。

二、实验环境1. 操作系统:Windows 102. 开发工具:Eclipse IDE3. 编程语言:Java三、实验内容1. 实验一:事件源、事件监听器和事件对象(1)实验目的:理解事件源、事件监听器和事件对象的概念,掌握它们在Java中的实现方法。

(2)实验步骤:1)创建一个按钮组件,并为其添加事件监听器;2)在事件监听器中,获取事件对象,并处理事件;3)验证事件驱动编程的基本原理。

(3)实验结果:成功创建按钮组件,并为按钮添加了事件监听器。

在事件监听器中获取事件对象,并处理事件,实现了事件驱动编程的基本功能。

2. 实验二:自定义事件和事件监听器(1)实验目的:理解自定义事件和事件监听器的概念,掌握它们在Java中的实现方法。

(2)实验步骤:1)创建一个自定义事件类,继承自java.util.EventObject;2)创建一个事件监听器接口,用于处理自定义事件;3)实现事件监听器接口,并在事件监听器中处理自定义事件;4)验证自定义事件和事件监听器的实现。

(3)实验结果:成功创建自定义事件类和事件监听器接口,并在事件监听器中处理自定义事件,实现了自定义事件和事件监听器的功能。

3. 实验三:事件驱动编程在图形用户界面中的应用(1)实验目的:理解事件驱动编程在图形用户界面中的应用,掌握其实现方法。

(2)实验步骤:1)创建一个图形用户界面,包括按钮、文本框等组件;2)为组件添加事件监听器,实现事件驱动编程;3)验证事件驱动编程在图形用户界面中的应用。

(3)实验结果:成功创建图形用户界面,并为组件添加了事件监听器。

在事件监听器中处理事件,实现了事件驱动编程在图形用户界面中的应用。

4. 实验四:事件驱动编程在网络编程中的应用(1)实验目的:理解事件驱动编程在网络编程中的应用,掌握其实现方法。

网络监听实验

网络监听实验

福建农林大学计算机与信息学院实验报告课程名称:计算机网络姓名:学院:专业:年级:学号:指导教师:职称:年月日实验项目列表序号实验项目名称成绩指导教师1 TCP/IP实用程序的使用2 Windows 的安全策略3 TCP/IP协议分析4 总评56实验报告实验二:网络监听实验一、实验目的1、熟悉IP地址与MAC地址的概念2、理解ARP协议及ICMP协议原理3、了解TELNET应用4、掌握网络监听方法二、实验原理1、IP地址与MAC地址、ARP协议数据链路层使用物理地址(即MAC地址),网络层使用IP地址,当数据包在网络层和数据链路层之间传输时,需要进行MAC地址和IP地址的转换。

ARP协议的功能是实现IP地址到MAC地址的转换。

每个主机都设有一个ARP高速缓存,操作系统通常会将从网络中得到的IP地址和MAC地址的映射关系存放在本机的高速缓存中,使用arp命令,可以查看、添加和删除高速缓冲区中的ARP表项。

在Windows操作系统中,高速缓存中的ARP表项可以包含动态和静态表项,动态表项随时间推移自动添加和删除,而静态表项则一直保留在高速缓存中,直到人为删除或重启计算机。

2、ICMP协议ICMP协议是配合IP协议使用的网络层协议,它的报文不是直接传送到数据链路层,而是封装成IP数据报后再传送到数据链路层。

分组网间探测PING是ICMP协议的一个重要应用,它使用ICMP回送请求与回送应答报文,用来测试两个主机之间的连通性。

命令格式为:ping 目的IP地址。

ICMP回送请求与回送应答报文格式如下:类型:8或0 代码:0 校验和标识符序号可选数据说明:类型为8---回送请求,为0---回送应答TRACERT程序是ICMP协议的另一个应用,命令格式为:tracert 目的地址。

Tracert从源主机向目的主机发送一连串的IP数据报P1,P1的TTL设置为1,当它到达路径上的第一个路由器R1时,R1先收下它,把P1的TTL值减1,变成0,R1丢弃P1,并向源主机发送一个ICMP超时差错报告报文。

监听仪演示实验报告(3篇)

第1篇一、实验目的1. 了解监听仪的基本原理和功能。

2. 掌握监听仪的使用方法和技巧。

3. 通过实验验证监听仪在音频信号处理中的应用。

二、实验器材1. 监听仪一台2. 音频信号发生器一台3. 音频功率放大器一台4. 音频线若干5. 麦克风一个6. 耳机一副7. 计时器一个三、实验原理监听仪是一种用于音频信号监测、处理和传输的设备。

它通过放大、滤波、均衡等处理,将原始音频信号转换为适合人耳听觉的信号。

本实验主要验证监听仪在音频信号处理中的应用,包括放大、滤波、均衡等功能。

四、实验步骤1. 连接实验器材将音频信号发生器、监听仪、音频功率放大器、耳机等设备按照图示连接好,确保所有连接正常。

2. 设置音频信号发生器打开音频信号发生器,设置输出频率为1kHz,输出幅度为0dB。

3. 调整监听仪将监听仪音量调至适中,打开均衡器,调整高低音平衡。

4. 进行实验(1)放大实验将音频信号发生器的输出信号接入监听仪的输入端,观察监听仪的输出幅度。

逐渐增加音频信号发生器的输出幅度,观察监听仪输出幅度随输入幅度变化的规律。

(2)滤波实验打开监听仪的滤波功能,设置滤波器类型为低通滤波器,截止频率为3kHz。

观察监听仪输出信号的频率响应,验证滤波效果。

(3)均衡实验打开监听仪的均衡功能,调整高低音平衡,观察监听仪输出信号的频响变化,验证均衡效果。

5. 实验数据记录记录实验过程中监听仪输出信号的幅度、频率响应、均衡效果等数据。

五、实验结果与分析1. 放大实验随着音频信号发生器输出幅度的增加,监听仪输出幅度也相应增加,验证了监听仪的放大功能。

2. 滤波实验开启低通滤波器后,监听仪输出信号中高于3kHz的频率成分被滤除,验证了监听仪的滤波功能。

3. 均衡实验调整高低音平衡后,监听仪输出信号的频响得到改善,验证了监听仪的均衡功能。

六、实验结论通过本次实验,我们了解了监听仪的基本原理和功能,掌握了监听仪的使用方法和技巧。

实验结果表明,监听仪在音频信号处理中具有放大、滤波、均衡等功能,能够有效改善音频信号质量。

实现事件监听接口的方法

实现事件监听接口的方法在编程中,实现事件监听接口通常涉及以下步骤:定义事件:首先,你需要定义一个事件,确定事件的名称和可能携带的参数。

定义监听接口:创建一个接口(或抽象类),其中包含一个或多个用于监听事件的方法。

这些方法通常称为事件处理器或监听器。

实现监听接口:在你的类中实现上述定义的监听接口,实现接口中的方法。

这些方法将用于响应事件。

触发事件:在程序的适当位置,当事件发生时,触发事件。

这通常涉及调用事件的触发方法,并传递必要的参数。

以下是一个简单的示例,使用 Python 来演示事件监听接口的实现:from abc import ABC, abstractmethod# 步骤 1: 定义事件class MyEvent:def __init__(self, message):self.message = message# 步骤 2: 定义监听接口class MyEventListener(ABC):@abstractmethoddef handle_event(self, event):pass# 步骤 3: 实现监听接口class MyListener1(MyEventListener):def handle_event(self, event):print(f"Listener 1 received event: {event.message}")class MyListener2(MyEventListener):def handle_event(self, event):print(f"Listener 2 received event: {event.message}")# 步骤 4: 触发事件class EventProducer:def __init__(self):self.listeners = []def add_listener(self, listener):self.listeners.append(listener)def remove_listener(self, listener):self.listeners.remove(listener)def trigger_event(self, event):for listener in self.listeners:listener.handle_event(event)# 使用示例event_producer = EventProducer()listener1 = MyListener1()listener2 = MyListener2()event_producer.add_listener(listener1)event_producer.add_listener(listener2)event = MyEvent("Hello, Event!")event_producer.trigger_event(event)这个例子中,MyEvent 表示一个事件,MyEventListener 是事件监听接口,MyListener1 和 MyListener2 分别是实现了监听接口的两个监听器类。

网络安全实验wireshark网络监听实验

实验报告机将写有目的的主机地址的数据包直接发向目的主机,或者当网络中的一台主机同外界的主机通信时,源主机将写有目的的主机IP地址的数据包发向网关。

但这种数据包并不能在协议栈的高层直接发送出去,要发送的数据包必须从TCP/IP协议的IP层交给网络接口,也就是所说的数据链路层。

网络接口不会识别IP地址的。

在网络接口由IP层来的带有IP地址的数据包又增加了一部分以太祯的祯头的信息。

在祯头中,有两个域分别为只有网络接口才能识别的源主机和目的主机的物理地址这是一个48位的地址,这个48位的地址是与IP地址相对应的,换句话说就是一个IP地址也会对应一个物理地址。

对于作为网关的主机,由于它连接了多个网络,它也就同时具备有很多个IP地址,在每个网络中它都有一个。

而发向网络外的祯中继携带的就是网关的物理地址。

Ethernet中填写了物理地址的祯从网络接口中,也就是从网卡中发送出去传送到物理的线路上。

如果局域网是由一条粗网或细网连接成的,那么数字信号在电缆上传输信号就能够到达线路上的每一台主机。

再当使用集线器的时候,发送出去的信号到达集线器,由集线器再发向连接在集线器上的每一条线路。

这样在物理线路上传输的数字信号也就能到达连接在集线器上的每个主机了。

当数字信号到达一台主机的网络接口时,正常状态下网络接口对读入数据祯进行检查,如果数据祯中携带的物理地址是自己的或者物理地址是广播地址,那么就会将数据祯交给IP层软件。

对于每个到达网络接口的数据祯都要进行这个过程的。

但是当主机工作在监听模式下的话,所有的数据祯都将被交给上层协议软件处理。

当连接在同一条电缆或集线器上的主机被逻辑地分为几个子网的时候,那么要是有一台主机处于监听模式,它还将可以接收到发向与自己不在同一个子网(使用了不同的掩码、IP地址和网关)的主机的数据包,在同一个物理信道上传输的所有信息都可以被接收到。

在UNIX系统上,当拥有超级权限的用户要想使自己所控制的主机进入监听模式,只需要向Interface(网络接口)发送I/O控制命令,就可以使主机设置成监听模式了。

实验二网络监听工具的安装使用

实验说明:实验报告需要打印出来进行提交,每份实验报告注明您的学号、姓名;只需要记录实验步骤和结果即可。

(如果发现抄袭,本次实验成绩为零)实验二:网络监听工具的安装使用实验场景本次实验需在小组合作的基础之上完成。

每个小组由两位成员组成,相互之间通信,通过网络监听工具截取通信数据包,分析数据包完成实验内容。

小组情况表:一、基本要求通过本次实验,学生可以掌握如下基本操作:(1)、使用网络监听工具;(2)、熟悉网络监听工具的原理及被监听的危害;二、实验内容1、通过ipconfig命令获取本机IP地址,并填写上面的小组情况表。

2、下载网络监听工具ethereal和winpcap并安装;(1)、首先安装winpcap;(2)、安装ethereal。

3、从本机ping小组另一位成员的计算机,使用ethereal截取ping过程中的通信数据。

4、分析截取的由于第3步操作而从本机发送到目的机的数据帧中的IP数据报并填写下表。

5、分析截取的由于第3步操作而从目的机返回到本机的数据帧中的IP数据报并填写下(1)启动Telnet服务:方法一:我的电脑(右键)------管理-----服务和应用程序----服务,在其中找到telnet 服务(telnet服务默认情况是“禁止”了)设置为“手动”并开启服务。

方法二:在运行中输入cmd,在dos中先输入(windows 2003中输入: sc config tlntsvr start= auto,在windows xp输入:sc config telnet start = auto),再输入net start telnet.(2)然后使用dir文件查看对方C盘根目录下的文件系统结构,最后使用exit命令退出。

使用截取操作中的通信数据。

7、分析截取的由于第6步操作而从本机发送到目的机的数据帧中的TCP数据报并填写下表。

表。

三、实验报告1、记录实验内容各步骤的实验结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验十监听器编程实验
实验目的
熟悉监听器的主要功能
了解监听器的类型
掌握监听器的编程方法
掌握监听器的配置方法
实验内容
1、使用监听器技术,在前面实验的基础上,当每个用户登录系统主页面时,在
页面左上角显示网站的访问次数,并显示当前在线用户列表,如图1所示。

希望用户访问应用时,只有在关闭应用时,最新的访问次数才保存到数据库中,可以使用监听器监听ServletContext的启动和关闭。

图1 页面访问次数和在线用户列表
实验操作步骤
(1)新建一个Web Project,工程名称为ExperiTenListener。

将前面实现八中的
内容复制过来,实现用户登录后,显示当前在线的用户列表。

在此基础上,添加监听器,统计网站的访问次数。

(2)在数据库bookmgs下新建一个数据库表access_count,其中设置一个字段count,用于存放网站的访问次数。

(3)在src目录下新建一个包cs.javaee.listener,在此包下新建一个监听器类ContextListener,此类中contextInitialized()方法可以监听到服务器的启动,此时,读取数据库表access_count中的count字段,contextDestroyed()方法可以在服务器关闭时将最新的访问次数更新到数据库中。

ContextListener的代码如下:
(4)配置监听器。

在web.xml中添加监听器的配置,修改后的web.xml文件的代码如下:
(5)修改mainPage.jsp页面的代码,使其能在页面上显示当前页面访问的次
数。

mainPage.jsp文件中的<body>标签的代码如下:
(6)发布测试运行,效果如图1所示。

相关文档
最新文档