Servlet:新手不得不掌握的功能和要避免的坑

今天在整理利用jsp +Servlet做的电商项目时候,因为工作需要加入了防用户重复登录和统计在线人数。期间遇到了一些问题,弄了2,3个小时,原因都是很简单的但不平时不会注意的一些细节。希望大家以后可以绕过这些坑,提高开发效率。

目录

  1. 防用户多次的登录的思路以及常见错误
  2. 在线人数的思路以及常见错误
  3. Servlet的其他常见错误

1. 防止同一个用户多次登录

具体思路:可以定义一个静态的HashMap<用户id, HttpSession> .用于保存已经登录的用户信息以及相应的session。 定义一个session属性监听器,用于监听session属性的变化。当 当前色session的用户id属性发生变化时,执行监听代码。用于判断map中是否已存在该用户,如果已存在 map.containskey,那么就把map中的该用户对应session中保存的用户信息删除掉session.removeAttr. 到最后直接把当前用户进行覆盖或者追加到map中。

以下是功能实现的大概的代码。主要看注释啦。~

TIM截图20180830193617.png

其中提到的map是一个的hashmap:
public static Map curUsers = new HashMap;

自己所遇到的错误:

  1. 确保只有一人登录时,需要将 之前session保存的用户信息给清空掉,而自己只删了一部分,导致该功能一直实现不成功。
  2. 将旧用户信息删除之后,将用户信息添加到当前session中,如果该用户是之前没有登录的,那么直接添加到map中。

2. 实现统计在线人数

如果防止单用户多次登录已经实现,那么该功能可以直接输出该map的长度即可,因为map中每个数据都是一个用户,所以长度就是在线人数。所以我们直接保存在session中即可。但要注意的是因为在线人数要保持统一,所以在每次添加用户时,我们都要将map的长度重新添加到session中。

System.out.println("在线人数: "+Lanmao.onlineuser.size());

3. servlet的常见错误

  1. 利用Servlet进行获取页面数据时,确保HTML表单标签中name属性和Servlet中获取数据的使用name值是一致的。不然会报空指针异常
  2. Servlet中response是不能使用request中的数据的。
  3. 执行顺序 监听器-->过滤器->Servlet

你可能感兴趣的:(Servlet:新手不得不掌握的功能和要避免的坑)