监听三个域对象属性变化
Servlet规范定义了监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。
这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener ServletRequestAttributeListener
这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。
attributeRemoved 方法
当删除被监听对象中的一个属性时,web 容器调用事件监听器的这个方法进行相应
各个域属性监听器中的完整语法定义为:
public void attributeRemoved(ServletContextAttributeEvent scae)
public void attributeRemoved (HttpSessionBindingEvent hsbe)
public void attributeRemoved (ServletRequestAttributeEvent srae)
attributeAdded 方法
当向被监听器对象中增加一个属性时,web容器就调用事件监听器的 attributeAdded 方法进行相应,这个方法接受一个事件类型的参数,监听器可以通过这个参数来获得正在增加属性的域对象和被保存到域中的属性对象
各个域属性监听器中的完整语法定义为:
public void attributeAdded(ServletContextAttributeEvent scae)
public void attributeAdded(HttpSessionBindingEvent hsbe)
public void attributeAdded(ServletRequestAttributeEvent srae)
attributeReplaced 方法
当监听器的域对象中的某个属性被替换时,web容器调用事件监听器的这个方法进行相应
各个域属性监听器中的完整语法定义为:
public void attributeReplaced(ServletContextAttributeEvent scae)
public void attributeReplaced (HttpSessionBindingEvent hsbe)
public void attributeReplaced (ServletRequestAttributeEvent srae)
实现踢人功能案例
//////////////////////////实现踢人功能//////////////////////
////////////////User.java//////////////////////////////////
package com.hbsi.domain;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
///////////////////////////KickUserServlet.java/////////////
package com.hbsi.servlet;
import java.io.IOException;
import java.util.Map;
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 KickUserServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
username = new String(username.getBytes("iso8859-1"),"UTF-8");
Map map = (Map) this.getServletContext().getAttribute("map");
HttpSession session = (HttpSession) map.get(username);
if(session!=null){
session.invalidate();
map.remove(username);
}
request.getRequestDispatcher("/listuser.jsp").forward(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
/////////////////////////LoginServlet.java//////////////////
package com.hbsi.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.hbsi.domain.User;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
request.getSession().setAttribute("user",user);//给session添加了属性
response.sendRedirect("/Listenertest/index.jsp");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
/////////////////////////////CharseterEncodingFilter.java//////
package com.hbsi.web.filter;
import java.io.IOException;
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 CharseterEncodingFilter implements Filter {
private FilterConfig config = null;
private String defaultCharset = "UTF-8";
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
String charset = config.getInitParameter("charset");
if(charset==null){
charset = defaultCharset;
}
request.setCharacterEncoding(charset);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset="+charset);
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
}
}
////////////////////////SessionListener.java/////////////////
package com.hbsi.web.listener;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import com.hbsi.domain.User;
public class SessionListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
Object obj = arg0.getValue();
if(obj instanceof User){
User user =(User)obj;
HttpSession session = arg0.getSession();
Map map = (Map) session.getServletContext().getAttribute("map");
if(map==null){
map = new HashMap();
session.getServletContext().setAttribute("map",map);
}
map.put(user.getUsername(),session);
}
}
@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
}
////////////////////////////////web.xml/////////////////////////
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>CharseterEncodingFilter</filter-name>
<filter-class>com.hbsi.web.filter.CharseterEncodingFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharseterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.hbsi.web.listener.SessionListener</listener-class>
</listener>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.hbsi.servlet.LoginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>KickUserServlet</servlet-name>
<servlet-class>com.hbsi.servlet.KickUserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/servlet/LoginServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>KickUserServlet</servlet-name>
<url-pattern>/servlet/KickUserServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
//////////////////////////////index.jsp//////////////////////
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
欢迎您:${user.username} <br>
</body>
</html>
////////////////////////////////login.jsp////////////////////
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'login.jsp' starting page</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/servlet/LoginServlet" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="登陆"/>
</form>
</body>
</html>
//////////////////////////////listuser.jsp//////////////////
////////////
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'listuser.jsp' starting page</title>
</head>
<body>
当前在线用户为:<br/>
<c:forEach items="${map}" var="me">
<c:url value="/servlet/KickUserServlet" var="url">
<c:param name="username" value="${me.key}"></c:param>
</c:url>
${me.key}<a href="${url}">剔出去</a><br/>
</c:forEach>
</body>
</html>
分享到:
相关推荐
本资源用于servlet事件监听器和JSP基础学习,非常适合新手学习
servlet,监听器,javaservlet,监听器,java
我收集的servlet中事件、监听器机制、web.xml配置详解
servlet过滤器和监听器,servlet过滤器和监听器课件,servlet过滤器和监听器PPT
servlet监听器案例,web.xml,加jsp,listener的配置和使用
统计在线人员 人员登陆
javaee 中Servlet中监听器介绍.
第13章使用Servlet过滤器和监听器,基础知识
一个Servlet创建监听器的DEMO 用于监听客户端的请求、服务端的操作等
Servlet过滤器与监听器
servelt 监听器 class MyRequest extends HttpServletRequestWrapper { public MyRequest(HttpServletRequest request) { super(request); } public String MyEncoding(String value) { String value...
jsp/servlet中过滤器和监听器的区别,适用于想学习jsp/servlet并想了解及掌握过滤器和监听器来开发的同学
Servlet、监听器、过滤器、MVC模式介绍.docx
通过在网上浏览,总结有关servlet监听器的一些内容
关于Servlet监听器的几个例子,用于统计在线人数等等
事件发生时会触发监听器的成员方法,即事件处理器,传递事件对象。 事件处理器通过事件对象获得事件源,并对事件源进行处理。 Listener监听器 用于监听域对象创建和销毁的事件监听器 用于监听域对象属性增加和删除的...
NULL 博文链接:https://1601844782.iteye.com/blog/2274209
servlet过滤器与监听器
JAVA Servlet监听器listener学习资料,精心整理,望对各位大虾有帮助。
servlet 过滤器做的简单登陆demo 初学者的简单例子。