这篇博客是filter、listener和servlet技术的相关总结,实现了简单的显示在线人数、在线人详细信息、管理员踢人功能
下面是详细代码
web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
<? xml version = "1.0" encoding = "UTF-8" ?>
< web-app version = "3.0"
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_3_0.xsd">
< display-name ></ display-name >
< filter >
< filter-name >character</ filter-name >
< filter-class >cn.hncu.filter.CharacterFilter</ filter-class >
< init-param >
< param-name >charset</ param-name >
< param-value >utf-8</ param-value >
</ init-param >
</ filter >
< filter >
< filter-name >login</ filter-name >
< filter-class >cn.hncu.filter.LoginFilter</ filter-class >
</ filter >
< filter-mapping >
< filter-name >character</ filter-name >
< url-pattern >/*</ url-pattern >
</ filter-mapping >
< filter-mapping >
< filter-name >login</ filter-name >
< url-pattern >/servlet/*</ url-pattern >
< url-pattern >/jsps/*</ url-pattern >
< dispatcher >REQUEST</ dispatcher >
< dispatcher >FORWARD</ dispatcher >
</ filter-mapping >
< listener >
< listener-class >cn.hncu.listener.MySessionListener</ listener-class >
</ listener >
< servlet >
< servlet-name >LoginServlet</ servlet-name >
< servlet-class >cn.hncu.servlet.LoginServlet</ servlet-class >
</ servlet >
< servlet >
< servlet-name >ShowServlet</ servlet-name >
< servlet-class >cn.hncu.servlet.ShowServlet</ servlet-class >
</ servlet >
< servlet >
< description >This is the description of my J2EE component</ description >
< display-name >This is the display name of my J2EE component</ display-name >
< servlet-name >KickOutServlet</ servlet-name >
< servlet-class >cn.hncu.servlet.KickOutServlet</ servlet-class >
</ servlet >
< servlet >
< description >This is the description of my J2EE component</ description >
< display-name >This is the display name of my J2EE component</ display-name >
< servlet-name >LoginOutServlet</ servlet-name >
< servlet-class >cn.hncu.servlet.LoginOutServlet</ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name >LoginServlet</ servlet-name >
< url-pattern >/LoginServlet</ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name >ShowServlet</ servlet-name >
< url-pattern >/servlet/ShowServlet</ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name >KickOutServlet</ servlet-name >
< url-pattern >/servlet/KickOutServlet</ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name >LoginOutServlet</ servlet-name >
< url-pattern >/servlet/LoginOutServlet</ url-pattern >
</ servlet-mapping >
< welcome-file-list >
< welcome-file >index.jsp</ welcome-file >
</ welcome-file-list >
</ web-app >
|
index.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
< html >
< head >
< title >在线人信息管理</ title >
</ head >
< body >
< h2 >在线人信息管理</ h2 >
< h3 >会员登录</ h3 >
< c:if test = "${ empty sessionScope.user.name}" var = "boo" >
< form action='<c:url value = "/LoginServlet" ></ c:url >'>
姓名:< input type = "text" name = "name" >< br />
< input type = "submit" value = "登录" >< br />
</ form >
</ c:if >
< c:if test = "${!boo}" >
欢迎回来,${ sessionScope.user.name}
< c:if test = "${ sessionScope.user.admin}" var = "bo" >
管理员
</ c:if >
< c:if test = "${!bo}" >
会员
</ c:if >
</ c:if >
< br />
< c:if test = "${!boo}" var = "boo" >
< a href='<c:url value = "/servlet/ShowServlet" />'>查看在线人信息</ a >< br />
< a href='<c:url value = "/servlet/LoginOutServlet" />'>安全退出</ a >< br />
</ c:if >
</ body >
</ html >
|
/jsps/show.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
<%@ 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 >在线人信息</ title >
< style type = "text/css" >
table {
color: green;
border: 1px solid blue;
border-collapse: collapse;
width: 500px;
margin: auto;
}
td {
border: 1px solid blue;
}
th {
border: 1px solid blue;
}
body {
text-align: center;
}
</ style >
< meta http-equiv = "refresh" content = "3" >
</ head >
< body >
< table >
< tr >
< th >姓名</ th >
< th >上线时间</ th >
< th >最后访问时间</ th >
< th >ip</ th >
< th >操作</ th >
</ tr >
< c:forEach items = "${requestScope.onlines}" var = "online" >
< tr >
< td >
< c:if test = "${!empty online.user }" var = "boo" >
${online.user.name }
</ c:if >
< c:if test = "${empty online.user }" >
游客
</ c:if >
</ td >
< td >${online.createTime }</ td >
< td >${online.lastAccessedTime }</ td >
< td >${online.ip }</ td >
< td >
< c:if test = "${online.user!=sessionScope.user }" >
< c:if test = "${!online.user.admin&&boo}" >
< a href='<c:url value = "/servlet/KickOutServlet?id=${online.id }" />' >踢出</ a >
</ c:if >
</ c:if >
</ td >
</ tr >
</ c:forEach >
</ table >
</ body >
</ html >
|
User.java(值对象)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package cn.hncu.domain;
public class User {
private String name;
private boolean admin;
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public boolean isAdmin() {
return admin;
}
public void setAdmin( boolean admin) {
this .admin = admin;
}
@Override
public String toString() {
return "User [name=" + name + ", admin=" + admin + "]" ;
}
}
|
MySessionListener.java(监听器)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
package cn.hncu.listener;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MySessionListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent se) {
Map<String, HttpSession> onlines= (Map<String, HttpSession>) se.getSession().getServletContext().getAttribute( "onlines" );
if (onlines== null ){
onlines=Collections.synchronizedMap( new HashMap<String, HttpSession>()); //对map进行加上同步锁
se.getSession().getServletContext().setAttribute( "onlines" ,onlines);
}
onlines.put(se.getSession().getId(), se.getSession());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
Map<String, HttpSession> onlines= (Map<String, HttpSession>) se.getSession().getServletContext().getAttribute( "onlines" );
if (onlines.containsKey(se.getSession().getId())){
onlines.remove(se.getSession().getId());
}
}
}
|
CharacterFilter.java(字符过滤器)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package cn.hncu.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 CharacterFilter implements Filter {
private String charset;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
charset=filterConfig.getInitParameter( "charset" );
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(charset);
response.setCharacterEncoding(charset);
HttpServletRequest req=(HttpServletRequest) request;
if (req.getSession().getAttribute( "ip" )== null ){
req.getSession().setAttribute( "ip" , req.getRemoteAddr());
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
|
LoginFilter.java(防止游客乱访问过滤器)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package cn.hncu.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;
import javax.servlet.http.HttpServletResponse;
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
if (req.getSession().getAttribute( "user" )== null ){
((HttpServletResponse)response).sendRedirect(req.getContextPath()+ "/index.jsp" );
return ;
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
|
LoginServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package cn.hncu.servlet;
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 cn.hncu.domain.User;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name=request.getParameter( "name" );
User user=(User) request.getSession().getAttribute( "user" );
if (user== null &&name!= null &&name.trim().length()> 0 ) { //封装User
user = new User();
user.setName(name);
if (name.equals( "admin" )){
user.setAdmin( true );
}
}
request.getSession().setAttribute( "user" , user);
response.sendRedirect(request.getContextPath()+ "/index.jsp" );
}
}
|
ShowServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
package cn.hncu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
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 ShowServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Map<String, HttpSession> onlines=(Map<String, HttpSession>) request.getServletContext().getAttribute( "onlines" );
List<Map<String, Object>> list= new ArrayList<Map<String,Object>>(); //吧Online封装成list
if (onlines!= null ) {
Iterator<HttpSession> it = onlines.values().iterator();
while (it.hasNext()) {
HttpSession s = it.next();
Map<String, Object> map = new HashMap<String, Object>();
map.put( "id" , s.getId());
SimpleDateFormat sdf= new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
map.put( "createTime" , sdf.format( new Date(s.getCreationTime())));
map.put( "lastAccessedTime" ,sdf.format( new Date(s.getLastAccessedTime())) );
map.put( "ip" , s.getAttribute( "ip" )); //ip信息在characterFilter中补
map.put( "user" , s.getAttribute( "user" ));
list.add(map);
}
}
request.setAttribute( "onlines" , list);
request.getRequestDispatcher( "/jsps/show.jsp" ).forward(request, response);
}
}
|
KickOutServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package cn.hncu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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 KickOutServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id=request.getParameter( "id" );
Map<String, HttpSession> onlines=(Map<String, HttpSession>) request.getServletContext().getAttribute( "onlines" );
if (onlines!= null ) {
if (onlines.containsKey(id)) {
onlines.get(id).invalidate();
}
}
request.getRequestDispatcher( "/servlet/ShowServlet" ).forward(request, response);
}
}
|
LoginOutServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package cn.hncu.servlet;
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;
public class LoginOutServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getSession().invalidate();
response.sendRedirect(request.getContextPath()+ "/index.jsp" );
}
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。