实验8 Servlet事件监听

实验8 Servlet事件监听

一、实验目的

1.定义一个在web应用程序内生成的事件

2.理解上下文、会话及请求不同监听接口的功能

3.利用监听器熟练编写Servlet应用


二、实验内容
1.对Servlet上下文进行监听练习
Dog.java
package com.mypackage;

/**
 * @author xuhaixin
 */
public class Dog {
	private String breed;

	public Dog(String str) {
		breed = str;
	}

	public String getBreed() {
		// TODO Auto-generated method stub
		return breed;
	}

}

MyServletContexListener.java
package com.myListener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.mypackage.Dog;

/**
 * @author xuhaixin
 */
public class MyServletContexListener implements
		ServletContextAttributeListener, ServletContextListener {

	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub

	}

	public void contextInitialized(ServletContextEvent arg0) {
		// 监听上下文创建,创建上下文属性
		ServletContext sc = arg0.getServletContext();
		String str = sc.getInitParameter("breed");
		Dog d = new Dog(str);
		sc.setAttribute("dogname", d);
	}

	public void attributeAdded(ServletContextAttributeEvent arg0) {
		// 监听上下文属性添加
		System.out.println("Web上下文中添加属性:" + arg0.getName() + ":"
				+ arg0.getValue());
	}

	public void attributeRemoved(ServletContextAttributeEvent arg0) {
		// 监听上下文属性删除
		System.out.println("Web上下文中删除属性:" + arg0.getName() + ":"
				+ arg0.getValue());
	}

	public void attributeReplaced(ServletContextAttributeEvent arg0) {
		// TODO Auto-generated method stub

	}

}

DispServletContext.java
package com.myServlet;

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 com.mypackage.Dog;

/**
 * @author xuhaixin
 *
 */
public class DispServletContext extends HttpServlet {

	public DispServletContext() {
		super();
	}

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	private static final String Content_Type = "text/html;charset=GB2312";

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType(Content_Type);// 设置生成的文档类型
		PrintWriter out = response.getWriter();// 得到输出字符输出流

		out.println("<HTML>");// 输出相应的HTML源文件
		out.println("<HEAD><TITLE>DisServletContext</TITLE></HEAD>");
		out.println("<BODY bgcolor=\"#ffffff\">");
		out.println("<p><H3>测试上下文监听器</H1></p>");
		Dog d = (Dog) getServletContext().getAttribute("dogname");
		out.println("dog's breed is:" + d.getBreed());
		out.println("<form method='post' action='/lab8/servlet/DelServletContexAttr'>");
		out.println("<input type=submit valuse='删除上下文属性' />");
		out.println("</Form>");
		out.println("</BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();// 关闭输出流
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

	public void init() throws ServletException {
		// Put your code here
	}

}

DelServletContextAttr.java
package com.myServlet;

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;

/**
 * @author xuhaixin
 */
public class DelServletContextAttr extends HttpServlet {

	public DelServletContextAttr() {
		super();
	}

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	private static final String Content_Type = "text/html;charset=GB2312";

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType(Content_Type);// 设置生成的文档类型
		PrintWriter out = response.getWriter();// 得到输出字符输出流

		out.println("<HTML>");// 输出相应的HTML源文件
		out.println("<HEAD><TITLE>DelServletContextAtrr</TITLE></HEAD>");
		out.println("<BODY bgcolor=\"#ffffff\">");
		getServletContext().removeAttribute("dogname");
		out.println("<h3>上下文属性删除成功!");
		out.println("</Form>");
		out.println("</BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();// 关闭输出流
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

	public void init() throws ServletException {
		// Put your code here
	}

}


web.xml
在<web-app>...</web-app>中添加如下配置信息:

	<context-param>
		<param-name>breed</param-name>
		<param-value>Great Dane</param-value>
	</context-param>
	<listener>
		<listener-class>com.myListener.MyServletContexListener</listener-class>
	</listener>
	<servlet>
		<servlet-name>DelServletContexAttr</servlet-name>
		<servlet-class>com.myServlet.DelServletContextAttr</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>DispServletContext</servlet-name>
		<servlet-class>com.myServlet.DispServletContext</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>DelServletContexAttr</servlet-name>
		<url-pattern>/servlet/DelServletContexAttr</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>DispServletContext</servlet-name>
		<url-pattern>/servlet/DispServletContext</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<login-config>
		<auth-method>BASIC</auth-method>
	</login-config>



 


2. 监听Http会话练习。利用监听器熟练编写一个web应用程序,实现输出从数据源获得学生成绩,并处理修改成绩的事件过程。(有做思考题同学,直接给出修改以后的代码即可)


三、结果分析及总结:

本实验介绍Servlet的特殊用法——监听器,监听器可以处理Web应用中的某些特殊事件,类似于Java图形界面编程中提供的事件处理机制。此外,介绍了Servlet事件的上下文、会话事件和请求事件对应的监听器的接口、接口提供的方法和方法的触发形式。对Servlet的三类主要事件编写事件监听器,并对事件做出相应处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值