如何使用servlet映射显示在线用户

时间:2014-02-06 11:33:50

标签: java jsp servlets

我想显示使用此servlet的在线用户......

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.chatapp.useroperation.Client;

@WebServlet(name = "onlineUsersServlet", urlPatterns = { "/getOnlineUsersList" })
public class ListOfOnlineUsers extends HttpServlet {

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

        String commaSepeparatedStr ="";
        ServletContext appScope = request.getServletContext();
        String channel = request.getParameter("channel");
        final Map<String, List<Client>> clients = (Map<String, List<Client>>) appScope.getAttribute(LoginServlet.CLIENTS);
        System.out.println(clients);
        if(clients.size()> 0){
            final List<Client> onlineClients = clients.get(channel);
            if(onlineClients !=null){
                for (Client client : onlineClients) {
                    if(commaSepeparatedStr.equals("") ){
                        commaSepeparatedStr = client.getUserName();
                    }else{
                        commaSepeparatedStr =commaSepeparatedStr+","+ client.getUserName();

                    }
                }
            }
        }
        response.getWriter().write(commaSepeparatedStr);
        response.flushBuffer(); 

    }

}

如何从jsp向这个servlet传递值,以便将用户名存储在其列表中......是否可以在会话中将值放入该servlet中。

3 个答案:

答案 0 :(得分:0)

如果要将会话中的值存储到servlet,只需将属性附加到会话;

在登录期间,获取用户名并将值存储到会话中;

HttpSession sess = request.getSession();//Create new Session
//Get the username from login input
String username = request.getParameter("name");

//Attach the name to the Session.

sess.setAttribute("username", username);

只要会话处于活动状态,就可以随时获取值。

HttpSession sess = request.getSession(false);//Use the current Session
//Get the value fron the Session 
String username = (String) sess.getAttribute("username");//get the Attribute Username

你需要先将属性附加到会话才能以这种方式获得。

答案 1 :(得分:0)

在你的jsp中做

这样的事情:

<form action="/YOURWEBAPPNAME/onlineUsersServlet/getOnlineUsersList" method="get">
    <input type="text" name="test" value="Hello World">
    <input type="submit" value="Send">
</form>
你在doGet方法中的

执行此操作:

String userInput = request.getParameter("test");

并随意使用这些东西。

将这些内容放在会话中:

request.getSession(false).setAttribute("input",userInput);

并阅读:

 String lInput = (String) request.getSession(false).getAttribute("input");

答案 2 :(得分:0)

您可以或不可以从代码中的不同位置访问具有不同范围的变量。在JavaEE中,存在具有请求,会话和应用程序范围的变量。

请求范围意味着您可以设置它并在当前请求的所有类中使用它,这就是您现在所需要的。

对不起,我现在无法帮助你,但有了这个信息,Google或SO搜索框应该是你的朋友。我稍后会添加详细信息。

编辑 -

Stefan beike的回答有我正在谈论的这些细节。