由于本人对于java没有接触过,但是项目现在需要一点java哈希表的知识,特向高手请教。
需求:
前台通过GET方式请求一个Servlet,传递一个参数userName,Servlet接受这个参数,查找哈希表,如果在哈希表没有找到userName的话(userName为Key),则将userName当做Key存放在哈希表中,当前系统时间作为这个Key的Value;如果哈希表中已经有了userName,则找到这个userName的Value,也就是当时存放这个Key时的系统时间,与当前时间比较,如果当前时间减去2分钟大于当时的系统时间(userName的Value),则将该userName的key和value从哈希表中清除。最后将这个哈希表的key以一个数组的形式返回前台。(我前台是用javascript方式,xmlhttp的get方式请求的,不知道怎么能接收到Servlet返回的值)问题解决另开100分相送。谢谢。
需求:
前台通过GET方式请求一个Servlet,传递一个参数userName,Servlet接受这个参数,查找哈希表,如果在哈希表没有找到userName的话(userName为Key),则将userName当做Key存放在哈希表中,当前系统时间作为这个Key的Value;如果哈希表中已经有了userName,则找到这个userName的Value,也就是当时存放这个Key时的系统时间,与当前时间比较,如果当前时间减去2分钟大于当时的系统时间(userName的Value),则将该userName的key和value从哈希表中清除。最后将这个哈希表的key以一个数组的形式返回前台。(我前台是用javascript方式,xmlhttp的get方式请求的,不知道怎么能接收到Servlet返回的值)问题解决另开100分相送。谢谢。
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
String a = request.getParameter("userName");//获得username 的值
long time = System.currentTimeMillis();//获得系统当前时间
//和hash表比较,执行应有的操作
PrintWriter out = response.getWriter();
out.println(你的hash表);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doGet(request, response);
}}
从哈希表中删除关键字key所对应的对象。
public synchronized void clear()
清除哈希表
set.remove(a);
package com;import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
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 Test extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
HttpSession session =request.getSession();
PrintWriter out = response.getWriter();
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
// 从session中得到Map,如果没有,则创建新的Map
//LZ的user信息应该登陆是在别的地方以 session.setAttribute("userNameMap", Object);
Map nameMap = (Map)session.getAttribute("userNameMap");
if (null == nameMap)
{
nameMap = new HashMap();
}
//业务逻辑{
//传递一个参数userName,Servlet接受这个参数,查找哈希表,
/**
* 获得从页面传过来的?username = "";
*/
String username =(String)request.getAttribute("username");
//如果在哈希表没有找到userName的话(userName为Key),
if(!nameMap.containsKey(username)){
// 则将userName当做Key存放在哈希表中,当前系统时间作为这个Key的Value;
nameMap.put(username, getSysDate());
}
//如果哈希表中已经有了userName,则找到这个userName的Value,
else{
//也就是当时存放这个Key时的系统时间,与当前时间比较,
int nameDate = (Integer)nameMap.get(username);
//如果当前时间减去2分钟大于当时的系统时间(userName的Value),
if(nameDate - getSysDate()>2){
//则将该userName的key和value从哈希表中清除。
nameMap.remove(username);
}
}
//最后将这个哈希表的key以一个数组的形式返回前台。
//(我前台是用javascript方式,xmlhttp的get方式请求的,不知道怎么能接收到Servlet返回的值)
out.println(getuserString(nameMap));
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
this.doGet(request, response);
}
/**
* 获得系统时间 格式自己根据需求定义
* @return
*/
public static int getSysDate(){
Calendar day = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhh24MMss");
return Integer.parseInt((String)dateFormat.format(day.getTime()));
}
/**
* 最后将这个哈希表的key以一个name,name,name的String形式返回前台。
* 在JS中用nameString.split(,)获得数组
* @param nameMap
* @return
*/
public static String getuserString(Map nameMap ) {
String nameString = null;
if (nameMap.size() > 0) {
Iterator itor = nameMap.keySet().iterator();
while (itor.hasNext()) {
nameString = (String) itor.next()+",";
}
}
return nameString; }
} //web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<description>Test</description>
<display-name>Test</display-name>
<servlet-name>Test</servlet-name>
<servlet-class>com.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/Test</url-pattern>
</servlet-mapping>
</web-app>
//页面
<html>
<head>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript">
var httpRequest;
function connectToAjax(){
if(window.XMLHttpRequest){
httpRequest = new XMLHttpRequest();
if(httpRequest.overrideMimeType){
httpRequest.overriderMimeType("text/xml");
}
}
else if (window.ActiveXObject){
try{
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
}
if(!httpRequest){
alert("httpRequest 创建异常!");
}
httpRequest.onreadystatechange=getjsp;
httpRequest.open("GET", "/Test/Test", true);
httpRequest.send(null);
}
function getjsp(){
if(httpRequest.readyState==4){
if(httpRequest.status==200){
//返回值根据需要自己处理此处只弹出
alert(httpRequest.responseText);
}
}
}
</script>
</head>
<body>
<input type="button" value="提交" alt="TEST" onclick="connectToAjax()" />
</body>
</html>
throws ServletException,IOException
{
String userName = request.getParameter("userName");//获得username 的值
long currentTime = System.currentTimeMillis();//获得系统当前时间HashMap<String, long> map = new HashMap<String, long>();//哈希表
if (map.containsKey(userName))//用户名是否存在于当前哈希表中
{
if (currentTime - 120000 > map.get(userName))//当前时间减去2分钟大于当时的系统时间
{
map.remove(userName);//将该userName的key和value从哈希表中清除
}
}
else
{
map.put(userName, currentTime);//将userName当做Key存放在哈希表中,当前系统时间作为这个Key的Value
}
String[] userNames = map.keySet().toArrays();//哈希表的key以一个数组的形式
}
if(nameDate - getSysDate()>200){
用10楼那位大侠的比较好
取出来的都是Object型的,需要强制转化一下。(Long)map.get("username");
HashMap<String, long> map = new HashMap<String, long>();//哈希表
→
HashMap map = new HashMap();//哈希表还有这句
if (currentTime - 120000 > map.get(userName))
→
if (currentTime - 120000 > Long.parseLong(map.get(userName)))这句可能需要改
String[] userNames = map.keySet().toArrays();
→
Object[] userNames = map.keySet().toArrays();然后取的时候在强转成String类型的
String user1 = (String)userNames[0];
response.getWriter.println("[key1,key2,key3...keyn]");
然后在页面就可以用解析服务器传回来的json串了:
var key_arr = t.responseText.evalJSON();